diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/AttributeCS.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/AttributeCS.java
index 0e1ade5..5e4e042 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/AttributeCS.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/AttributeCS.java
@@ -17,10 +17,42 @@
  * A representation of the model object '<em><b>Attribute CS</b></em>'.
  * <!-- end-user-doc -->
  *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.AttributeCS#isIsId <em>Is Id</em>}</li>
+ * </ul>
  *
  * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getAttributeCS()
  * @model
  * @generated
  */
 public interface AttributeCS extends StructuralFeatureCS {
+
+	/**
+	 * Returns the value of the '<em><b>Is Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Id</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Id</em>' attribute.
+	 * @see #setIsId(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getAttributeCS_IsId()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.AttributeCS#isIsId <em>Is Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Id</em>' attribute.
+	 * @see #isIsId()
+	 * @generated
+	 */
+	void setIsId(boolean value);
 } // AttributeCS
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/BaseCSPackage.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/BaseCSPackage.java
index a47e334..bd3697e 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/BaseCSPackage.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/BaseCSPackage.java
@@ -831,13 +831,31 @@
 	int TYPED_ELEMENT_CS__NAME = NAMED_ELEMENT_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TYPED_ELEMENT_CS__IS_NOT_UNIQUE = NAMED_ELEMENT_CS_FEATURE_COUNT + 0;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int TYPED_ELEMENT_CS__IS_OPTIONAL = NAMED_ELEMENT_CS_FEATURE_COUNT + 0;
+	int TYPED_ELEMENT_CS__IS_OPTIONAL = NAMED_ELEMENT_CS_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TYPED_ELEMENT_CS__IS_ORDERED = NAMED_ELEMENT_CS_FEATURE_COUNT + 2;
 
 	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
@@ -846,16 +864,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TYPED_ELEMENT_CS__OWNED_TYPE = NAMED_ELEMENT_CS_FEATURE_COUNT + 1;
-
-	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int TYPED_ELEMENT_CS__QUALIFIERS = NAMED_ELEMENT_CS_FEATURE_COUNT + 2;
+	int TYPED_ELEMENT_CS__OWNED_TYPE = NAMED_ELEMENT_CS_FEATURE_COUNT + 3;
 
 	/**
 	 * The number of structural features of the '<em>Typed Element CS</em>' class.
@@ -864,7 +873,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TYPED_ELEMENT_CS_FEATURE_COUNT = NAMED_ELEMENT_CS_FEATURE_COUNT + 3;
+	int TYPED_ELEMENT_CS_FEATURE_COUNT = NAMED_ELEMENT_CS_FEATURE_COUNT + 4;
 
 	/**
 	 * The feature id for the '<em><b>Csi</b></em>' attribute.
@@ -921,6 +930,15 @@
 	int FEATURE_CS__NAME = TYPED_ELEMENT_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_CS__IS_NOT_UNIQUE = TYPED_ELEMENT_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -930,6 +948,15 @@
 	int FEATURE_CS__IS_OPTIONAL = TYPED_ELEMENT_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_CS__IS_ORDERED = TYPED_ELEMENT_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -939,13 +966,31 @@
 	int FEATURE_CS__OWNED_TYPE = TYPED_ELEMENT_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
+	 * The feature id for the '<em><b>Is Definition</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CS__QUALIFIERS = TYPED_ELEMENT_CS__QUALIFIERS;
+	int FEATURE_CS__IS_DEFINITION = TYPED_ELEMENT_CS_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_CS__IS_DERIVED = TYPED_ELEMENT_CS_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_CS__IS_STATIC = TYPED_ELEMENT_CS_FEATURE_COUNT + 2;
 
 	/**
 	 * The number of structural features of the '<em>Feature CS</em>' class.
@@ -954,7 +999,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CS_FEATURE_COUNT = TYPED_ELEMENT_CS_FEATURE_COUNT + 0;
+	int FEATURE_CS_FEATURE_COUNT = TYPED_ELEMENT_CS_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Csi</b></em>' attribute.
@@ -1011,6 +1056,15 @@
 	int STRUCTURAL_FEATURE_CS__NAME = FEATURE_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRUCTURAL_FEATURE_CS__IS_NOT_UNIQUE = FEATURE_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1020,6 +1074,15 @@
 	int STRUCTURAL_FEATURE_CS__IS_OPTIONAL = FEATURE_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRUCTURAL_FEATURE_CS__IS_ORDERED = FEATURE_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1029,13 +1092,31 @@
 	int STRUCTURAL_FEATURE_CS__OWNED_TYPE = FEATURE_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
+	 * The feature id for the '<em><b>Is Definition</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int STRUCTURAL_FEATURE_CS__QUALIFIERS = FEATURE_CS__QUALIFIERS;
+	int STRUCTURAL_FEATURE_CS__IS_DEFINITION = FEATURE_CS__IS_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRUCTURAL_FEATURE_CS__IS_DERIVED = FEATURE_CS__IS_DERIVED;
+
+	/**
+	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRUCTURAL_FEATURE_CS__IS_STATIC = FEATURE_CS__IS_STATIC;
 
 	/**
 	 * The feature id for the '<em><b>Default</b></em>' attribute.
@@ -1047,13 +1128,49 @@
 	int STRUCTURAL_FEATURE_CS__DEFAULT = FEATURE_CS_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Is Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRUCTURAL_FEATURE_CS__IS_READONLY = FEATURE_CS_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Is Transient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRUCTURAL_FEATURE_CS__IS_TRANSIENT = FEATURE_CS_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Is Unsettable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRUCTURAL_FEATURE_CS__IS_UNSETTABLE = FEATURE_CS_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Is Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRUCTURAL_FEATURE_CS__IS_VOLATILE = FEATURE_CS_FEATURE_COUNT + 4;
+
+	/**
 	 * The feature id for the '<em><b>Owned Default Expressions</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int STRUCTURAL_FEATURE_CS__OWNED_DEFAULT_EXPRESSIONS = FEATURE_CS_FEATURE_COUNT + 1;
+	int STRUCTURAL_FEATURE_CS__OWNED_DEFAULT_EXPRESSIONS = FEATURE_CS_FEATURE_COUNT + 5;
 
 	/**
 	 * The feature id for the '<em><b>Owning Class</b></em>' container reference.
@@ -1062,7 +1179,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STRUCTURAL_FEATURE_CS__OWNING_CLASS = FEATURE_CS_FEATURE_COUNT + 2;
+	int STRUCTURAL_FEATURE_CS__OWNING_CLASS = FEATURE_CS_FEATURE_COUNT + 6;
 
 	/**
 	 * The number of structural features of the '<em>Structural Feature CS</em>' class.
@@ -1071,7 +1188,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STRUCTURAL_FEATURE_CS_FEATURE_COUNT = FEATURE_CS_FEATURE_COUNT + 3;
+	int STRUCTURAL_FEATURE_CS_FEATURE_COUNT = FEATURE_CS_FEATURE_COUNT + 7;
 
 	/**
 	 * The feature id for the '<em><b>Csi</b></em>' attribute.
@@ -1128,6 +1245,15 @@
 	int ATTRIBUTE_CS__NAME = STRUCTURAL_FEATURE_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ATTRIBUTE_CS__IS_NOT_UNIQUE = STRUCTURAL_FEATURE_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1137,6 +1263,15 @@
 	int ATTRIBUTE_CS__IS_OPTIONAL = STRUCTURAL_FEATURE_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ATTRIBUTE_CS__IS_ORDERED = STRUCTURAL_FEATURE_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1146,13 +1281,31 @@
 	int ATTRIBUTE_CS__OWNED_TYPE = STRUCTURAL_FEATURE_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
+	 * The feature id for the '<em><b>Is Definition</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ATTRIBUTE_CS__QUALIFIERS = STRUCTURAL_FEATURE_CS__QUALIFIERS;
+	int ATTRIBUTE_CS__IS_DEFINITION = STRUCTURAL_FEATURE_CS__IS_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ATTRIBUTE_CS__IS_DERIVED = STRUCTURAL_FEATURE_CS__IS_DERIVED;
+
+	/**
+	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ATTRIBUTE_CS__IS_STATIC = STRUCTURAL_FEATURE_CS__IS_STATIC;
 
 	/**
 	 * The feature id for the '<em><b>Default</b></em>' attribute.
@@ -1164,6 +1317,42 @@
 	int ATTRIBUTE_CS__DEFAULT = STRUCTURAL_FEATURE_CS__DEFAULT;
 
 	/**
+	 * The feature id for the '<em><b>Is Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ATTRIBUTE_CS__IS_READONLY = STRUCTURAL_FEATURE_CS__IS_READONLY;
+
+	/**
+	 * The feature id for the '<em><b>Is Transient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ATTRIBUTE_CS__IS_TRANSIENT = STRUCTURAL_FEATURE_CS__IS_TRANSIENT;
+
+	/**
+	 * The feature id for the '<em><b>Is Unsettable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ATTRIBUTE_CS__IS_UNSETTABLE = STRUCTURAL_FEATURE_CS__IS_UNSETTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Is Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ATTRIBUTE_CS__IS_VOLATILE = STRUCTURAL_FEATURE_CS__IS_VOLATILE;
+
+	/**
 	 * The feature id for the '<em><b>Owned Default Expressions</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1182,13 +1371,22 @@
 	int ATTRIBUTE_CS__OWNING_CLASS = STRUCTURAL_FEATURE_CS__OWNING_CLASS;
 
 	/**
+	 * The feature id for the '<em><b>Is Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ATTRIBUTE_CS__IS_ID = STRUCTURAL_FEATURE_CS_FEATURE_COUNT + 0;
+
+	/**
 	 * The number of structural features of the '<em>Attribute CS</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ATTRIBUTE_CS_FEATURE_COUNT = STRUCTURAL_FEATURE_CS_FEATURE_COUNT + 0;
+	int ATTRIBUTE_CS_FEATURE_COUNT = STRUCTURAL_FEATURE_CS_FEATURE_COUNT + 1;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.xtext.basecs.impl.ClassCSImpl <em>Class CS</em>}' class.
@@ -2594,6 +2792,15 @@
 	int OPERATION_CS__NAME = FEATURE_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OPERATION_CS__IS_NOT_UNIQUE = FEATURE_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2603,6 +2810,15 @@
 	int OPERATION_CS__IS_OPTIONAL = FEATURE_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OPERATION_CS__IS_ORDERED = FEATURE_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2612,13 +2828,31 @@
 	int OPERATION_CS__OWNED_TYPE = FEATURE_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
+	 * The feature id for the '<em><b>Is Definition</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int OPERATION_CS__QUALIFIERS = FEATURE_CS__QUALIFIERS;
+	int OPERATION_CS__IS_DEFINITION = FEATURE_CS__IS_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OPERATION_CS__IS_DERIVED = FEATURE_CS__IS_DERIVED;
+
+	/**
+	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OPERATION_CS__IS_STATIC = FEATURE_CS__IS_STATIC;
 
 	/**
 	 * The feature id for the '<em><b>Owned Signature</b></em>' containment reference.
@@ -2919,6 +3153,15 @@
 	int PARAMETER_CS__NAME = TYPED_ELEMENT_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PARAMETER_CS__IS_NOT_UNIQUE = TYPED_ELEMENT_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2928,6 +3171,15 @@
 	int PARAMETER_CS__IS_OPTIONAL = TYPED_ELEMENT_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PARAMETER_CS__IS_ORDERED = TYPED_ELEMENT_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2937,15 +3189,6 @@
 	int PARAMETER_CS__OWNED_TYPE = TYPED_ELEMENT_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PARAMETER_CS__QUALIFIERS = TYPED_ELEMENT_CS__QUALIFIERS;
-
-	/**
 	 * The feature id for the '<em><b>Owning Operation</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3282,6 +3525,15 @@
 	int REFERENCE_CS__NAME = STRUCTURAL_FEATURE_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_NOT_UNIQUE = STRUCTURAL_FEATURE_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3291,6 +3543,15 @@
 	int REFERENCE_CS__IS_OPTIONAL = STRUCTURAL_FEATURE_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_ORDERED = STRUCTURAL_FEATURE_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3300,13 +3561,31 @@
 	int REFERENCE_CS__OWNED_TYPE = STRUCTURAL_FEATURE_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
+	 * The feature id for the '<em><b>Is Definition</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int REFERENCE_CS__QUALIFIERS = STRUCTURAL_FEATURE_CS__QUALIFIERS;
+	int REFERENCE_CS__IS_DEFINITION = STRUCTURAL_FEATURE_CS__IS_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_DERIVED = STRUCTURAL_FEATURE_CS__IS_DERIVED;
+
+	/**
+	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_STATIC = STRUCTURAL_FEATURE_CS__IS_STATIC;
 
 	/**
 	 * The feature id for the '<em><b>Default</b></em>' attribute.
@@ -3318,6 +3597,42 @@
 	int REFERENCE_CS__DEFAULT = STRUCTURAL_FEATURE_CS__DEFAULT;
 
 	/**
+	 * The feature id for the '<em><b>Is Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_READONLY = STRUCTURAL_FEATURE_CS__IS_READONLY;
+
+	/**
+	 * The feature id for the '<em><b>Is Transient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_TRANSIENT = STRUCTURAL_FEATURE_CS__IS_TRANSIENT;
+
+	/**
+	 * The feature id for the '<em><b>Is Unsettable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_UNSETTABLE = STRUCTURAL_FEATURE_CS__IS_UNSETTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Is Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_VOLATILE = STRUCTURAL_FEATURE_CS__IS_VOLATILE;
+
+	/**
 	 * The feature id for the '<em><b>Owned Default Expressions</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3354,13 +3669,31 @@
 	int REFERENCE_CS__REFERRED_OPPOSITE = STRUCTURAL_FEATURE_CS_FEATURE_COUNT + 1;
 
 	/**
+	 * The feature id for the '<em><b>Is Composes</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_COMPOSES = STRUCTURAL_FEATURE_CS_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Is Resolve</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_CS__IS_RESOLVE = STRUCTURAL_FEATURE_CS_FEATURE_COUNT + 3;
+
+	/**
 	 * The number of structural features of the '<em>Reference CS</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int REFERENCE_CS_FEATURE_COUNT = STRUCTURAL_FEATURE_CS_FEATURE_COUNT + 2;
+	int REFERENCE_CS_FEATURE_COUNT = STRUCTURAL_FEATURE_CS_FEATURE_COUNT + 4;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.xtext.basecs.impl.RootCSImpl <em>Root CS</em>}' class.
@@ -4142,6 +4475,15 @@
 	int TUPLE_PART_CS__NAME = TYPED_ELEMENT_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TUPLE_PART_CS__IS_NOT_UNIQUE = TYPED_ELEMENT_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4151,6 +4493,15 @@
 	int TUPLE_PART_CS__IS_OPTIONAL = TYPED_ELEMENT_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TUPLE_PART_CS__IS_ORDERED = TYPED_ELEMENT_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4160,15 +4511,6 @@
 	int TUPLE_PART_CS__OWNED_TYPE = TYPED_ELEMENT_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int TUPLE_PART_CS__QUALIFIERS = TYPED_ELEMENT_CS__QUALIFIERS;
-
-	/**
 	 * The number of structural features of the '<em>Tuple Part CS</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4625,6 +4967,17 @@
 	EClass getAttributeCS();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.AttributeCS#isIsId <em>Is Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Id</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.AttributeCS#isIsId()
+	 * @see #getAttributeCS()
+	 * @generated
+	 */
+	EAttribute getAttributeCS_IsId();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.ocl.xtext.basecs.ClassCS <em>Class CS</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4900,6 +5253,39 @@
 	EClass getFeatureCS();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.FeatureCS#isIsDefinition <em>Is Definition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Definition</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.FeatureCS#isIsDefinition()
+	 * @see #getFeatureCS()
+	 * @generated
+	 */
+	EAttribute getFeatureCS_IsDefinition();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.FeatureCS#isIsDerived <em>Is Derived</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Derived</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.FeatureCS#isIsDerived()
+	 * @see #getFeatureCS()
+	 * @generated
+	 */
+	EAttribute getFeatureCS_IsDerived();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.FeatureCS#isIsStatic <em>Is Static</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Static</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.FeatureCS#isIsStatic()
+	 * @see #getFeatureCS()
+	 * @generated
+	 */
+	EAttribute getFeatureCS_IsStatic();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.ocl.xtext.basecs.ImportCS <em>Import CS</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5518,6 +5904,28 @@
 	EReference getReferenceCS_ReferredOpposite();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.ReferenceCS#isIsComposes <em>Is Composes</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Composes</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.ReferenceCS#isIsComposes()
+	 * @see #getReferenceCS()
+	 * @generated
+	 */
+	EAttribute getReferenceCS_IsComposes();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.ReferenceCS#isIsResolve <em>Is Resolve</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Resolve</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.ReferenceCS#isIsResolve()
+	 * @see #getReferenceCS()
+	 * @generated
+	 */
+	EAttribute getReferenceCS_IsResolve();
+
+	/**
 	 * Returns the meta object for the reference list '{@link org.eclipse.ocl.xtext.basecs.ReferenceCS#getReferredKeys <em>Referred Keys</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5700,6 +6108,50 @@
 	EAttribute getStructuralFeatureCS_Default();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsReadonly <em>Is Readonly</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Readonly</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsReadonly()
+	 * @see #getStructuralFeatureCS()
+	 * @generated
+	 */
+	EAttribute getStructuralFeatureCS_IsReadonly();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsTransient <em>Is Transient</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Transient</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsTransient()
+	 * @see #getStructuralFeatureCS()
+	 * @generated
+	 */
+	EAttribute getStructuralFeatureCS_IsTransient();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsUnsettable <em>Is Unsettable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Unsettable</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsUnsettable()
+	 * @see #getStructuralFeatureCS()
+	 * @generated
+	 */
+	EAttribute getStructuralFeatureCS_IsUnsettable();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsVolatile <em>Is Volatile</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Volatile</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsVolatile()
+	 * @see #getStructuralFeatureCS()
+	 * @generated
+	 */
+	EAttribute getStructuralFeatureCS_IsVolatile();
+
+	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#getOwnedDefaultExpressions <em>Owned Default Expressions</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5953,6 +6405,17 @@
 	EClass getTypedElementCS();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsNotUnique <em>Is Not Unique</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Not Unique</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsNotUnique()
+	 * @see #getTypedElementCS()
+	 * @generated
+	 */
+	EAttribute getTypedElementCS_IsNotUnique();
+
+	/**
 	 * Returns the meta object for the containment reference '{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#getOwnedType <em>Owned Type</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5964,17 +6427,6 @@
 	EReference getTypedElementCS_OwnedType();
 
 	/**
-	 * Returns the meta object for the attribute list '{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#getQualifiers <em>Qualifiers</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute list '<em>Qualifiers</em>'.
-	 * @see org.eclipse.ocl.xtext.basecs.TypedElementCS#getQualifiers()
-	 * @see #getTypedElementCS()
-	 * @generated
-	 */
-	EAttribute getTypedElementCS_Qualifiers();
-
-	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsOptional <em>Is Optional</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5986,6 +6438,17 @@
 	EAttribute getTypedElementCS_IsOptional();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsOrdered <em>Is Ordered</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Ordered</em>'.
+	 * @see org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsOrdered()
+	 * @see #getTypedElementCS()
+	 * @generated
+	 */
+	EAttribute getTypedElementCS_IsOrdered();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.ocl.xtext.basecs.TypedRefCS <em>Typed Ref CS</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6213,6 +6676,14 @@
 		EClass ATTRIBUTE_CS = eINSTANCE.getAttributeCS();
 
 		/**
+		 * The meta object literal for the '<em><b>Is Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ATTRIBUTE_CS__IS_ID = eINSTANCE.getAttributeCS_IsId();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.ocl.xtext.basecs.impl.ClassCSImpl <em>Class CS</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -6443,6 +6914,30 @@
 		EClass FEATURE_CS = eINSTANCE.getFeatureCS();
 
 		/**
+		 * The meta object literal for the '<em><b>Is Definition</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_CS__IS_DEFINITION = eINSTANCE.getFeatureCS_IsDefinition();
+
+		/**
+		 * The meta object literal for the '<em><b>Is Derived</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_CS__IS_DERIVED = eINSTANCE.getFeatureCS_IsDerived();
+
+		/**
+		 * The meta object literal for the '<em><b>Is Static</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_CS__IS_STATIC = eINSTANCE.getFeatureCS_IsStatic();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.ocl.xtext.basecs.impl.ImportCSImpl <em>Import CS</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -6947,6 +7442,22 @@
 		EReference REFERENCE_CS__REFERRED_OPPOSITE = eINSTANCE.getReferenceCS_ReferredOpposite();
 
 		/**
+		 * The meta object literal for the '<em><b>Is Composes</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute REFERENCE_CS__IS_COMPOSES = eINSTANCE.getReferenceCS_IsComposes();
+
+		/**
+		 * The meta object literal for the '<em><b>Is Resolve</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute REFERENCE_CS__IS_RESOLVE = eINSTANCE.getReferenceCS_IsResolve();
+
+		/**
 		 * The meta object literal for the '<em><b>Referred Keys</b></em>' reference list feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -7093,6 +7604,38 @@
 		EAttribute STRUCTURAL_FEATURE_CS__DEFAULT = eINSTANCE.getStructuralFeatureCS_Default();
 
 		/**
+		 * The meta object literal for the '<em><b>Is Readonly</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STRUCTURAL_FEATURE_CS__IS_READONLY = eINSTANCE.getStructuralFeatureCS_IsReadonly();
+
+		/**
+		 * The meta object literal for the '<em><b>Is Transient</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STRUCTURAL_FEATURE_CS__IS_TRANSIENT = eINSTANCE.getStructuralFeatureCS_IsTransient();
+
+		/**
+		 * The meta object literal for the '<em><b>Is Unsettable</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STRUCTURAL_FEATURE_CS__IS_UNSETTABLE = eINSTANCE.getStructuralFeatureCS_IsUnsettable();
+
+		/**
+		 * The meta object literal for the '<em><b>Is Volatile</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STRUCTURAL_FEATURE_CS__IS_VOLATILE = eINSTANCE.getStructuralFeatureCS_IsVolatile();
+
+		/**
 		 * The meta object literal for the '<em><b>Owned Default Expressions</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -7307,6 +7850,14 @@
 		EClass TYPED_ELEMENT_CS = eINSTANCE.getTypedElementCS();
 
 		/**
+		 * The meta object literal for the '<em><b>Is Not Unique</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TYPED_ELEMENT_CS__IS_NOT_UNIQUE = eINSTANCE.getTypedElementCS_IsNotUnique();
+
+		/**
 		 * The meta object literal for the '<em><b>Owned Type</b></em>' containment reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -7315,14 +7866,6 @@
 		EReference TYPED_ELEMENT_CS__OWNED_TYPE = eINSTANCE.getTypedElementCS_OwnedType();
 
 		/**
-		 * The meta object literal for the '<em><b>Qualifiers</b></em>' attribute list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute TYPED_ELEMENT_CS__QUALIFIERS = eINSTANCE.getTypedElementCS_Qualifiers();
-
-		/**
 		 * The meta object literal for the '<em><b>Is Optional</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -7331,6 +7874,14 @@
 		EAttribute TYPED_ELEMENT_CS__IS_OPTIONAL = eINSTANCE.getTypedElementCS_IsOptional();
 
 		/**
+		 * The meta object literal for the '<em><b>Is Ordered</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TYPED_ELEMENT_CS__IS_ORDERED = eINSTANCE.getTypedElementCS_IsOrdered();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.ocl.xtext.basecs.impl.TypedRefCSImpl <em>Typed Ref CS</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/FeatureCS.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/FeatureCS.java
index 3090db0..e0a2d8e 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/FeatureCS.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/FeatureCS.java
@@ -18,6 +18,14 @@
  * A representation of the model object '<em><b>Feature CS</b></em>'.
  * <!-- end-user-doc -->
  *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.FeatureCS#isIsDefinition <em>Is Definition</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.FeatureCS#isIsDerived <em>Is Derived</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.FeatureCS#isIsStatic <em>Is Static</em>}</li>
+ * </ul>
  *
  * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getFeatureCS()
  * @model abstract="true"
@@ -25,4 +33,82 @@
  */
 public interface FeatureCS extends TypedElementCS {
 
+	/**
+	 * Returns the value of the '<em><b>Is Definition</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Definition</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Definition</em>' attribute.
+	 * @see #setIsDefinition(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getFeatureCS_IsDefinition()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsDefinition();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.FeatureCS#isIsDefinition <em>Is Definition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Definition</em>' attribute.
+	 * @see #isIsDefinition()
+	 * @generated
+	 */
+	void setIsDefinition(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Derived</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Derived</em>' attribute.
+	 * @see #setIsDerived(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getFeatureCS_IsDerived()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsDerived();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.FeatureCS#isIsDerived <em>Is Derived</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Derived</em>' attribute.
+	 * @see #isIsDerived()
+	 * @generated
+	 */
+	void setIsDerived(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Static</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Static</em>' attribute.
+	 * @see #setIsStatic(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getFeatureCS_IsStatic()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsStatic();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.FeatureCS#isIsStatic <em>Is Static</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Static</em>' attribute.
+	 * @see #isIsStatic()
+	 * @generated
+	 */
+	void setIsStatic(boolean value);
+
 } // FeatureCS
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/ReferenceCS.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/ReferenceCS.java
index d3f551f..0ed6226 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/ReferenceCS.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/ReferenceCS.java
@@ -26,6 +26,8 @@
  * <ul>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.ReferenceCS#getReferredKeys <em>Referred Keys</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.ReferenceCS#getReferredOpposite <em>Referred Opposite</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.ReferenceCS#isIsComposes <em>Is Composes</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.ReferenceCS#isIsResolve <em>Is Resolve</em>}</li>
  * </ul>
  *
  * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getReferenceCS()
@@ -60,6 +62,58 @@
 	void setReferredOpposite(Property value);
 
 	/**
+	 * Returns the value of the '<em><b>Is Composes</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Composes</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Composes</em>' attribute.
+	 * @see #setIsComposes(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getReferenceCS_IsComposes()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsComposes();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.ReferenceCS#isIsComposes <em>Is Composes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Composes</em>' attribute.
+	 * @see #isIsComposes()
+	 * @generated
+	 */
+	void setIsComposes(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Is Resolve</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Resolve</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Resolve</em>' attribute.
+	 * @see #setIsResolve(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getReferenceCS_IsResolve()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsResolve();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.ReferenceCS#isIsResolve <em>Is Resolve</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Resolve</em>' attribute.
+	 * @see #isIsResolve()
+	 * @generated
+	 */
+	void setIsResolve(boolean value);
+
+	/**
 	 * Returns the value of the '<em><b>Referred Keys</b></em>' reference list.
 	 * The list contents are of type {@link org.eclipse.ocl.pivot.Property}.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/StructuralFeatureCS.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/StructuralFeatureCS.java
index 4ea3e27..eeb9ba5 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/StructuralFeatureCS.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/StructuralFeatureCS.java
@@ -24,6 +24,10 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#getDefault <em>Default</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsReadonly <em>Is Readonly</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsTransient <em>Is Transient</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsUnsettable <em>Is Unsettable</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsVolatile <em>Is Volatile</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#getOwnedDefaultExpressions <em>Owned Default Expressions</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#getOwningClass <em>Owning Class</em>}</li>
  * </ul>
@@ -89,6 +93,110 @@
 	void setDefault(String value);
 
 	/**
+	 * Returns the value of the '<em><b>Is Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Readonly</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Readonly</em>' attribute.
+	 * @see #setIsReadonly(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getStructuralFeatureCS_IsReadonly()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsReadonly();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsReadonly <em>Is Readonly</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Readonly</em>' attribute.
+	 * @see #isIsReadonly()
+	 * @generated
+	 */
+	void setIsReadonly(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Is Transient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Transient</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Transient</em>' attribute.
+	 * @see #setIsTransient(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getStructuralFeatureCS_IsTransient()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsTransient();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsTransient <em>Is Transient</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Transient</em>' attribute.
+	 * @see #isIsTransient()
+	 * @generated
+	 */
+	void setIsTransient(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Is Unsettable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Unsettable</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Unsettable</em>' attribute.
+	 * @see #setIsUnsettable(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getStructuralFeatureCS_IsUnsettable()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsUnsettable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsUnsettable <em>Is Unsettable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Unsettable</em>' attribute.
+	 * @see #isIsUnsettable()
+	 * @generated
+	 */
+	void setIsUnsettable(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Is Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Volatile</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Volatile</em>' attribute.
+	 * @see #setIsVolatile(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getStructuralFeatureCS_IsVolatile()
+	 * @model dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsVolatile();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.StructuralFeatureCS#isIsVolatile <em>Is Volatile</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Volatile</em>' attribute.
+	 * @see #isIsVolatile()
+	 * @generated
+	 */
+	void setIsVolatile(boolean value);
+
+	/**
 	 * Returns the value of the '<em><b>Owned Default Expressions</b></em>' containment reference list.
 	 * The list contents are of type {@link org.eclipse.ocl.xtext.basecs.SpecificationCS}.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/TypedElementCS.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/TypedElementCS.java
index a09513c..0e30a13 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/TypedElementCS.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/TypedElementCS.java
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.ocl.xtext.basecs;
 
-import org.eclipse.emf.common.util.EList;
-
 
 /**
  * <!-- begin-user-doc -->
@@ -22,9 +20,10 @@
  * The following features are supported:
  * </p>
  * <ul>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsNotUnique <em>Is Not Unique</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsOptional <em>Is Optional</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsOrdered <em>Is Ordered</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#getOwnedType <em>Owned Type</em>}</li>
- *   <li>{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#getQualifiers <em>Qualifiers</em>}</li>
  * </ul>
  *
  * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getTypedElementCS()
@@ -33,6 +32,33 @@
  */
 public interface TypedElementCS extends NamedElementCS {
 	/**
+	 * Returns the value of the '<em><b>Is Not Unique</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Not Unique</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Not Unique</em>' attribute.
+	 * @see #setIsNotUnique(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getTypedElementCS_IsNotUnique()
+	 * @model default="false" dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsNotUnique();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsNotUnique <em>Is Not Unique</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Not Unique</em>' attribute.
+	 * @see #isIsNotUnique()
+	 * @generated
+	 */
+	void setIsNotUnique(boolean value);
+
+	/**
 	 * Returns the value of the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
@@ -59,22 +85,6 @@
 	void setOwnedType(TypedRefCS value);
 
 	/**
-	 * Returns the value of the '<em><b>Qualifiers</b></em>' attribute list.
-	 * The list contents are of type {@link java.lang.String}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Qualifier</em>' attribute list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Qualifiers</em>' attribute list.
-	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getTypedElementCS_Qualifiers()
-	 * @model dataType="org.eclipse.ocl.pivot.String"
-	 * @generated
-	 */
-	EList<String> getQualifiers();
-
-	/**
 	 * Returns the value of the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
@@ -100,4 +110,31 @@
 	 */
 	void setIsOptional(boolean value);
 
+	/**
+	 * Returns the value of the '<em><b>Is Ordered</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Ordered</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Ordered</em>' attribute.
+	 * @see #setIsOrdered(boolean)
+	 * @see org.eclipse.ocl.xtext.basecs.BaseCSPackage#getTypedElementCS_IsOrdered()
+	 * @model default="false" dataType="org.eclipse.ocl.pivot.Boolean"
+	 * @generated
+	 */
+	boolean isIsOrdered();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.xtext.basecs.TypedElementCS#isIsOrdered <em>Is Ordered</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Ordered</em>' attribute.
+	 * @see #isIsOrdered()
+	 * @generated
+	 */
+	void setIsOrdered(boolean value);
+
 } // TypedElementCS
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/AttributeCSImpl.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/AttributeCSImpl.java
index 10770b4..41a8720 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/AttributeCSImpl.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/AttributeCSImpl.java
@@ -10,7 +10,9 @@
  *******************************************************************************/
 package org.eclipse.ocl.xtext.basecs.impl;
 
+import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.ocl.xtext.basecs.AttributeCS;
@@ -22,12 +24,37 @@
  * An implementation of the model object '<em><b>Attribute CS</b></em>'.
  * <!-- end-user-doc -->
  * <p>
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.AttributeCSImpl#isIsId <em>Is Id</em>}</li>
+ * </ul>
  *
  * @generated
  */
 public class AttributeCSImpl extends StructuralFeatureCSImpl implements AttributeCS
 {
 	/**
+	 * The default value of the '{@link #isIsId() <em>Is Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_ID_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isIsId() <em>Is Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsId()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isId = IS_ID_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -49,6 +76,108 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isIsId()
+	{
+		return isId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsId(boolean newIsId)
+	{
+		boolean oldIsId = isId;
+		isId = newIsId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.ATTRIBUTE_CS__IS_ID, oldIsId, isId));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		return super.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case BaseCSPackage.ATTRIBUTE_CS__IS_ID:
+				return isIsId();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case BaseCSPackage.ATTRIBUTE_CS__IS_ID:
+				setIsId((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case BaseCSPackage.ATTRIBUTE_CS__IS_ID:
+				setIsId(IS_ID_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case BaseCSPackage.ATTRIBUTE_CS__IS_ID:
+				return isId != IS_ID_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
 	 * {@inheritDoc}
 	 * @generated
 	 */
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/BaseCSPackageImpl.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/BaseCSPackageImpl.java
index 3a3532b..dd5a807 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/BaseCSPackageImpl.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/BaseCSPackageImpl.java
@@ -618,6 +618,17 @@
 	 * @generated
 	 */
 	@Override
+	public EAttribute getAttributeCS_IsId()
+	{
+		return (EAttribute)attributeCSEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EClass getClassCS()
 	{
 		return classCSEClass;
@@ -901,6 +912,39 @@
 	 * @generated
 	 */
 	@Override
+	public EAttribute getFeatureCS_IsDefinition()
+	{
+		return (EAttribute)featureCSEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EAttribute getFeatureCS_IsDerived()
+	{
+		return (EAttribute)featureCSEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EAttribute getFeatureCS_IsStatic()
+	{
+		return (EAttribute)featureCSEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EClass getImportCS() {
 		return importCSEClass;
 	}
@@ -1527,6 +1571,28 @@
 	 * @generated
 	 */
 	@Override
+	public EAttribute getReferenceCS_IsComposes()
+	{
+		return (EAttribute)referenceCSEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EAttribute getReferenceCS_IsResolve()
+	{
+		return (EAttribute)referenceCSEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EReference getReferenceCS_ReferredKeys()
 	{
 		return (EReference)referenceCSEClass.getEStructuralFeatures().get(0);
@@ -1693,7 +1759,7 @@
 	@Override
 	public EReference getStructuralFeatureCS_OwningClass()
 	{
-		return (EReference)structuralFeatureCSEClass.getEStructuralFeatures().get(2);
+		return (EReference)structuralFeatureCSEClass.getEStructuralFeatures().get(6);
 	}
 
 	/**
@@ -1713,9 +1779,53 @@
 	 * @generated
 	 */
 	@Override
+	public EAttribute getStructuralFeatureCS_IsReadonly()
+	{
+		return (EAttribute)structuralFeatureCSEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EAttribute getStructuralFeatureCS_IsTransient()
+	{
+		return (EAttribute)structuralFeatureCSEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EAttribute getStructuralFeatureCS_IsUnsettable()
+	{
+		return (EAttribute)structuralFeatureCSEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EAttribute getStructuralFeatureCS_IsVolatile()
+	{
+		return (EAttribute)structuralFeatureCSEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EReference getStructuralFeatureCS_OwnedDefaultExpressions()
 	{
-		return (EReference)structuralFeatureCSEClass.getEStructuralFeatures().get(1);
+		return (EReference)structuralFeatureCSEClass.getEStructuralFeatures().get(5);
 	}
 
 	/**
@@ -1965,8 +2075,9 @@
 	 * @generated
 	 */
 	@Override
-	public EReference getTypedElementCS_OwnedType() {
-		return (EReference)typedElementCSEClass.getEStructuralFeatures().get(1);
+	public EAttribute getTypedElementCS_IsNotUnique()
+	{
+		return (EAttribute)typedElementCSEClass.getEStructuralFeatures().get(0);
 	}
 
 	/**
@@ -1975,9 +2086,8 @@
 	 * @generated
 	 */
 	@Override
-	public EAttribute getTypedElementCS_Qualifiers()
-	{
-		return (EAttribute)typedElementCSEClass.getEStructuralFeatures().get(2);
+	public EReference getTypedElementCS_OwnedType() {
+		return (EReference)typedElementCSEClass.getEStructuralFeatures().get(3);
 	}
 
 	/**
@@ -1988,7 +2098,18 @@
 	@Override
 	public EAttribute getTypedElementCS_IsOptional()
 	{
-		return (EAttribute)typedElementCSEClass.getEStructuralFeatures().get(0);
+		return (EAttribute)typedElementCSEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EAttribute getTypedElementCS_IsOrdered()
+	{
+		return (EAttribute)typedElementCSEClass.getEStructuralFeatures().get(2);
 	}
 
 	/**
@@ -2180,6 +2301,7 @@
 		createEReference(annotationElementCSEClass, ANNOTATION_ELEMENT_CS__OWNED_DETAILS);
 
 		attributeCSEClass = createEClass(ATTRIBUTE_CS);
+		createEAttribute(attributeCSEClass, ATTRIBUTE_CS__IS_ID);
 
 		classCSEClass = createEClass(CLASS_CS);
 		createEAttribute(classCSEClass, CLASS_CS__INSTANCE_CLASS_NAME);
@@ -2217,6 +2339,9 @@
 		createEAttribute(enumerationLiteralCSEClass, ENUMERATION_LITERAL_CS__VALUE);
 
 		featureCSEClass = createEClass(FEATURE_CS);
+		createEAttribute(featureCSEClass, FEATURE_CS__IS_DEFINITION);
+		createEAttribute(featureCSEClass, FEATURE_CS__IS_DERIVED);
+		createEAttribute(featureCSEClass, FEATURE_CS__IS_STATIC);
 
 		importCSEClass = createEClass(IMPORT_CS);
 		createEAttribute(importCSEClass, IMPORT_CS__IS_ALL);
@@ -2296,6 +2421,8 @@
 		referenceCSEClass = createEClass(REFERENCE_CS);
 		createEReference(referenceCSEClass, REFERENCE_CS__REFERRED_KEYS);
 		createEReference(referenceCSEClass, REFERENCE_CS__REFERRED_OPPOSITE);
+		createEAttribute(referenceCSEClass, REFERENCE_CS__IS_COMPOSES);
+		createEAttribute(referenceCSEClass, REFERENCE_CS__IS_RESOLVE);
 
 		rootCSEClass = createEClass(ROOT_CS);
 		createEReference(rootCSEClass, ROOT_CS__OWNED_IMPORTS);
@@ -2308,6 +2435,10 @@
 
 		structuralFeatureCSEClass = createEClass(STRUCTURAL_FEATURE_CS);
 		createEAttribute(structuralFeatureCSEClass, STRUCTURAL_FEATURE_CS__DEFAULT);
+		createEAttribute(structuralFeatureCSEClass, STRUCTURAL_FEATURE_CS__IS_READONLY);
+		createEAttribute(structuralFeatureCSEClass, STRUCTURAL_FEATURE_CS__IS_TRANSIENT);
+		createEAttribute(structuralFeatureCSEClass, STRUCTURAL_FEATURE_CS__IS_UNSETTABLE);
+		createEAttribute(structuralFeatureCSEClass, STRUCTURAL_FEATURE_CS__IS_VOLATILE);
 		createEReference(structuralFeatureCSEClass, STRUCTURAL_FEATURE_CS__OWNED_DEFAULT_EXPRESSIONS);
 		createEReference(structuralFeatureCSEClass, STRUCTURAL_FEATURE_CS__OWNING_CLASS);
 
@@ -2352,9 +2483,10 @@
 		typeRefCSEClass = createEClass(TYPE_REF_CS);
 
 		typedElementCSEClass = createEClass(TYPED_ELEMENT_CS);
+		createEAttribute(typedElementCSEClass, TYPED_ELEMENT_CS__IS_NOT_UNIQUE);
 		createEAttribute(typedElementCSEClass, TYPED_ELEMENT_CS__IS_OPTIONAL);
+		createEAttribute(typedElementCSEClass, TYPED_ELEMENT_CS__IS_ORDERED);
 		createEReference(typedElementCSEClass, TYPED_ELEMENT_CS__OWNED_TYPE);
-		createEAttribute(typedElementCSEClass, TYPED_ELEMENT_CS__QUALIFIERS);
 
 		typedRefCSEClass = createEClass(TYPED_REF_CS);
 		createEReference(typedRefCSEClass, TYPED_REF_CS__OWNED_MULTIPLICITY);
@@ -2489,6 +2621,7 @@
 		initEReference(getAnnotationElementCS_OwnedDetails(), this.getDetailCS(), null, "ownedDetails", null, 0, -1, AnnotationElementCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(attributeCSEClass, AttributeCS.class, "AttributeCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getAttributeCS_IsId(), thePivotPackage.getBoolean(), "isId", null, 0, 1, AttributeCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(classCSEClass, ClassCS.class, "ClassCS", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEAttribute(getClassCS_InstanceClassName(), thePivotPackage.getString(), "instanceClassName", null, 0, 1, ClassCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
@@ -2528,6 +2661,9 @@
 		initEAttribute(getEnumerationLiteralCS_Value(), ecorePackage.getEInt(), "value", null, 0, 1, EnumerationLiteralCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(featureCSEClass, FeatureCS.class, "FeatureCS", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getFeatureCS_IsDefinition(), thePivotPackage.getBoolean(), "isDefinition", null, 0, 1, FeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFeatureCS_IsDerived(), thePivotPackage.getBoolean(), "isDerived", null, 0, 1, FeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFeatureCS_IsStatic(), thePivotPackage.getBoolean(), "isStatic", null, 0, 1, FeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(importCSEClass, ImportCS.class, "ImportCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEAttribute(getImportCS_IsAll(), thePivotPackage.getBoolean(), "isAll", "false", 0, 1, ImportCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
@@ -2611,6 +2747,8 @@
 		initEClass(referenceCSEClass, ReferenceCS.class, "ReferenceCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getReferenceCS_ReferredKeys(), thePivotPackage.getProperty(), null, "referredKeys", null, 0, -1, ReferenceCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEReference(getReferenceCS_ReferredOpposite(), thePivotPackage.getProperty(), null, "referredOpposite", null, 0, 1, ReferenceCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getReferenceCS_IsComposes(), thePivotPackage.getBoolean(), "isComposes", null, 0, 1, ReferenceCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getReferenceCS_IsResolve(), thePivotPackage.getBoolean(), "isResolve", null, 0, 1, ReferenceCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(rootCSEClass, RootCS.class, "RootCS", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getRootCS_OwnedImports(), this.getImportCS(), null, "ownedImports", null, 0, -1, RootCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
@@ -2623,6 +2761,10 @@
 
 		initEClass(structuralFeatureCSEClass, StructuralFeatureCS.class, "StructuralFeatureCS", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEAttribute(getStructuralFeatureCS_Default(), thePivotPackage.getString(), "default", null, 0, 1, StructuralFeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getStructuralFeatureCS_IsReadonly(), thePivotPackage.getBoolean(), "isReadonly", null, 0, 1, StructuralFeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getStructuralFeatureCS_IsTransient(), thePivotPackage.getBoolean(), "isTransient", null, 0, 1, StructuralFeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getStructuralFeatureCS_IsUnsettable(), thePivotPackage.getBoolean(), "isUnsettable", null, 0, 1, StructuralFeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getStructuralFeatureCS_IsVolatile(), thePivotPackage.getBoolean(), "isVolatile", null, 0, 1, StructuralFeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEReference(getStructuralFeatureCS_OwnedDefaultExpressions(), this.getSpecificationCS(), null, "ownedDefaultExpressions", null, 0, -1, StructuralFeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEReference(getStructuralFeatureCS_OwningClass(), this.getStructuredClassCS(), this.getStructuredClassCS_OwnedProperties(), "owningClass", null, 0, 1, StructuralFeatureCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
@@ -2667,9 +2809,10 @@
 		initEClass(typeRefCSEClass, TypeRefCS.class, "TypeRefCS", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		initEClass(typedElementCSEClass, TypedElementCS.class, "TypedElementCS", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getTypedElementCS_IsNotUnique(), thePivotPackage.getBoolean(), "isNotUnique", "false", 0, 1, TypedElementCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
 		initEAttribute(getTypedElementCS_IsOptional(), thePivotPackage.getBoolean(), "isOptional", null, 0, 1, TypedElementCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTypedElementCS_IsOrdered(), thePivotPackage.getBoolean(), "isOrdered", "false", 0, 1, TypedElementCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
 		initEReference(getTypedElementCS_OwnedType(), this.getTypedRefCS(), null, "ownedType", null, 0, 1, TypedElementCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getTypedElementCS_Qualifiers(), thePivotPackage.getString(), "qualifiers", null, 0, -1, TypedElementCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(typedRefCSEClass, TypedRefCS.class, "TypedRefCS", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getTypedRefCS_OwnedMultiplicity(), this.getMultiplicityCS(), null, "ownedMultiplicity", null, 0, 1, TypedRefCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/FeatureCSImpl.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/FeatureCSImpl.java
index 253c611..182840d 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/FeatureCSImpl.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/FeatureCSImpl.java
@@ -10,8 +10,10 @@
  */
 package org.eclipse.ocl.xtext.basecs.impl;
 
+import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.ocl.xtext.basecs.BaseCSPackage;
 import org.eclipse.ocl.xtext.basecs.FeatureCS;
 
@@ -20,12 +22,75 @@
  * An implementation of the model object '<em><b>Feature CS</b></em>'.
  * <!-- end-user-doc -->
  * <p>
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.FeatureCSImpl#isIsDefinition <em>Is Definition</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.FeatureCSImpl#isIsDerived <em>Is Derived</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.FeatureCSImpl#isIsStatic <em>Is Static</em>}</li>
+ * </ul>
  *
  * @generated
  */
 public abstract class FeatureCSImpl extends TypedElementCSImpl implements FeatureCS
 {
 	/**
+	 * The default value of the '{@link #isIsDefinition() <em>Is Definition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsDefinition()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_DEFINITION_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isIsDefinition() <em>Is Definition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsDefinition()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isDefinition = IS_DEFINITION_EDEFAULT;
+	/**
+	 * The default value of the '{@link #isIsDerived() <em>Is Derived</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsDerived()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_DERIVED_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isIsDerived() <em>Is Derived</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsDerived()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isDerived = IS_DERIVED_EDEFAULT;
+	/**
+	 * The default value of the '{@link #isIsStatic() <em>Is Static</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsStatic()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_STATIC_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isIsStatic() <em>Is Static</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsStatic()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isStatic = IS_STATIC_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -46,5 +111,177 @@
 		return BaseCSPackage.Literals.FEATURE_CS;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isIsDefinition()
+	{
+		return isDefinition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsDefinition(boolean newIsDefinition)
+	{
+		boolean oldIsDefinition = isDefinition;
+		isDefinition = newIsDefinition;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.FEATURE_CS__IS_DEFINITION, oldIsDefinition, isDefinition));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isIsDerived()
+	{
+		return isDerived;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsDerived(boolean newIsDerived)
+	{
+		boolean oldIsDerived = isDerived;
+		isDerived = newIsDerived;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.FEATURE_CS__IS_DERIVED, oldIsDerived, isDerived));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isIsStatic()
+	{
+		return isStatic;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsStatic(boolean newIsStatic)
+	{
+		boolean oldIsStatic = isStatic;
+		isStatic = newIsStatic;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.FEATURE_CS__IS_STATIC, oldIsStatic, isStatic));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		return super.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case BaseCSPackage.FEATURE_CS__IS_DEFINITION:
+				return isIsDefinition();
+			case BaseCSPackage.FEATURE_CS__IS_DERIVED:
+				return isIsDerived();
+			case BaseCSPackage.FEATURE_CS__IS_STATIC:
+				return isIsStatic();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case BaseCSPackage.FEATURE_CS__IS_DEFINITION:
+				setIsDefinition((Boolean)newValue);
+				return;
+			case BaseCSPackage.FEATURE_CS__IS_DERIVED:
+				setIsDerived((Boolean)newValue);
+				return;
+			case BaseCSPackage.FEATURE_CS__IS_STATIC:
+				setIsStatic((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case BaseCSPackage.FEATURE_CS__IS_DEFINITION:
+				setIsDefinition(IS_DEFINITION_EDEFAULT);
+				return;
+			case BaseCSPackage.FEATURE_CS__IS_DERIVED:
+				setIsDerived(IS_DERIVED_EDEFAULT);
+				return;
+			case BaseCSPackage.FEATURE_CS__IS_STATIC:
+				setIsStatic(IS_STATIC_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case BaseCSPackage.FEATURE_CS__IS_DEFINITION:
+				return isDefinition != IS_DEFINITION_EDEFAULT;
+			case BaseCSPackage.FEATURE_CS__IS_DERIVED:
+				return isDerived != IS_DERIVED_EDEFAULT;
+			case BaseCSPackage.FEATURE_CS__IS_STATIC:
+				return isStatic != IS_STATIC_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
 
 } //FeatureCSImpl
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/ReferenceCSImpl.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/ReferenceCSImpl.java
index 018ca72..ead5942 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/ReferenceCSImpl.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/ReferenceCSImpl.java
@@ -36,6 +36,8 @@
  * <ul>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.ReferenceCSImpl#getReferredKeys <em>Referred Keys</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.ReferenceCSImpl#getReferredOpposite <em>Referred Opposite</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.ReferenceCSImpl#isIsComposes <em>Is Composes</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.ReferenceCSImpl#isIsResolve <em>Is Resolve</em>}</li>
  * </ul>
  *
  * @generated
@@ -63,6 +65,46 @@
 	protected Property referredOpposite;
 
 	/**
+	 * The default value of the '{@link #isIsComposes() <em>Is Composes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsComposes()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_COMPOSES_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIsComposes() <em>Is Composes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsComposes()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isComposes = IS_COMPOSES_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isIsResolve() <em>Is Resolve</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsResolve()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_RESOLVE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIsResolve() <em>Is Resolve</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsResolve()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isResolve = IS_RESOLVE_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -134,6 +176,67 @@
 	 * @generated
 	 */
 	@Override
+	public boolean isIsComposes()
+	{
+		return isComposes;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsComposes(boolean newIsComposes)
+	{
+		boolean oldIsComposes = isComposes;
+		isComposes = newIsComposes;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.REFERENCE_CS__IS_COMPOSES, oldIsComposes, isComposes));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isIsResolve()
+	{
+		return isResolve;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsResolve(boolean newIsResolve)
+	{
+		boolean oldIsResolve = isResolve;
+		isResolve = newIsResolve;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.REFERENCE_CS__IS_RESOLVE, oldIsResolve, isResolve));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		return super.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EList<Property> getReferredKeys()
 	{
 		if (referredKeys == null)
@@ -158,6 +261,10 @@
 			case BaseCSPackage.REFERENCE_CS__REFERRED_OPPOSITE:
 				if (resolve) return getReferredOpposite();
 				return basicGetReferredOpposite();
+			case BaseCSPackage.REFERENCE_CS__IS_COMPOSES:
+				return isIsComposes();
+			case BaseCSPackage.REFERENCE_CS__IS_RESOLVE:
+				return isIsResolve();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -180,6 +287,12 @@
 			case BaseCSPackage.REFERENCE_CS__REFERRED_OPPOSITE:
 				setReferredOpposite((Property)newValue);
 				return;
+			case BaseCSPackage.REFERENCE_CS__IS_COMPOSES:
+				setIsComposes((Boolean)newValue);
+				return;
+			case BaseCSPackage.REFERENCE_CS__IS_RESOLVE:
+				setIsResolve((Boolean)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -200,6 +313,12 @@
 			case BaseCSPackage.REFERENCE_CS__REFERRED_OPPOSITE:
 				setReferredOpposite((Property)null);
 				return;
+			case BaseCSPackage.REFERENCE_CS__IS_COMPOSES:
+				setIsComposes(IS_COMPOSES_EDEFAULT);
+				return;
+			case BaseCSPackage.REFERENCE_CS__IS_RESOLVE:
+				setIsResolve(IS_RESOLVE_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -218,6 +337,10 @@
 				return referredKeys != null && !referredKeys.isEmpty();
 			case BaseCSPackage.REFERENCE_CS__REFERRED_OPPOSITE:
 				return referredOpposite != null;
+			case BaseCSPackage.REFERENCE_CS__IS_COMPOSES:
+				return isComposes != IS_COMPOSES_EDEFAULT;
+			case BaseCSPackage.REFERENCE_CS__IS_RESOLVE:
+				return isResolve != IS_RESOLVE_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/StructuralFeatureCSImpl.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/StructuralFeatureCSImpl.java
index fcc0837..8ca765e 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/StructuralFeatureCSImpl.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/StructuralFeatureCSImpl.java
@@ -37,6 +37,10 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.StructuralFeatureCSImpl#getDefault <em>Default</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.StructuralFeatureCSImpl#isIsReadonly <em>Is Readonly</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.StructuralFeatureCSImpl#isIsTransient <em>Is Transient</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.StructuralFeatureCSImpl#isIsUnsettable <em>Is Unsettable</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.StructuralFeatureCSImpl#isIsVolatile <em>Is Volatile</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.StructuralFeatureCSImpl#getOwnedDefaultExpressions <em>Owned Default Expressions</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.StructuralFeatureCSImpl#getOwningClass <em>Owning Class</em>}</li>
  * </ul>
@@ -65,6 +69,86 @@
 	protected String default_ = DEFAULT_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isIsReadonly() <em>Is Readonly</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsReadonly()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_READONLY_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIsReadonly() <em>Is Readonly</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsReadonly()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isReadonly = IS_READONLY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isIsTransient() <em>Is Transient</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsTransient()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_TRANSIENT_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIsTransient() <em>Is Transient</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsTransient()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isTransient = IS_TRANSIENT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isIsUnsettable() <em>Is Unsettable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsUnsettable()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_UNSETTABLE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIsUnsettable() <em>Is Unsettable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsUnsettable()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isUnsettable = IS_UNSETTABLE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isIsVolatile() <em>Is Volatile</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsVolatile()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_VOLATILE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIsVolatile() <em>Is Volatile</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsVolatile()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isVolatile = IS_VOLATILE_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getOwnedDefaultExpressions() <em>Owned Default Expressions</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -169,6 +253,106 @@
 	 * @generated
 	 */
 	@Override
+	public boolean isIsReadonly()
+	{
+		return isReadonly;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsReadonly(boolean newIsReadonly)
+	{
+		boolean oldIsReadonly = isReadonly;
+		isReadonly = newIsReadonly;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_READONLY, oldIsReadonly, isReadonly));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isIsTransient()
+	{
+		return isTransient;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsTransient(boolean newIsTransient)
+	{
+		boolean oldIsTransient = isTransient;
+		isTransient = newIsTransient;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_TRANSIENT, oldIsTransient, isTransient));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isIsUnsettable()
+	{
+		return isUnsettable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsUnsettable(boolean newIsUnsettable)
+	{
+		boolean oldIsUnsettable = isUnsettable;
+		isUnsettable = newIsUnsettable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_UNSETTABLE, oldIsUnsettable, isUnsettable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isIsVolatile()
+	{
+		return isVolatile;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsVolatile(boolean newIsVolatile)
+	{
+		boolean oldIsVolatile = isVolatile;
+		isVolatile = newIsVolatile;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_VOLATILE, oldIsVolatile, isVolatile));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EList<SpecificationCS> getOwnedDefaultExpressions()
 	{
 		if (ownedDefaultExpressions == null)
@@ -249,6 +433,14 @@
 		{
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__DEFAULT:
 				return getDefault();
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_READONLY:
+				return isIsReadonly();
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_TRANSIENT:
+				return isIsTransient();
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_UNSETTABLE:
+				return isIsUnsettable();
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_VOLATILE:
+				return isIsVolatile();
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__OWNED_DEFAULT_EXPRESSIONS:
 				return getOwnedDefaultExpressions();
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__OWNING_CLASS:
@@ -270,6 +462,18 @@
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__DEFAULT:
 				setDefault((String)newValue);
 				return;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_READONLY:
+				setIsReadonly((Boolean)newValue);
+				return;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_TRANSIENT:
+				setIsTransient((Boolean)newValue);
+				return;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_UNSETTABLE:
+				setIsUnsettable((Boolean)newValue);
+				return;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_VOLATILE:
+				setIsVolatile((Boolean)newValue);
+				return;
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__OWNED_DEFAULT_EXPRESSIONS:
 				getOwnedDefaultExpressions().clear();
 				getOwnedDefaultExpressions().addAll((Collection<? extends SpecificationCS>)newValue);
@@ -293,6 +497,18 @@
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__DEFAULT:
 				setDefault(DEFAULT_EDEFAULT);
 				return;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_READONLY:
+				setIsReadonly(IS_READONLY_EDEFAULT);
+				return;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_TRANSIENT:
+				setIsTransient(IS_TRANSIENT_EDEFAULT);
+				return;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_UNSETTABLE:
+				setIsUnsettable(IS_UNSETTABLE_EDEFAULT);
+				return;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_VOLATILE:
+				setIsVolatile(IS_VOLATILE_EDEFAULT);
+				return;
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__OWNED_DEFAULT_EXPRESSIONS:
 				getOwnedDefaultExpressions().clear();
 				return;
@@ -314,6 +530,14 @@
 		{
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__DEFAULT:
 				return DEFAULT_EDEFAULT == null ? default_ != null : !DEFAULT_EDEFAULT.equals(default_);
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_READONLY:
+				return isReadonly != IS_READONLY_EDEFAULT;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_TRANSIENT:
+				return isTransient != IS_TRANSIENT_EDEFAULT;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_UNSETTABLE:
+				return isUnsettable != IS_UNSETTABLE_EDEFAULT;
+			case BaseCSPackage.STRUCTURAL_FEATURE_CS__IS_VOLATILE:
+				return isVolatile != IS_VOLATILE_EDEFAULT;
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__OWNED_DEFAULT_EXPRESSIONS:
 				return ownedDefaultExpressions != null && !ownedDefaultExpressions.isEmpty();
 			case BaseCSPackage.STRUCTURAL_FEATURE_CS__OWNING_CLASS:
diff --git a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/TypedElementCSImpl.java b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/TypedElementCSImpl.java
index a515295..6268113 100644
--- a/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/TypedElementCSImpl.java
+++ b/plugins/org.eclipse.ocl.xtext.base/emf-gen/org/eclipse/ocl/xtext/basecs/impl/TypedElementCSImpl.java
@@ -10,15 +10,11 @@
  *******************************************************************************/
 package org.eclipse.ocl.xtext.basecs.impl;
 
-import java.util.Collection;
-
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
 import org.eclipse.ocl.xtext.basecs.BaseCSPackage;
 import org.eclipse.ocl.xtext.basecs.TypedElementCS;
 import org.eclipse.ocl.xtext.basecs.TypedRefCS;
@@ -32,9 +28,10 @@
  * The following features are implemented:
  * </p>
  * <ul>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.TypedElementCSImpl#isIsNotUnique <em>Is Not Unique</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.TypedElementCSImpl#isIsOptional <em>Is Optional</em>}</li>
+ *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.TypedElementCSImpl#isIsOrdered <em>Is Ordered</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.TypedElementCSImpl#getOwnedType <em>Owned Type</em>}</li>
- *   <li>{@link org.eclipse.ocl.xtext.basecs.impl.TypedElementCSImpl#getQualifiers <em>Qualifiers</em>}</li>
  * </ul>
  *
  * @generated
@@ -42,6 +39,26 @@
 public abstract class TypedElementCSImpl extends NamedElementCSImpl implements TypedElementCS
 {
 	/**
+	 * The default value of the '{@link #isIsNotUnique() <em>Is Not Unique</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsNotUnique()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_NOT_UNIQUE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIsNotUnique() <em>Is Not Unique</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsNotUnique()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isNotUnique = IS_NOT_UNIQUE_EDEFAULT;
+
+	/**
 	 * The default value of the '{@link #isIsOptional() <em>Is Optional</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -62,6 +79,26 @@
 	protected boolean isOptional = IS_OPTIONAL_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isIsOrdered() <em>Is Ordered</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsOrdered()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_ORDERED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIsOrdered() <em>Is Ordered</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsOrdered()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isOrdered = IS_ORDERED_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getOwnedType() <em>Owned Type</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -72,16 +109,6 @@
 	protected TypedRefCS ownedType;
 
 	/**
-	 * The cached value of the '{@link #getQualifiers() <em>Qualifiers</em>}' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getQualifiers()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<String> qualifiers;
-
-	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -108,6 +135,31 @@
 	 * @generated
 	 */
 	@Override
+	public boolean isIsNotUnique()
+	{
+		return isNotUnique;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsNotUnique(boolean newIsNotUnique)
+	{
+		boolean oldIsNotUnique = isNotUnique;
+		isNotUnique = newIsNotUnique;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.TYPED_ELEMENT_CS__IS_NOT_UNIQUE, oldIsNotUnique, isNotUnique));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public TypedRefCS getOwnedType()
 	{
 		return ownedType;
@@ -158,21 +210,6 @@
 	 * @generated
 	 */
 	@Override
-	public EList<String> getQualifiers()
-	{
-		if (qualifiers == null)
-		{
-			qualifiers = new EDataTypeUniqueEList<String>(String.class, this, BaseCSPackage.TYPED_ELEMENT_CS__QUALIFIERS);
-		}
-		return qualifiers;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public boolean isIsOptional()
 	{
 		return isOptional;
@@ -198,6 +235,31 @@
 	 * @generated
 	 */
 	@Override
+	public boolean isIsOrdered()
+	{
+		return isOrdered;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIsOrdered(boolean newIsOrdered)
+	{
+		boolean oldIsOrdered = isOrdered;
+		isOrdered = newIsOrdered;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BaseCSPackage.TYPED_ELEMENT_CS__IS_ORDERED, oldIsOrdered, isOrdered));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public String toString()
 	{
 		return super.toString();
@@ -229,12 +291,14 @@
 	{
 		switch (featureID)
 		{
+			case BaseCSPackage.TYPED_ELEMENT_CS__IS_NOT_UNIQUE:
+				return isIsNotUnique();
 			case BaseCSPackage.TYPED_ELEMENT_CS__IS_OPTIONAL:
 				return isIsOptional();
+			case BaseCSPackage.TYPED_ELEMENT_CS__IS_ORDERED:
+				return isIsOrdered();
 			case BaseCSPackage.TYPED_ELEMENT_CS__OWNED_TYPE:
 				return getOwnedType();
-			case BaseCSPackage.TYPED_ELEMENT_CS__QUALIFIERS:
-				return getQualifiers();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -250,16 +314,18 @@
 	{
 		switch (featureID)
 		{
+			case BaseCSPackage.TYPED_ELEMENT_CS__IS_NOT_UNIQUE:
+				setIsNotUnique((Boolean)newValue);
+				return;
 			case BaseCSPackage.TYPED_ELEMENT_CS__IS_OPTIONAL:
 				setIsOptional((Boolean)newValue);
 				return;
+			case BaseCSPackage.TYPED_ELEMENT_CS__IS_ORDERED:
+				setIsOrdered((Boolean)newValue);
+				return;
 			case BaseCSPackage.TYPED_ELEMENT_CS__OWNED_TYPE:
 				setOwnedType((TypedRefCS)newValue);
 				return;
-			case BaseCSPackage.TYPED_ELEMENT_CS__QUALIFIERS:
-				getQualifiers().clear();
-				getQualifiers().addAll((Collection<? extends String>)newValue);
-				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -274,15 +340,18 @@
 	{
 		switch (featureID)
 		{
+			case BaseCSPackage.TYPED_ELEMENT_CS__IS_NOT_UNIQUE:
+				setIsNotUnique(IS_NOT_UNIQUE_EDEFAULT);
+				return;
 			case BaseCSPackage.TYPED_ELEMENT_CS__IS_OPTIONAL:
 				setIsOptional(IS_OPTIONAL_EDEFAULT);
 				return;
+			case BaseCSPackage.TYPED_ELEMENT_CS__IS_ORDERED:
+				setIsOrdered(IS_ORDERED_EDEFAULT);
+				return;
 			case BaseCSPackage.TYPED_ELEMENT_CS__OWNED_TYPE:
 				setOwnedType((TypedRefCS)null);
 				return;
-			case BaseCSPackage.TYPED_ELEMENT_CS__QUALIFIERS:
-				getQualifiers().clear();
-				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -297,12 +366,14 @@
 	{
 		switch (featureID)
 		{
+			case BaseCSPackage.TYPED_ELEMENT_CS__IS_NOT_UNIQUE:
+				return isNotUnique != IS_NOT_UNIQUE_EDEFAULT;
 			case BaseCSPackage.TYPED_ELEMENT_CS__IS_OPTIONAL:
 				return isOptional != IS_OPTIONAL_EDEFAULT;
+			case BaseCSPackage.TYPED_ELEMENT_CS__IS_ORDERED:
+				return isOrdered != IS_ORDERED_EDEFAULT;
 			case BaseCSPackage.TYPED_ELEMENT_CS__OWNED_TYPE:
 				return ownedType != null;
-			case BaseCSPackage.TYPED_ELEMENT_CS__QUALIFIERS:
-				return qualifiers != null && !qualifiers.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
diff --git a/plugins/org.eclipse.ocl.xtext.base/model/BaseCS.ecore b/plugins/org.eclipse.ocl.xtext.base/model/BaseCS.ecore
index e70aca8..ac673a1 100644
--- a/plugins/org.eclipse.ocl.xtext.base/model/BaseCS.ecore
+++ b/plugins/org.eclipse.ocl.xtext.base/model/BaseCS.ecore
@@ -16,7 +16,9 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="ownedDetails" upperBound="-1"
         eType="#//DetailCS" containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="AttributeCS" eSuperTypes="#//StructuralFeatureCS"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AttributeCS" eSuperTypes="#//StructuralFeatureCS">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isId" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ClassCS" abstract="true" eSuperTypes="#//NamedElementCS #//TypeCS #//TemplateableElementCS">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="instanceClassName" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//String"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="ownedConstraints" upperBound="-1"
@@ -62,7 +64,11 @@
   <eClassifiers xsi:type="ecore:EClass" name="EnumerationLiteralCS" eSuperTypes="#//NamedElementCS">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureCS" abstract="true" eSuperTypes="#//TypedElementCS"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureCS" abstract="true" eSuperTypes="#//TypedElementCS">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDefinition" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDerived" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isStatic" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ImportCS" eSuperTypes="#//NamespaceCS">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAll" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"
         defaultValueLiteral="false"/>
@@ -175,6 +181,8 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="referredKeys" upperBound="-1"
         eType="ecore:EClass ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Property"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="referredOpposite" eType="ecore:EClass ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Property"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isComposes" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isResolve" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="RootCS" abstract="true" eSuperTypes="#//ModelElementCS">
     <eStructuralFeatures xsi:type="ecore:EReference" name="ownedImports" upperBound="-1"
@@ -189,6 +197,10 @@
   <eClassifiers xsi:type="ecore:EClass" name="StructuralFeatureCS" abstract="true"
       eSuperTypes="#//FeatureCS">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="default" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isReadonly" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isTransient" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isUnsettable" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isVolatile" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="ownedDefaultExpressions"
         upperBound="-1" eType="#//SpecificationCS" containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="owningClass" eType="#//StructuredClassCS"
@@ -251,11 +263,13 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="TypeRefCS" abstract="true" eSuperTypes="#//ElementRefCS"/>
   <eClassifiers xsi:type="ecore:EClass" name="TypedElementCS" abstract="true" eSuperTypes="#//NamedElementCS">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNotUnique" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"
+        defaultValueLiteral="false"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOptional" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOrdered" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"
+        defaultValueLiteral="false"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="ownedType" eType="#//TypedRefCS"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="qualifiers" upperBound="-1"
-        eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//String"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="TypedRefCS" abstract="true" eSuperTypes="#//TypeRefCS">
     <eStructuralFeatures xsi:type="ecore:EReference" name="ownedMultiplicity" eType="#//MultiplicityCS"
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java
index 5544b87..a2b118d 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java
@@ -418,43 +418,14 @@
 		}
 	}
 
-	public void refreshQualifiers(List<String> qualifiers, String trueString, String falseString, Boolean polarity) {
-		boolean isFalse = false;
-		boolean isTrue = false;
-		for (String qualifier : qualifiers) {
-			if (qualifier.equals(trueString)) {
-				if (isTrue || (polarity != Boolean.TRUE)) {
-					qualifiers.remove(qualifier);
-				}
-				isTrue = true;
-			}
-			if (qualifier.equals(falseString)) {
-				if (isTrue || (polarity != Boolean.FALSE)) {
-					qualifiers.remove(qualifier);
-				}
-				isFalse = true;
-			}
-		}
-		if (polarity == Boolean.TRUE) {
-			if (!isTrue) {
-				qualifiers.add(trueString);
-			}
-		}
-		else if (polarity == Boolean.FALSE) {
-			if (!isFalse) {
-				qualifiers.add(falseString);
-			}
-		}
-	}
-
 	public <T extends StructuralFeatureCS> T refreshStructuralFeature(@NonNull Class<T> csClass, /*@NonNull */EClass csEClass, @NonNull Property object) {
 		T csElement = refreshTypedElement(csClass, csEClass, object);
-		refreshQualifiers(csElement.getQualifiers(), "derived", object.isDerived());
-		refreshQualifiers(csElement.getQualifiers(), "readonly", object.isReadOnly());
-		refreshQualifiers(csElement.getQualifiers(), "static", object.isStatic());
-		refreshQualifiers(csElement.getQualifiers(), "transient", object.isTransient());
-		refreshQualifiers(csElement.getQualifiers(), "unsettable", object.isUnsettable());
-		refreshQualifiers(csElement.getQualifiers(), "volatile", object.isVolatile());
+		csElement.setIsDerived(object.isDerived());
+		csElement.setIsReadonly(object.isReadOnly());
+		csElement.setIsStatic(object.isStatic());
+		csElement.setIsTransient(object.isTransient());
+		csElement.setIsUnsettable(object.isUnsettable());
+		csElement.setIsVolatile(object.isVolatile());
 		csElement.setDefault(object.getDefaultValueString());
 		return csElement;
 	}
@@ -490,9 +461,8 @@
 				lower = collectionType.getLower().intValue();
 				Number upper2 = collectionType.getUpper();
 				upper = upper2 instanceof Unlimited ? -1 : upper2.intValue();
-				List<String> qualifiers = csElement.getQualifiers();
-				refreshQualifiers(qualifiers, "ordered", "!ordered", collectionType.isOrdered() ? Boolean.TRUE : null);
-				refreshQualifiers(qualifiers, "unique", "!unique", collectionType.isUnique() ? null : Boolean.FALSE);
+				csElement.setIsOrdered(collectionType.isOrdered());
+				csElement.setIsNotUnique(!collectionType.isUnique());
 			}
 			else {
 				lower = object.isRequired() ? 1 : 0;
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseDeclarationVisitor.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseDeclarationVisitor.java
index 662442a..320cfb9 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseDeclarationVisitor.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseDeclarationVisitor.java
@@ -255,13 +255,13 @@
 		}
 		if (type instanceof DataType) {
 			AttributeCS csAttribute = context.refreshStructuralFeature(AttributeCS.class, BaseCSPackage.Literals.ATTRIBUTE_CS, object);
-			context.refreshQualifiers(csAttribute.getQualifiers(), "id", object.isID());
+			csAttribute.setIsId(object.isID());
 			csElement = csAttribute;
 		}
 		else {
 			ReferenceCS csReference = context.refreshStructuralFeature(ReferenceCS.class, BaseCSPackage.Literals.REFERENCE_CS, object);
-			context.refreshQualifiers(csReference.getQualifiers(), "composes", object.isComposite());
-			context.refreshQualifiers(csReference.getQualifiers(), "resolve", "!resolve", object.isResolveProxies() ? null : Boolean.FALSE);
+			csReference.setIsComposes(object.isComposite());
+			csReference.setIsResolve(object.isResolveProxies());
 			Property opposite = object.getOpposite();
 			if (opposite != null) {
 				if (!opposite.isImplicit()) {
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/BaseCSContainmentVisitor.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/BaseCSContainmentVisitor.java
index 73bf47e..764a7d3 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/BaseCSContainmentVisitor.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/BaseCSContainmentVisitor.java
@@ -43,9 +43,9 @@
 import org.eclipse.ocl.pivot.manager.MetaModelManager;
 import org.eclipse.ocl.pivot.utilities.PivotUtil;
 import org.eclipse.ocl.xtext.base.utilities.BaseCSResource;
-import org.eclipse.ocl.xtext.base.utilities.ElementUtil;
 import org.eclipse.ocl.xtext.basecs.AnnotationCS;
 import org.eclipse.ocl.xtext.basecs.AnnotationElementCS;
+import org.eclipse.ocl.xtext.basecs.AttributeCS;
 import org.eclipse.ocl.xtext.basecs.BaseCSPackage;
 import org.eclipse.ocl.xtext.basecs.ClassCS;
 import org.eclipse.ocl.xtext.basecs.ConstraintCS;
@@ -69,6 +69,7 @@
 import org.eclipse.ocl.xtext.basecs.PathElementCS;
 import org.eclipse.ocl.xtext.basecs.PathNameCS;
 import org.eclipse.ocl.xtext.basecs.PrimitiveTypeRefCS;
+import org.eclipse.ocl.xtext.basecs.ReferenceCS;
 import org.eclipse.ocl.xtext.basecs.RootCS;
 import org.eclipse.ocl.xtext.basecs.RootPackageCS;
 import org.eclipse.ocl.xtext.basecs.SpecificationCS;
@@ -270,6 +271,16 @@
 	}
 
 	@Override
+	public Continuation<?> visitAttributeCS(@NonNull AttributeCS csElement) {
+		Continuation<?> continuation = visitStructuralFeatureCS(csElement);
+		Property pivotElement = PivotUtil.getPivot(Property.class, csElement);
+		if (pivotElement != null) {
+			pivotElement.setIsID(csElement.isIsId());
+		}
+		return continuation;
+	}
+
+	@Override
 	public Continuation<?> visitConstraintCS(@NonNull ConstraintCS csElement) {
 		@SuppressWarnings("null") @NonNull EClass eClass = PivotPackage.Literals.CONSTRAINT;
 		Constraint pivotElement = refreshNamedElement(Constraint.class, eClass, csElement);
@@ -423,6 +434,17 @@
 	}
 
 	@Override
+	public Continuation<?> visitReferenceCS(@NonNull ReferenceCS csElement) {
+		Continuation<?> continuation = visitStructuralFeatureCS(csElement);
+		Property pivotElement = PivotUtil.getPivot(Property.class, csElement);
+		if (pivotElement != null) {
+			pivotElement.setIsComposite(csElement.isIsComposes());
+			pivotElement.setIsResolveProxies(csElement.isIsResolve());
+		}
+		return continuation;
+	}
+
+	@Override
 	public Continuation<?> visitRootPackageCS(@NonNull RootPackageCS csElement) {
 		importPackages(csElement);
 		@SuppressWarnings("null") @NonNull EClass eClass = PivotPackage.Literals.MODEL;
@@ -465,16 +487,12 @@
 	public Continuation<?> visitStructuralFeatureCS(@NonNull StructuralFeatureCS csElement) {
 		@SuppressWarnings("null") @NonNull EClass eClass = PivotPackage.Literals.PROPERTY;
 		Property pivotElement = refreshNamedElement(Property.class, eClass, csElement);
-		List<String> qualifiers = csElement.getQualifiers();
-		pivotElement.setIsComposite(qualifiers.contains("composes"));
-		pivotElement.setIsDerived(qualifiers.contains("derived"));
-		pivotElement.setIsID(qualifiers.contains("id"));
-		pivotElement.setIsReadOnly(qualifiers.contains("readonly"));
-		pivotElement.setIsResolveProxies(ElementUtil.getQualifier(qualifiers, "resolve", "!resolve", true));
-		pivotElement.setIsStatic(qualifiers.contains("static"));
-		pivotElement.setIsTransient(qualifiers.contains("transient"));
-		pivotElement.setIsUnsettable(qualifiers.contains("unsettable"));
-		pivotElement.setIsVolatile(qualifiers.contains("volatile"));
+		pivotElement.setIsDerived(csElement.isIsDerived());
+		pivotElement.setIsReadOnly(csElement.isIsReadonly());
+		pivotElement.setIsStatic(csElement.isIsStatic());
+		pivotElement.setIsTransient(csElement.isIsTransient());
+		pivotElement.setIsUnsettable(csElement.isIsUnsettable());
+		pivotElement.setIsVolatile(csElement.isIsVolatile());
 		pivotElement.setDefaultValueString(csElement.getDefault());
 		List<SpecificationCS> csDefaultExpressions = csElement.getOwnedDefaultExpressions();
 		SpecificationCS csDefaultExpression = csDefaultExpressions.size() > 0 ? csDefaultExpressions.get(0) : null;
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/CS2ASConversion.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/CS2ASConversion.java
index f8fa739..2fbcef8 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/CS2ASConversion.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/CS2ASConversion.java
@@ -750,8 +750,9 @@
 			boolean isUnique = false;
 			EObject eContainer = csElement.eContainer();
 			if (eContainer instanceof TypedElementCS) {
-				isOrdered = ElementUtil.isOrdered((TypedElementCS) eContainer);
-				isUnique = ElementUtil.isUnique((TypedElementCS) eContainer);
+				TypedElementCS csTypedElement = (TypedElementCS) eContainer;
+				isOrdered = csTypedElement.isIsOrdered();
+				isUnique = !csTypedElement.isIsNotUnique();
 			}
 			IntegerValue lowerValue = ValueUtil.integerValueOf(lower);
 			UnlimitedNaturalValue upperValue = upper != -1 ? ValueUtil.unlimitedNaturalValueOf(upper) : ValueUtil.UNLIMITED_VALUE;
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/ElementUtil.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/ElementUtil.java
index 649856f..0031f71 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/ElementUtil.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/ElementUtil.java
@@ -120,21 +120,8 @@
 		if (upper == 1) {
 			return null;
 		}
-		List<String> qualifiers = csTypedElement.getQualifiers();
-		boolean isOrdered = true;
-		boolean isUnique = true;
-		if (qualifiers.contains("!ordered")) { //$NON-NLS-1$
-			isOrdered = false;
-		}
-		else if (qualifiers.contains("ordered")) { //$NON-NLS-1$
-			isOrdered = true;
-		}
-		if (qualifiers.contains("!unique")) { //$NON-NLS-1$
-			isUnique = false;
-		}
-		else if (qualifiers.contains("unique")) { //$NON-NLS-1$
-			isUnique = true;
-		}
+	boolean isOrdered = csTypedElement.isIsOrdered();
+		boolean isUnique = !csTypedElement.isIsNotUnique();
 		return getCollectionName(isOrdered, isUnique);
 	}
 
@@ -434,18 +421,6 @@
 		return false;
 	}
 
-	public static boolean isOrdered(@NonNull TypedElementCS csTypedElement) {
-		List<String> qualifiers = csTypedElement.getQualifiers();
-		assert qualifiers != null;
-		return getQualifier(qualifiers, "ordered", "!ordered", false);
-	}
-
-	public static boolean isUnique(@NonNull TypedElementCS csTypedElement) {
-		List<String> qualifiers = csTypedElement.getQualifiers();
-		assert qualifiers != null;
-		return getQualifier(qualifiers, "unique", "!unique", true);
-	}
-
 	public static boolean isSpecialization(@NonNull TemplateBindingCS csTemplateBinding) {
 		TypedTypeRefCS csTypedTypeRef = csTemplateBinding.getOwningElement();
 		Element type = csTypedTypeRef.getPivot();
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl/emf-gen/org/eclipse/ocl/xtext/completeoclcs/CompleteOCLCSPackage.java b/plugins/org.eclipse.ocl.xtext.completeocl/emf-gen/org/eclipse/ocl/xtext/completeoclcs/CompleteOCLCSPackage.java
index 9c210d4..173729e 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl/emf-gen/org/eclipse/ocl/xtext/completeoclcs/CompleteOCLCSPackage.java
+++ b/plugins/org.eclipse.ocl.xtext.completeocl/emf-gen/org/eclipse/ocl/xtext/completeoclcs/CompleteOCLCSPackage.java
@@ -544,6 +544,15 @@
 	int DEF_CS__NAME = BaseCSPackage.TYPED_ELEMENT_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DEF_CS__IS_NOT_UNIQUE = BaseCSPackage.TYPED_ELEMENT_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -553,6 +562,15 @@
 	int DEF_CS__IS_OPTIONAL = BaseCSPackage.TYPED_ELEMENT_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DEF_CS__IS_ORDERED = BaseCSPackage.TYPED_ELEMENT_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -562,15 +580,6 @@
 	int DEF_CS__OWNED_TYPE = BaseCSPackage.TYPED_ELEMENT_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int DEF_CS__QUALIFIERS = BaseCSPackage.TYPED_ELEMENT_CS__QUALIFIERS;
-
-	/**
 	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -671,6 +680,15 @@
 	int DEF_OPERATION_CS__NAME = DEF_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DEF_OPERATION_CS__IS_NOT_UNIQUE = DEF_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -680,6 +698,15 @@
 	int DEF_OPERATION_CS__IS_OPTIONAL = DEF_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DEF_OPERATION_CS__IS_ORDERED = DEF_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -689,15 +716,6 @@
 	int DEF_OPERATION_CS__OWNED_TYPE = DEF_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int DEF_OPERATION_CS__QUALIFIERS = DEF_CS__QUALIFIERS;
-
-	/**
 	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -816,6 +834,15 @@
 	int DEF_PROPERTY_CS__NAME = DEF_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DEF_PROPERTY_CS__IS_NOT_UNIQUE = DEF_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -825,6 +852,15 @@
 	int DEF_PROPERTY_CS__IS_OPTIONAL = DEF_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DEF_PROPERTY_CS__IS_ORDERED = DEF_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -834,15 +870,6 @@
 	int DEF_PROPERTY_CS__OWNED_TYPE = DEF_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int DEF_PROPERTY_CS__QUALIFIERS = DEF_CS__QUALIFIERS;
-
-	/**
 	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/AbstractOCLinEcoreProposalProvider.java b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/AbstractOCLinEcoreProposalProvider.java
index f1aec11..0d620b3 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/AbstractOCLinEcoreProposalProvider.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/AbstractOCLinEcoreProposalProvider.java
@@ -80,7 +80,10 @@
 	public void completeAnnotationCS_OwnedReferences(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeAttributeCS_Qualifiers(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeAttributeCS_IsStatic(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeAttributeCS_IsDefinition(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void completeAttributeCS_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -92,6 +95,30 @@
 	public void completeAttributeCS_Default(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
+	public void completeAttributeCS_IsDerived(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeAttributeCS_IsId(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeAttributeCS_IsOrdered(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeAttributeCS_IsReadonly(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeAttributeCS_IsTransient(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeAttributeCS_IsNotUnique(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeAttributeCS_IsUnsettable(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeAttributeCS_IsVolatile(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void completeAttributeCS_OwnedAnnotations(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
@@ -181,7 +208,10 @@
 	public void completeModelElementRefCS_OwnedPathName(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeOperationCS_Qualifiers(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeOperationCS_IsStatic(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeOperationCS_IsDefinition(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void completeOperationCS_OwnedSignature(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -199,6 +229,15 @@
 	public void completeOperationCS_OwnedExceptions(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
+	public void completeOperationCS_IsDerived(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeOperationCS_IsOrdered(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeOperationCS_IsNotUnique(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void completeOperationCS_OwnedAnnotations(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
@@ -235,13 +274,19 @@
 	public void completeParameterCS_OwnedType(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeParameterCS_Qualifiers(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeParameterCS_IsOrdered(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeParameterCS_IsNotUnique(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void completeParameterCS_OwnedAnnotations(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeReferenceCS_Qualifiers(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeReferenceCS_IsStatic(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeReferenceCS_IsDefinition(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void completeReferenceCS_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -256,6 +301,33 @@
 	public void completeReferenceCS_Default(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
+	public void completeReferenceCS_IsComposes(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeReferenceCS_IsDerived(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeReferenceCS_IsOrdered(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeReferenceCS_IsReadonly(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeReferenceCS_IsResolve(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeReferenceCS_IsTransient(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeReferenceCS_IsNotUnique(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeReferenceCS_IsUnsettable(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeReferenceCS_IsVolatile(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void completeReferenceCS_OwnedAnnotations(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/OCLinEcoreParser.java b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/OCLinEcoreParser.java
index 4a999ff..e2313bb 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/OCLinEcoreParser.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/OCLinEcoreParser.java
@@ -43,8 +43,14 @@
 					put(grammarAccess.getAnnotationCSAccess().getAlternatives_4(), "rule__AnnotationCS__Alternatives_4");
 					put(grammarAccess.getAnnotationCSAccess().getAlternatives_4_0_1(), "rule__AnnotationCS__Alternatives_4_0_1");
 					put(grammarAccess.getAnnotationElementCSAccess().getAlternatives(), "rule__AnnotationElementCS__Alternatives");
-					put(grammarAccess.getAttributeCSAccess().getAlternatives_0(), "rule__AttributeCS__Alternatives_0");
+					put(grammarAccess.getAttributeCSAccess().getAlternatives_5_0_1_0(), "rule__AttributeCS__Alternatives_5_0_1_0");
 					put(grammarAccess.getAttributeCSAccess().getAlternatives_5_1_0(), "rule__AttributeCS__Alternatives_5_1_0");
+					put(grammarAccess.getAttributeCSAccess().getAlternatives_5_2_0(), "rule__AttributeCS__Alternatives_5_2_0");
+					put(grammarAccess.getAttributeCSAccess().getAlternatives_5_3_0(), "rule__AttributeCS__Alternatives_5_3_0");
+					put(grammarAccess.getAttributeCSAccess().getAlternatives_5_4_0(), "rule__AttributeCS__Alternatives_5_4_0");
+					put(grammarAccess.getAttributeCSAccess().getAlternatives_5_5_0(), "rule__AttributeCS__Alternatives_5_5_0");
+					put(grammarAccess.getAttributeCSAccess().getAlternatives_5_6_0(), "rule__AttributeCS__Alternatives_5_6_0");
+					put(grammarAccess.getAttributeCSAccess().getAlternatives_5_7_0_0(), "rule__AttributeCS__Alternatives_5_7_0_0");
 					put(grammarAccess.getAttributeCSAccess().getAlternatives_6(), "rule__AttributeCS__Alternatives_6");
 					put(grammarAccess.getAttributeCSAccess().getAlternatives_6_0_1(), "rule__AttributeCS__Alternatives_6_0_1");
 					put(grammarAccess.getClassCSAccess().getAlternatives(), "rule__ClassCS__Alternatives");
@@ -59,15 +65,24 @@
 					put(grammarAccess.getEnumerationLiteralCSAccess().getAlternatives_0(), "rule__EnumerationLiteralCS__Alternatives_0");
 					put(grammarAccess.getEnumerationLiteralCSAccess().getAlternatives_2(), "rule__EnumerationLiteralCS__Alternatives_2");
 					put(grammarAccess.getModelElementCSAccess().getAlternatives(), "rule__ModelElementCS__Alternatives");
-					put(grammarAccess.getOperationCSAccess().getAlternatives_0(), "rule__OperationCS__Alternatives_0");
+					put(grammarAccess.getOperationCSAccess().getAlternatives_9_0_1_0(), "rule__OperationCS__Alternatives_9_0_1_0");
 					put(grammarAccess.getOperationCSAccess().getAlternatives_9_1_0(), "rule__OperationCS__Alternatives_9_1_0");
+					put(grammarAccess.getOperationCSAccess().getAlternatives_9_2_0_0(), "rule__OperationCS__Alternatives_9_2_0_0");
 					put(grammarAccess.getOperationCSAccess().getAlternatives_10(), "rule__OperationCS__Alternatives_10");
 					put(grammarAccess.getOperationCSAccess().getAlternatives_10_0_1(), "rule__OperationCS__Alternatives_10_0_1");
 					put(grammarAccess.getPackageCSAccess().getAlternatives_4(), "rule__PackageCS__Alternatives_4");
 					put(grammarAccess.getPackageCSAccess().getAlternatives_4_0_1(), "rule__PackageCS__Alternatives_4_0_1");
-					put(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0(), "rule__ParameterCS__Alternatives_2_1_0");
-					put(grammarAccess.getReferenceCSAccess().getAlternatives_0(), "rule__ReferenceCS__Alternatives_0");
+					put(grammarAccess.getParameterCSAccess().getAlternatives_2_0_1_0(), "rule__ParameterCS__Alternatives_2_0_1_0");
+					put(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0_0(), "rule__ParameterCS__Alternatives_2_1_0_0");
+					put(grammarAccess.getReferenceCSAccess().getAlternatives_6_0_1_0(), "rule__ReferenceCS__Alternatives_6_0_1_0");
 					put(grammarAccess.getReferenceCSAccess().getAlternatives_6_1_0(), "rule__ReferenceCS__Alternatives_6_1_0");
+					put(grammarAccess.getReferenceCSAccess().getAlternatives_6_2_0(), "rule__ReferenceCS__Alternatives_6_2_0");
+					put(grammarAccess.getReferenceCSAccess().getAlternatives_6_3_0(), "rule__ReferenceCS__Alternatives_6_3_0");
+					put(grammarAccess.getReferenceCSAccess().getAlternatives_6_4_0(), "rule__ReferenceCS__Alternatives_6_4_0");
+					put(grammarAccess.getReferenceCSAccess().getAlternatives_6_5_0(), "rule__ReferenceCS__Alternatives_6_5_0");
+					put(grammarAccess.getReferenceCSAccess().getAlternatives_6_6_0(), "rule__ReferenceCS__Alternatives_6_6_0");
+					put(grammarAccess.getReferenceCSAccess().getAlternatives_6_7_0(), "rule__ReferenceCS__Alternatives_6_7_0");
+					put(grammarAccess.getReferenceCSAccess().getAlternatives_6_8_0_0(), "rule__ReferenceCS__Alternatives_6_8_0_0");
 					put(grammarAccess.getReferenceCSAccess().getAlternatives_7(), "rule__ReferenceCS__Alternatives_7");
 					put(grammarAccess.getReferenceCSAccess().getAlternatives_7_0_1(), "rule__ReferenceCS__Alternatives_7_0_1");
 					put(grammarAccess.getSpecificationCSAccess().getAlternatives(), "rule__SpecificationCS__Alternatives");
@@ -129,12 +144,18 @@
 					put(grammarAccess.getAnnotationCSAccess().getGroup_3_2(), "rule__AnnotationCS__Group_3_2__0");
 					put(grammarAccess.getAnnotationCSAccess().getGroup_4_0(), "rule__AnnotationCS__Group_4_0__0");
 					put(grammarAccess.getAttributeCSAccess().getGroup(), "rule__AttributeCS__Group__0");
-					put(grammarAccess.getAttributeCSAccess().getGroup_0_0(), "rule__AttributeCS__Group_0_0__0");
-					put(grammarAccess.getAttributeCSAccess().getGroup_0_1(), "rule__AttributeCS__Group_0_1__0");
 					put(grammarAccess.getAttributeCSAccess().getGroup_3(), "rule__AttributeCS__Group_3__0");
 					put(grammarAccess.getAttributeCSAccess().getGroup_4(), "rule__AttributeCS__Group_4__0");
-					put(grammarAccess.getAttributeCSAccess().getGroup_5(), "rule__AttributeCS__Group_5__0");
+					put(grammarAccess.getAttributeCSAccess().getGroup_5_0(), "rule__AttributeCS__Group_5_0__0");
+					put(grammarAccess.getAttributeCSAccess().getGroup_5_0_1(), "rule__AttributeCS__Group_5_0_1__0");
 					put(grammarAccess.getAttributeCSAccess().getGroup_5_1(), "rule__AttributeCS__Group_5_1__0");
+					put(grammarAccess.getAttributeCSAccess().getGroup_5_2(), "rule__AttributeCS__Group_5_2__0");
+					put(grammarAccess.getAttributeCSAccess().getGroup_5_3(), "rule__AttributeCS__Group_5_3__0");
+					put(grammarAccess.getAttributeCSAccess().getGroup_5_4(), "rule__AttributeCS__Group_5_4__0");
+					put(grammarAccess.getAttributeCSAccess().getGroup_5_5(), "rule__AttributeCS__Group_5_5__0");
+					put(grammarAccess.getAttributeCSAccess().getGroup_5_6(), "rule__AttributeCS__Group_5_6__0");
+					put(grammarAccess.getAttributeCSAccess().getGroup_5_7(), "rule__AttributeCS__Group_5_7__0");
+					put(grammarAccess.getAttributeCSAccess().getGroup_5_7_0(), "rule__AttributeCS__Group_5_7_0__0");
 					put(grammarAccess.getAttributeCSAccess().getGroup_6_0(), "rule__AttributeCS__Group_6_0__0");
 					put(grammarAccess.getAttributeCSAccess().getGroup_6_0_1_1(), "rule__AttributeCS__Group_6_0_1_1__0");
 					put(grammarAccess.getAttributeCSAccess().getGroup_6_0_1_2(), "rule__AttributeCS__Group_6_0_1_2__0");
@@ -160,15 +181,16 @@
 					put(grammarAccess.getLibraryCSAccess().getGroup_1(), "rule__LibraryCS__Group_1__0");
 					put(grammarAccess.getModelElementRefCSAccess().getGroup(), "rule__ModelElementRefCS__Group__0");
 					put(grammarAccess.getOperationCSAccess().getGroup(), "rule__OperationCS__Group__0");
-					put(grammarAccess.getOperationCSAccess().getGroup_0_0(), "rule__OperationCS__Group_0_0__0");
-					put(grammarAccess.getOperationCSAccess().getGroup_0_1(), "rule__OperationCS__Group_0_1__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_5(), "rule__OperationCS__Group_5__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_5_1(), "rule__OperationCS__Group_5_1__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_7(), "rule__OperationCS__Group_7__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_8(), "rule__OperationCS__Group_8__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_8_2(), "rule__OperationCS__Group_8_2__0");
-					put(grammarAccess.getOperationCSAccess().getGroup_9(), "rule__OperationCS__Group_9__0");
+					put(grammarAccess.getOperationCSAccess().getGroup_9_0(), "rule__OperationCS__Group_9_0__0");
+					put(grammarAccess.getOperationCSAccess().getGroup_9_0_1(), "rule__OperationCS__Group_9_0_1__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_9_1(), "rule__OperationCS__Group_9_1__0");
+					put(grammarAccess.getOperationCSAccess().getGroup_9_2(), "rule__OperationCS__Group_9_2__0");
+					put(grammarAccess.getOperationCSAccess().getGroup_9_2_0(), "rule__OperationCS__Group_9_2_0__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_10_0(), "rule__OperationCS__Group_10_0__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_10_0_1_2(), "rule__OperationCS__Group_10_0_1_2__0");
 					put(grammarAccess.getPackageCSAccess().getGroup(), "rule__PackageCS__Group__0");
@@ -177,17 +199,26 @@
 					put(grammarAccess.getPackageCSAccess().getGroup_4_0(), "rule__PackageCS__Group_4_0__0");
 					put(grammarAccess.getParameterCSAccess().getGroup(), "rule__ParameterCS__Group__0");
 					put(grammarAccess.getParameterCSAccess().getGroup_1(), "rule__ParameterCS__Group_1__0");
-					put(grammarAccess.getParameterCSAccess().getGroup_2(), "rule__ParameterCS__Group_2__0");
+					put(grammarAccess.getParameterCSAccess().getGroup_2_0(), "rule__ParameterCS__Group_2_0__0");
+					put(grammarAccess.getParameterCSAccess().getGroup_2_0_1(), "rule__ParameterCS__Group_2_0_1__0");
 					put(grammarAccess.getParameterCSAccess().getGroup_2_1(), "rule__ParameterCS__Group_2_1__0");
+					put(grammarAccess.getParameterCSAccess().getGroup_2_1_0(), "rule__ParameterCS__Group_2_1_0__0");
 					put(grammarAccess.getParameterCSAccess().getGroup_3(), "rule__ParameterCS__Group_3__0");
 					put(grammarAccess.getReferenceCSAccess().getGroup(), "rule__ReferenceCS__Group__0");
-					put(grammarAccess.getReferenceCSAccess().getGroup_0_0(), "rule__ReferenceCS__Group_0_0__0");
-					put(grammarAccess.getReferenceCSAccess().getGroup_0_1(), "rule__ReferenceCS__Group_0_1__0");
 					put(grammarAccess.getReferenceCSAccess().getGroup_3(), "rule__ReferenceCS__Group_3__0");
 					put(grammarAccess.getReferenceCSAccess().getGroup_4(), "rule__ReferenceCS__Group_4__0");
 					put(grammarAccess.getReferenceCSAccess().getGroup_5(), "rule__ReferenceCS__Group_5__0");
-					put(grammarAccess.getReferenceCSAccess().getGroup_6(), "rule__ReferenceCS__Group_6__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_0(), "rule__ReferenceCS__Group_6_0__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_0_1(), "rule__ReferenceCS__Group_6_0_1__0");
 					put(grammarAccess.getReferenceCSAccess().getGroup_6_1(), "rule__ReferenceCS__Group_6_1__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_2(), "rule__ReferenceCS__Group_6_2__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_3(), "rule__ReferenceCS__Group_6_3__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_4(), "rule__ReferenceCS__Group_6_4__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_5(), "rule__ReferenceCS__Group_6_5__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_6(), "rule__ReferenceCS__Group_6_6__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_7(), "rule__ReferenceCS__Group_6_7__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_8(), "rule__ReferenceCS__Group_6_8__0");
+					put(grammarAccess.getReferenceCSAccess().getGroup_6_8_0(), "rule__ReferenceCS__Group_6_8_0__0");
 					put(grammarAccess.getReferenceCSAccess().getGroup_7_0(), "rule__ReferenceCS__Group_7_0__0");
 					put(grammarAccess.getReferenceCSAccess().getGroup_7_0_1_1(), "rule__ReferenceCS__Group_7_0_1_1__0");
 					put(grammarAccess.getReferenceCSAccess().getGroup_7_0_1_1_2(), "rule__ReferenceCS__Group_7_0_1_1_2__0");
@@ -319,29 +350,19 @@
 					put(grammarAccess.getAnnotationCSAccess().getOwnedAnnotationsAssignment_4_0_1_0(), "rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_0");
 					put(grammarAccess.getAnnotationCSAccess().getOwnedContentsAssignment_4_0_1_1(), "rule__AnnotationCS__OwnedContentsAssignment_4_0_1_1");
 					put(grammarAccess.getAnnotationCSAccess().getOwnedReferencesAssignment_4_0_1_2(), "rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_2");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_0(), "rule__AttributeCS__QualifiersAssignment_0_0_0");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_1(), "rule__AttributeCS__QualifiersAssignment_0_0_1");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_0(), "rule__AttributeCS__QualifiersAssignment_0_1_0");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_1(), "rule__AttributeCS__QualifiersAssignment_0_1_1");
+					put(grammarAccess.getAttributeCSAccess().getIsStaticAssignment_0_0(), "rule__AttributeCS__IsStaticAssignment_0_0");
+					put(grammarAccess.getAttributeCSAccess().getIsDefinitionAssignment_0_1(), "rule__AttributeCS__IsDefinitionAssignment_0_1");
 					put(grammarAccess.getAttributeCSAccess().getNameAssignment_2(), "rule__AttributeCS__NameAssignment_2");
 					put(grammarAccess.getAttributeCSAccess().getOwnedTypeAssignment_3_1(), "rule__AttributeCS__OwnedTypeAssignment_3_1");
 					put(grammarAccess.getAttributeCSAccess().getDefaultAssignment_4_1(), "rule__AttributeCS__DefaultAssignment_4_1");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_0(), "rule__AttributeCS__QualifiersAssignment_5_1_0_0");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_1(), "rule__AttributeCS__QualifiersAssignment_5_1_0_1");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_2(), "rule__AttributeCS__QualifiersAssignment_5_1_0_2");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_3(), "rule__AttributeCS__QualifiersAssignment_5_1_0_3");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_4(), "rule__AttributeCS__QualifiersAssignment_5_1_0_4");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_5(), "rule__AttributeCS__QualifiersAssignment_5_1_0_5");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_6(), "rule__AttributeCS__QualifiersAssignment_5_1_0_6");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_7(), "rule__AttributeCS__QualifiersAssignment_5_1_0_7");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_8(), "rule__AttributeCS__QualifiersAssignment_5_1_0_8");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_9(), "rule__AttributeCS__QualifiersAssignment_5_1_0_9");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_10(), "rule__AttributeCS__QualifiersAssignment_5_1_0_10");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_11(), "rule__AttributeCS__QualifiersAssignment_5_1_0_11");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_12(), "rule__AttributeCS__QualifiersAssignment_5_1_0_12");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_13(), "rule__AttributeCS__QualifiersAssignment_5_1_0_13");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_14(), "rule__AttributeCS__QualifiersAssignment_5_1_0_14");
-					put(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_15(), "rule__AttributeCS__QualifiersAssignment_5_1_0_15");
+					put(grammarAccess.getAttributeCSAccess().getIsDerivedAssignment_5_0_1_0_0(), "rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0");
+					put(grammarAccess.getAttributeCSAccess().getIsIdAssignment_5_1_0_0(), "rule__AttributeCS__IsIdAssignment_5_1_0_0");
+					put(grammarAccess.getAttributeCSAccess().getIsOrderedAssignment_5_2_0_0(), "rule__AttributeCS__IsOrderedAssignment_5_2_0_0");
+					put(grammarAccess.getAttributeCSAccess().getIsReadonlyAssignment_5_3_0_0(), "rule__AttributeCS__IsReadonlyAssignment_5_3_0_0");
+					put(grammarAccess.getAttributeCSAccess().getIsTransientAssignment_5_4_0_0(), "rule__AttributeCS__IsTransientAssignment_5_4_0_0");
+					put(grammarAccess.getAttributeCSAccess().getIsNotUniqueAssignment_5_5_0_0(), "rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0");
+					put(grammarAccess.getAttributeCSAccess().getIsUnsettableAssignment_5_6_0_0(), "rule__AttributeCS__IsUnsettableAssignment_5_6_0_0");
+					put(grammarAccess.getAttributeCSAccess().getIsVolatileAssignment_5_7_0_0_0(), "rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0");
 					put(grammarAccess.getAttributeCSAccess().getOwnedAnnotationsAssignment_6_0_1_0(), "rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0");
 					put(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsAssignment_6_0_1_1_3(), "rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3");
 					put(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsAssignment_6_0_1_2_3(), "rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3");
@@ -374,10 +395,8 @@
 					put(grammarAccess.getLibraryCSAccess().getNameAssignment_1_0(), "rule__LibraryCS__NameAssignment_1_0");
 					put(grammarAccess.getLibraryCSAccess().getReferredPackageAssignment_2(), "rule__LibraryCS__ReferredPackageAssignment_2");
 					put(grammarAccess.getModelElementRefCSAccess().getOwnedPathNameAssignment_1(), "rule__ModelElementRefCS__OwnedPathNameAssignment_1");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_0(), "rule__OperationCS__QualifiersAssignment_0_0_0");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_1(), "rule__OperationCS__QualifiersAssignment_0_0_1");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_0(), "rule__OperationCS__QualifiersAssignment_0_1_0");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_1(), "rule__OperationCS__QualifiersAssignment_0_1_1");
+					put(grammarAccess.getOperationCSAccess().getIsStaticAssignment_0_0(), "rule__OperationCS__IsStaticAssignment_0_0");
+					put(grammarAccess.getOperationCSAccess().getIsDefinitionAssignment_0_1(), "rule__OperationCS__IsDefinitionAssignment_0_1");
 					put(grammarAccess.getOperationCSAccess().getOwnedSignatureAssignment_2(), "rule__OperationCS__OwnedSignatureAssignment_2");
 					put(grammarAccess.getOperationCSAccess().getNameAssignment_3(), "rule__OperationCS__NameAssignment_3");
 					put(grammarAccess.getOperationCSAccess().getOwnedParametersAssignment_5_0(), "rule__OperationCS__OwnedParametersAssignment_5_0");
@@ -385,12 +404,9 @@
 					put(grammarAccess.getOperationCSAccess().getOwnedTypeAssignment_7_1(), "rule__OperationCS__OwnedTypeAssignment_7_1");
 					put(grammarAccess.getOperationCSAccess().getOwnedExceptionsAssignment_8_1(), "rule__OperationCS__OwnedExceptionsAssignment_8_1");
 					put(grammarAccess.getOperationCSAccess().getOwnedExceptionsAssignment_8_2_1(), "rule__OperationCS__OwnedExceptionsAssignment_8_2_1");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_0(), "rule__OperationCS__QualifiersAssignment_9_1_0_0");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_1(), "rule__OperationCS__QualifiersAssignment_9_1_0_1");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_2(), "rule__OperationCS__QualifiersAssignment_9_1_0_2");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_3(), "rule__OperationCS__QualifiersAssignment_9_1_0_3");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_4(), "rule__OperationCS__QualifiersAssignment_9_1_0_4");
-					put(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_5(), "rule__OperationCS__QualifiersAssignment_9_1_0_5");
+					put(grammarAccess.getOperationCSAccess().getIsDerivedAssignment_9_0_1_0_0(), "rule__OperationCS__IsDerivedAssignment_9_0_1_0_0");
+					put(grammarAccess.getOperationCSAccess().getIsOrderedAssignment_9_1_0_0(), "rule__OperationCS__IsOrderedAssignment_9_1_0_0");
+					put(grammarAccess.getOperationCSAccess().getIsNotUniqueAssignment_9_2_0_0_0(), "rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0");
 					put(grammarAccess.getOperationCSAccess().getOwnedAnnotationsAssignment_10_0_1_0(), "rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0");
 					put(grammarAccess.getOperationCSAccess().getOwnedPreconditionsAssignment_10_0_1_1(), "rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1");
 					put(grammarAccess.getOperationCSAccess().getOwnedBodyExpressionsAssignment_10_0_1_2_3(), "rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3");
@@ -403,37 +419,24 @@
 					put(grammarAccess.getPackageCSAccess().getOwnedClassesAssignment_4_0_1_2(), "rule__PackageCS__OwnedClassesAssignment_4_0_1_2");
 					put(grammarAccess.getParameterCSAccess().getNameAssignment_0(), "rule__ParameterCS__NameAssignment_0");
 					put(grammarAccess.getParameterCSAccess().getOwnedTypeAssignment_1_1(), "rule__ParameterCS__OwnedTypeAssignment_1_1");
-					put(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_0(), "rule__ParameterCS__QualifiersAssignment_2_1_0_0");
-					put(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_1(), "rule__ParameterCS__QualifiersAssignment_2_1_0_1");
-					put(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_2(), "rule__ParameterCS__QualifiersAssignment_2_1_0_2");
-					put(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_3(), "rule__ParameterCS__QualifiersAssignment_2_1_0_3");
+					put(grammarAccess.getParameterCSAccess().getIsOrderedAssignment_2_0_1_0_0(), "rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0");
+					put(grammarAccess.getParameterCSAccess().getIsNotUniqueAssignment_2_1_0_0_0(), "rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0");
 					put(grammarAccess.getParameterCSAccess().getOwnedAnnotationsAssignment_3_1(), "rule__ParameterCS__OwnedAnnotationsAssignment_3_1");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_0(), "rule__ReferenceCS__QualifiersAssignment_0_0_0");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_1(), "rule__ReferenceCS__QualifiersAssignment_0_0_1");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_0(), "rule__ReferenceCS__QualifiersAssignment_0_1_0");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_1(), "rule__ReferenceCS__QualifiersAssignment_0_1_1");
+					put(grammarAccess.getReferenceCSAccess().getIsStaticAssignment_0_0(), "rule__ReferenceCS__IsStaticAssignment_0_0");
+					put(grammarAccess.getReferenceCSAccess().getIsDefinitionAssignment_0_1(), "rule__ReferenceCS__IsDefinitionAssignment_0_1");
 					put(grammarAccess.getReferenceCSAccess().getNameAssignment_2(), "rule__ReferenceCS__NameAssignment_2");
 					put(grammarAccess.getReferenceCSAccess().getReferredOppositeAssignment_3_1(), "rule__ReferenceCS__ReferredOppositeAssignment_3_1");
 					put(grammarAccess.getReferenceCSAccess().getOwnedTypeAssignment_4_1(), "rule__ReferenceCS__OwnedTypeAssignment_4_1");
 					put(grammarAccess.getReferenceCSAccess().getDefaultAssignment_5_1(), "rule__ReferenceCS__DefaultAssignment_5_1");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_0(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_0");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_1(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_1");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_2(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_2");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_3(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_3");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_4(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_4");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_5(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_5");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_6(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_6");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_7(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_7");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_8(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_8");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_9(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_9");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_10(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_10");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_11(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_11");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_12(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_12");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_13(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_13");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_14(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_14");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_15(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_15");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_16(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_16");
-					put(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_17(), "rule__ReferenceCS__QualifiersAssignment_6_1_0_17");
+					put(grammarAccess.getReferenceCSAccess().getIsComposesAssignment_6_0_1_0_0(), "rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0");
+					put(grammarAccess.getReferenceCSAccess().getIsDerivedAssignment_6_1_0_0(), "rule__ReferenceCS__IsDerivedAssignment_6_1_0_0");
+					put(grammarAccess.getReferenceCSAccess().getIsOrderedAssignment_6_2_0_0(), "rule__ReferenceCS__IsOrderedAssignment_6_2_0_0");
+					put(grammarAccess.getReferenceCSAccess().getIsReadonlyAssignment_6_3_0_0(), "rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0");
+					put(grammarAccess.getReferenceCSAccess().getIsResolveAssignment_6_4_0_0(), "rule__ReferenceCS__IsResolveAssignment_6_4_0_0");
+					put(grammarAccess.getReferenceCSAccess().getIsTransientAssignment_6_5_0_0(), "rule__ReferenceCS__IsTransientAssignment_6_5_0_0");
+					put(grammarAccess.getReferenceCSAccess().getIsNotUniqueAssignment_6_6_0_0(), "rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0");
+					put(grammarAccess.getReferenceCSAccess().getIsUnsettableAssignment_6_7_0_0(), "rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0");
+					put(grammarAccess.getReferenceCSAccess().getIsVolatileAssignment_6_8_0_0_0(), "rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0");
 					put(grammarAccess.getReferenceCSAccess().getOwnedAnnotationsAssignment_7_0_1_0(), "rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0");
 					put(grammarAccess.getReferenceCSAccess().getReferredKeysAssignment_7_0_1_1_1(), "rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1");
 					put(grammarAccess.getReferenceCSAccess().getReferredKeysAssignment_7_0_1_1_2_1(), "rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1");
@@ -576,6 +579,13 @@
 					put(grammarAccess.getTypedTypeRefCSAccess().getOwnedBindingAssignment_1(), "rule__TypedTypeRefCS__OwnedBindingAssignment_1");
 					put(grammarAccess.getWildcardTypeRefCSAccess().getOwnedExtendsAssignment_2_0_1(), "rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1");
 					put(grammarAccess.getWildcardTypeRefCSAccess().getOwnedSuperAssignment_2_1_1(), "rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1");
+					put(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), "rule__AttributeCS__UnorderedGroup_0");
+					put(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), "rule__AttributeCS__UnorderedGroup_5");
+					put(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), "rule__OperationCS__UnorderedGroup_0");
+					put(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), "rule__OperationCS__UnorderedGroup_9");
+					put(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), "rule__ParameterCS__UnorderedGroup_2");
+					put(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), "rule__ReferenceCS__UnorderedGroup_0");
+					put(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), "rule__ReferenceCS__UnorderedGroup_6");
 				}
 			};
 		}
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g
index b7ad363..cca0226 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g
@@ -3499,21 +3499,23 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__Alternatives_0
+rule__AttributeCS__Alternatives_5_0_1_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getGroup_0_0()); }
-(rule__AttributeCS__Group_0_0__0)
-{ after(grammarAccess.getAttributeCSAccess().getGroup_0_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsDerivedAssignment_5_0_1_0_0()); }
+(rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0)
+{ after(grammarAccess.getAttributeCSAccess().getIsDerivedAssignment_5_0_1_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getAttributeCSAccess().getGroup_0_1()); }
-(rule__AttributeCS__Group_0_1__0)
-{ after(grammarAccess.getAttributeCSAccess().getGroup_0_1()); }
+{ before(grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()); }
+
+	'!derived' 
+
+{ after(grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()); }
 )
 
 ;
@@ -3527,99 +3529,161 @@
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_0()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_0)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsIdAssignment_5_1_0_0()); }
+(rule__AttributeCS__IsIdAssignment_5_1_0_0)
+{ after(grammarAccess.getAttributeCSAccess().getIsIdAssignment_5_1_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_1()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_1)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_1()); }
+{ before(grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()); }
+
+	'!id' 
+
+{ after(grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Alternatives_5_2_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getIsOrderedAssignment_5_2_0_0()); }
+(rule__AttributeCS__IsOrderedAssignment_5_2_0_0)
+{ after(grammarAccess.getAttributeCSAccess().getIsOrderedAssignment_5_2_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_2()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_2)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_2()); }
+{ before(grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()); }
+
+	'!ordered' 
+
+{ after(grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Alternatives_5_3_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getIsReadonlyAssignment_5_3_0_0()); }
+(rule__AttributeCS__IsReadonlyAssignment_5_3_0_0)
+{ after(grammarAccess.getAttributeCSAccess().getIsReadonlyAssignment_5_3_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_3()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_3)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_3()); }
+{ before(grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()); }
+
+	'!readonly' 
+
+{ after(grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Alternatives_5_4_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getIsTransientAssignment_5_4_0_0()); }
+(rule__AttributeCS__IsTransientAssignment_5_4_0_0)
+{ after(grammarAccess.getAttributeCSAccess().getIsTransientAssignment_5_4_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_4()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_4)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_4()); }
+{ before(grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()); }
+
+	'!transient' 
+
+{ after(grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Alternatives_5_5_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getIsNotUniqueAssignment_5_5_0_0()); }
+(rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0)
+{ after(grammarAccess.getAttributeCSAccess().getIsNotUniqueAssignment_5_5_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_5()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_5)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_5()); }
+{ before(grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()); }
+
+	'unique' 
+
+{ after(grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Alternatives_5_6_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getIsUnsettableAssignment_5_6_0_0()); }
+(rule__AttributeCS__IsUnsettableAssignment_5_6_0_0)
+{ after(grammarAccess.getAttributeCSAccess().getIsUnsettableAssignment_5_6_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_6()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_6)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_6()); }
+{ before(grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()); }
+
+	'!unsettable' 
+
+{ after(grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Alternatives_5_7_0_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getIsVolatileAssignment_5_7_0_0_0()); }
+(rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0)
+{ after(grammarAccess.getAttributeCSAccess().getIsVolatileAssignment_5_7_0_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_7()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_7)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_7()); }
-)
+{ before(grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()); }
 
-    |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_8()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_8)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_8()); }
-)
+	'!volatile' 
 
-    |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_9()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_9)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_9()); }
-)
-
-    |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_10()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_10)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_10()); }
-)
-
-    |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_11()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_11)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_11()); }
-)
-
-    |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_12()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_12)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_12()); }
-)
-
-    |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_13()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_13)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_13()); }
-)
-
-    |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_14()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_14)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_14()); }
-)
-
-    |(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_15()); }
-(rule__AttributeCS__QualifiersAssignment_5_1_0_15)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_15()); }
+{ after(grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()); }
 )
 
 ;
@@ -3983,21 +4047,23 @@
 	restoreStackSize(stackSize);
 }
 
-rule__OperationCS__Alternatives_0
+rule__OperationCS__Alternatives_9_0_1_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getGroup_0_0()); }
-(rule__OperationCS__Group_0_0__0)
-{ after(grammarAccess.getOperationCSAccess().getGroup_0_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsDerivedAssignment_9_0_1_0_0()); }
+(rule__OperationCS__IsDerivedAssignment_9_0_1_0_0)
+{ after(grammarAccess.getOperationCSAccess().getIsDerivedAssignment_9_0_1_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getOperationCSAccess().getGroup_0_1()); }
-(rule__OperationCS__Group_0_1__0)
-{ after(grammarAccess.getOperationCSAccess().getGroup_0_1()); }
+{ before(grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1()); }
+
+	'!derived' 
+
+{ after(grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1()); }
 )
 
 ;
@@ -4011,39 +4077,41 @@
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_0()); }
-(rule__OperationCS__QualifiersAssignment_9_1_0_0)
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsOrderedAssignment_9_1_0_0()); }
+(rule__OperationCS__IsOrderedAssignment_9_1_0_0)
+{ after(grammarAccess.getOperationCSAccess().getIsOrderedAssignment_9_1_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_1()); }
-(rule__OperationCS__QualifiersAssignment_9_1_0_1)
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_1()); }
+{ before(grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1()); }
+
+	'!ordered' 
+
+{ after(grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OperationCS__Alternatives_9_2_0_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOperationCSAccess().getIsNotUniqueAssignment_9_2_0_0_0()); }
+(rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0)
+{ after(grammarAccess.getOperationCSAccess().getIsNotUniqueAssignment_9_2_0_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_2()); }
-(rule__OperationCS__QualifiersAssignment_9_1_0_2)
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_2()); }
-)
+{ before(grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1()); }
 
-    |(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_3()); }
-(rule__OperationCS__QualifiersAssignment_9_1_0_3)
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_3()); }
-)
+	'unique' 
 
-    |(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_4()); }
-(rule__OperationCS__QualifiersAssignment_9_1_0_4)
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_4()); }
-)
-
-    |(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_5()); }
-(rule__OperationCS__QualifiersAssignment_9_1_0_5)
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_5()); }
+{ after(grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1()); }
 )
 
 ;
@@ -4161,33 +4229,23 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ParameterCS__Alternatives_2_1_0
+rule__ParameterCS__Alternatives_2_0_1_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_0()); }
-(rule__ParameterCS__QualifiersAssignment_2_1_0_0)
-{ after(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_0()); }
+{ before(grammarAccess.getParameterCSAccess().getIsOrderedAssignment_2_0_1_0_0()); }
+(rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0)
+{ after(grammarAccess.getParameterCSAccess().getIsOrderedAssignment_2_0_1_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_1()); }
-(rule__ParameterCS__QualifiersAssignment_2_1_0_1)
-{ after(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_1()); }
-)
+{ before(grammarAccess.getParameterCSAccess().getOrderedKeyword_2_0_1_0_1()); }
 
-    |(
-{ before(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_2()); }
-(rule__ParameterCS__QualifiersAssignment_2_1_0_2)
-{ after(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_2()); }
-)
+	'!ordered' 
 
-    |(
-{ before(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_3()); }
-(rule__ParameterCS__QualifiersAssignment_2_1_0_3)
-{ after(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_3()); }
+{ after(grammarAccess.getParameterCSAccess().getOrderedKeyword_2_0_1_0_1()); }
 )
 
 ;
@@ -4195,21 +4253,47 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__Alternatives_0
+rule__ParameterCS__Alternatives_2_1_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getGroup_0_0()); }
-(rule__ReferenceCS__Group_0_0__0)
-{ after(grammarAccess.getReferenceCSAccess().getGroup_0_0()); }
+{ before(grammarAccess.getParameterCSAccess().getIsNotUniqueAssignment_2_1_0_0_0()); }
+(rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0)
+{ after(grammarAccess.getParameterCSAccess().getIsNotUniqueAssignment_2_1_0_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getReferenceCSAccess().getGroup_0_1()); }
-(rule__ReferenceCS__Group_0_1__0)
-{ after(grammarAccess.getReferenceCSAccess().getGroup_0_1()); }
+{ before(grammarAccess.getParameterCSAccess().getUniqueKeyword_2_1_0_0_1()); }
+
+	'unique' 
+
+{ after(grammarAccess.getParameterCSAccess().getUniqueKeyword_2_1_0_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Alternatives_6_0_1_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getIsComposesAssignment_6_0_1_0_0()); }
+(rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getIsComposesAssignment_6_0_1_0_0()); }
+)
+
+    |(
+{ before(grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()); }
+
+	'!composes' 
+
+{ after(grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()); }
 )
 
 ;
@@ -4223,111 +4307,185 @@
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_0()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_0)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsDerivedAssignment_6_1_0_0()); }
+(rule__ReferenceCS__IsDerivedAssignment_6_1_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getIsDerivedAssignment_6_1_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_1()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_1)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_1()); }
+{ before(grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()); }
+
+	'!derived' 
+
+{ after(grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Alternatives_6_2_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getIsOrderedAssignment_6_2_0_0()); }
+(rule__ReferenceCS__IsOrderedAssignment_6_2_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getIsOrderedAssignment_6_2_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_2()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_2)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_2()); }
+{ before(grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()); }
+
+	'!ordered' 
+
+{ after(grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Alternatives_6_3_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getIsReadonlyAssignment_6_3_0_0()); }
+(rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getIsReadonlyAssignment_6_3_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_3()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_3)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_3()); }
+{ before(grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()); }
+
+	'!readonly' 
+
+{ after(grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Alternatives_6_4_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getIsResolveAssignment_6_4_0_0()); }
+(rule__ReferenceCS__IsResolveAssignment_6_4_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getIsResolveAssignment_6_4_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_4()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_4)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_4()); }
+{ before(grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()); }
+
+	'!resolve' 
+
+{ after(grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Alternatives_6_5_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getIsTransientAssignment_6_5_0_0()); }
+(rule__ReferenceCS__IsTransientAssignment_6_5_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getIsTransientAssignment_6_5_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_5()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_5)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_5()); }
+{ before(grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()); }
+
+	'!transient' 
+
+{ after(grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Alternatives_6_6_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getIsNotUniqueAssignment_6_6_0_0()); }
+(rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getIsNotUniqueAssignment_6_6_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_6()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_6)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_6()); }
+{ before(grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()); }
+
+	'unique' 
+
+{ after(grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Alternatives_6_7_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getIsUnsettableAssignment_6_7_0_0()); }
+(rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getIsUnsettableAssignment_6_7_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_7()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_7)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_7()); }
+{ before(grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()); }
+
+	'!unsettable' 
+
+{ after(grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Alternatives_6_8_0_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getIsVolatileAssignment_6_8_0_0_0()); }
+(rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getIsVolatileAssignment_6_8_0_0_0()); }
 )
 
     |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_8()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_8)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_8()); }
-)
+{ before(grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()); }
 
-    |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_9()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_9)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_9()); }
-)
+	'!volatile' 
 
-    |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_10()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_10)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_10()); }
-)
-
-    |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_11()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_11)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_11()); }
-)
-
-    |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_12()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_12)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_12()); }
-)
-
-    |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_13()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_13)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_13()); }
-)
-
-    |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_14()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_14)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_14()); }
-)
-
-    |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_15()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_15)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_15()); }
-)
-
-    |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_16()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_16)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_16()); }
-)
-
-    |(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_17()); }
-(rule__ReferenceCS__QualifiersAssignment_6_1_0_17)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_17()); }
+{ after(grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()); }
 )
 
 ;
@@ -7378,9 +7536,9 @@
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getAlternatives_0()); }
-(rule__AttributeCS__Alternatives_0)?
-{ after(grammarAccess.getAttributeCSAccess().getAlternatives_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0()); }
+(rule__AttributeCS__UnorderedGroup_0)
+{ after(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0()); }
 )
 
 ;
@@ -7525,9 +7683,9 @@
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getGroup_5()); }
-(rule__AttributeCS__Group_5__0)?
-{ after(grammarAccess.getAttributeCSAccess().getGroup_5()); }
+{ before(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()); }
+(rule__AttributeCS__UnorderedGroup_5)?
+{ after(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()); }
 )
 
 ;
@@ -7578,128 +7736,6 @@
 
 
 
-rule__AttributeCS__Group_0_0__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__AttributeCS__Group_0_0__0__Impl
-	rule__AttributeCS__Group_0_0__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__Group_0_0__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_0()); }
-(rule__AttributeCS__QualifiersAssignment_0_0_0)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__AttributeCS__Group_0_0__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__AttributeCS__Group_0_0__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__Group_0_0__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_1()); }
-(rule__AttributeCS__QualifiersAssignment_0_0_1)?
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-rule__AttributeCS__Group_0_1__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__AttributeCS__Group_0_1__0__Impl
-	rule__AttributeCS__Group_0_1__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__Group_0_1__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_0()); }
-(rule__AttributeCS__QualifiersAssignment_0_1_0)
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__AttributeCS__Group_0_1__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__AttributeCS__Group_0_1__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__Group_0_1__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_1()); }
-(rule__AttributeCS__QualifiersAssignment_0_1_1)?
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
 rule__AttributeCS__Group_3__0
     @init {
 		int stackSize = keepStackSize();
@@ -7826,29 +7862,29 @@
 
 
 
-rule__AttributeCS__Group_5__0
+rule__AttributeCS__Group_5_0__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__AttributeCS__Group_5__0__Impl
-	rule__AttributeCS__Group_5__1
+	rule__AttributeCS__Group_5_0__0__Impl
+	rule__AttributeCS__Group_5_0__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__Group_5__0__Impl
+rule__AttributeCS__Group_5_0__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()); }
 
 	'{' 
 
-{ after(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()); }
 )
 
 ;
@@ -7857,34 +7893,26 @@
 }
 
 
-rule__AttributeCS__Group_5__1
+rule__AttributeCS__Group_5_0__1
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__AttributeCS__Group_5__1__Impl
-	rule__AttributeCS__Group_5__2
+	rule__AttributeCS__Group_5_0__1__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__Group_5__1__Impl
+rule__AttributeCS__Group_5_0__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-(
-{ before(grammarAccess.getAttributeCSAccess().getGroup_5_1()); }
-(rule__AttributeCS__Group_5_1__0)
-{ after(grammarAccess.getAttributeCSAccess().getGroup_5_1()); }
-)
-(
-{ before(grammarAccess.getAttributeCSAccess().getGroup_5_1()); }
-(rule__AttributeCS__Group_5_1__0)*
-{ after(grammarAccess.getAttributeCSAccess().getGroup_5_1()); }
-)
+{ before(grammarAccess.getAttributeCSAccess().getGroup_5_0_1()); }
+(rule__AttributeCS__Group_5_0_1__0)?
+{ after(grammarAccess.getAttributeCSAccess().getGroup_5_0_1()); }
 )
 
 ;
@@ -7893,28 +7921,31 @@
 }
 
 
-rule__AttributeCS__Group_5__2
+
+
+
+
+rule__AttributeCS__Group_5_0_1__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__AttributeCS__Group_5__2__Impl
+	rule__AttributeCS__Group_5_0_1__0__Impl
+	rule__AttributeCS__Group_5_0_1__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__Group_5__2__Impl
+rule__AttributeCS__Group_5_0_1__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_2()); }
-
-	'}' 
-
-{ after(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_2()); }
+{ before(grammarAccess.getAttributeCSAccess().getAlternatives_5_0_1_0()); }
+(rule__AttributeCS__Alternatives_5_0_1_0)
+{ after(grammarAccess.getAttributeCSAccess().getAlternatives_5_0_1_0()); }
 )
 
 ;
@@ -7923,6 +7954,34 @@
 }
 
 
+rule__AttributeCS__Group_5_0_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_0_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_0_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
 
 
 
@@ -7992,6 +8051,447 @@
 
 
 
+rule__AttributeCS__Group_5_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_2__0__Impl
+	rule__AttributeCS__Group_5_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getAlternatives_5_2_0()); }
+(rule__AttributeCS__Alternatives_5_2_0)
+{ after(grammarAccess.getAttributeCSAccess().getAlternatives_5_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__Group_5_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__AttributeCS__Group_5_3__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_3__0__Impl
+	rule__AttributeCS__Group_5_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_3__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getAlternatives_5_3_0()); }
+(rule__AttributeCS__Alternatives_5_3_0)
+{ after(grammarAccess.getAttributeCSAccess().getAlternatives_5_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__Group_5_3__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_3__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_3__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__AttributeCS__Group_5_4__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_4__0__Impl
+	rule__AttributeCS__Group_5_4__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_4__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getAlternatives_5_4_0()); }
+(rule__AttributeCS__Alternatives_5_4_0)
+{ after(grammarAccess.getAttributeCSAccess().getAlternatives_5_4_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__Group_5_4__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_4__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_4__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__AttributeCS__Group_5_5__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_5__0__Impl
+	rule__AttributeCS__Group_5_5__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_5__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getAlternatives_5_5_0()); }
+(rule__AttributeCS__Alternatives_5_5_0)
+{ after(grammarAccess.getAttributeCSAccess().getAlternatives_5_5_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__Group_5_5__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_5__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_5__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__AttributeCS__Group_5_6__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_6__0__Impl
+	rule__AttributeCS__Group_5_6__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_6__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getAlternatives_5_6_0()); }
+(rule__AttributeCS__Alternatives_5_6_0)
+{ after(grammarAccess.getAttributeCSAccess().getAlternatives_5_6_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__Group_5_6__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_6__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_6__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__AttributeCS__Group_5_7__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_7__0__Impl
+	rule__AttributeCS__Group_5_7__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_7__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getGroup_5_7_0()); }
+(rule__AttributeCS__Group_5_7_0__0)?
+{ after(grammarAccess.getAttributeCSAccess().getGroup_5_7_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__Group_5_7__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_7__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_7__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()); }
+
+	'}' 
+
+{ after(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__AttributeCS__Group_5_7_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_7_0__0__Impl
+	rule__AttributeCS__Group_5_7_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_7_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getAlternatives_5_7_0_0()); }
+(rule__AttributeCS__Alternatives_5_7_0_0)
+{ after(grammarAccess.getAttributeCSAccess().getAlternatives_5_7_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__Group_5_7_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__Group_5_7_0__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AttributeCS__Group_5_7_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
 rule__AttributeCS__Group_6_0__0
     @init {
 		int stackSize = keepStackSize();
@@ -10606,9 +11106,9 @@
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getAlternatives_0()); }
-(rule__OperationCS__Alternatives_0)?
-{ after(grammarAccess.getOperationCSAccess().getAlternatives_0()); }
+{ before(grammarAccess.getOperationCSAccess().getUnorderedGroup_0()); }
+(rule__OperationCS__UnorderedGroup_0)
+{ after(grammarAccess.getOperationCSAccess().getUnorderedGroup_0()); }
 )
 
 ;
@@ -10873,9 +11373,9 @@
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getGroup_9()); }
-(rule__OperationCS__Group_9__0)?
-{ after(grammarAccess.getOperationCSAccess().getGroup_9()); }
+{ before(grammarAccess.getOperationCSAccess().getUnorderedGroup_9()); }
+(rule__OperationCS__UnorderedGroup_9)?
+{ after(grammarAccess.getOperationCSAccess().getUnorderedGroup_9()); }
 )
 
 ;
@@ -10934,128 +11434,6 @@
 
 
 
-rule__OperationCS__Group_0_0__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__OperationCS__Group_0_0__0__Impl
-	rule__OperationCS__Group_0_0__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperationCS__Group_0_0__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_0()); }
-(rule__OperationCS__QualifiersAssignment_0_0_0)
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__OperationCS__Group_0_0__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__OperationCS__Group_0_0__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperationCS__Group_0_0__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_1()); }
-(rule__OperationCS__QualifiersAssignment_0_0_1)?
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-rule__OperationCS__Group_0_1__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__OperationCS__Group_0_1__0__Impl
-	rule__OperationCS__Group_0_1__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperationCS__Group_0_1__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_0()); }
-(rule__OperationCS__QualifiersAssignment_0_1_0)
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__OperationCS__Group_0_1__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__OperationCS__Group_0_1__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperationCS__Group_0_1__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_1()); }
-(rule__OperationCS__QualifiersAssignment_0_1_1)?
-{ after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
 rule__OperationCS__Group_5__0
     @init {
 		int stackSize = keepStackSize();
@@ -11400,29 +11778,29 @@
 
 
 
-rule__OperationCS__Group_9__0
+rule__OperationCS__Group_9_0__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__OperationCS__Group_9__0__Impl
-	rule__OperationCS__Group_9__1
+	rule__OperationCS__Group_9_0__0__Impl
+	rule__OperationCS__Group_9_0__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__OperationCS__Group_9__0__Impl
+rule__OperationCS__Group_9_0__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0()); }
+{ before(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0()); }
 
 	'{' 
 
-{ after(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0()); }
+{ after(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0()); }
 )
 
 ;
@@ -11431,34 +11809,26 @@
 }
 
 
-rule__OperationCS__Group_9__1
+rule__OperationCS__Group_9_0__1
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__OperationCS__Group_9__1__Impl
-	rule__OperationCS__Group_9__2
+	rule__OperationCS__Group_9_0__1__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__OperationCS__Group_9__1__Impl
+rule__OperationCS__Group_9_0__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-(
-{ before(grammarAccess.getOperationCSAccess().getGroup_9_1()); }
-(rule__OperationCS__Group_9_1__0)
-{ after(grammarAccess.getOperationCSAccess().getGroup_9_1()); }
-)
-(
-{ before(grammarAccess.getOperationCSAccess().getGroup_9_1()); }
-(rule__OperationCS__Group_9_1__0)*
-{ after(grammarAccess.getOperationCSAccess().getGroup_9_1()); }
-)
+{ before(grammarAccess.getOperationCSAccess().getGroup_9_0_1()); }
+(rule__OperationCS__Group_9_0_1__0)?
+{ after(grammarAccess.getOperationCSAccess().getGroup_9_0_1()); }
 )
 
 ;
@@ -11467,28 +11837,31 @@
 }
 
 
-rule__OperationCS__Group_9__2
+
+
+
+
+rule__OperationCS__Group_9_0_1__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__OperationCS__Group_9__2__Impl
+	rule__OperationCS__Group_9_0_1__0__Impl
+	rule__OperationCS__Group_9_0_1__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__OperationCS__Group_9__2__Impl
+rule__OperationCS__Group_9_0_1__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2()); }
-
-	'}' 
-
-{ after(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2()); }
+{ before(grammarAccess.getOperationCSAccess().getAlternatives_9_0_1_0()); }
+(rule__OperationCS__Alternatives_9_0_1_0)
+{ after(grammarAccess.getOperationCSAccess().getAlternatives_9_0_1_0()); }
 )
 
 ;
@@ -11497,6 +11870,34 @@
 }
 
 
+rule__OperationCS__Group_9_0_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__Group_9_0_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OperationCS__Group_9_0_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
 
 
 
@@ -11566,6 +11967,132 @@
 
 
 
+rule__OperationCS__Group_9_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__Group_9_2__0__Impl
+	rule__OperationCS__Group_9_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OperationCS__Group_9_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOperationCSAccess().getGroup_9_2_0()); }
+(rule__OperationCS__Group_9_2_0__0)?
+{ after(grammarAccess.getOperationCSAccess().getGroup_9_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OperationCS__Group_9_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__Group_9_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OperationCS__Group_9_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1()); }
+
+	'}' 
+
+{ after(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__OperationCS__Group_9_2_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__Group_9_2_0__0__Impl
+	rule__OperationCS__Group_9_2_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OperationCS__Group_9_2_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOperationCSAccess().getAlternatives_9_2_0_0()); }
+(rule__OperationCS__Alternatives_9_2_0_0)
+{ after(grammarAccess.getOperationCSAccess().getAlternatives_9_2_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OperationCS__Group_9_2_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__Group_9_2_0__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OperationCS__Group_9_2_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
 rule__OperationCS__Group_10_0__0
     @init {
 		int stackSize = keepStackSize();
@@ -12276,9 +12803,9 @@
     }
 :
 (
-{ before(grammarAccess.getParameterCSAccess().getGroup_2()); }
-(rule__ParameterCS__Group_2__0)?
-{ after(grammarAccess.getParameterCSAccess().getGroup_2()); }
+{ before(grammarAccess.getParameterCSAccess().getUnorderedGroup_2()); }
+(rule__ParameterCS__UnorderedGroup_2)?
+{ after(grammarAccess.getParameterCSAccess().getUnorderedGroup_2()); }
 )
 
 ;
@@ -12386,29 +12913,29 @@
 
 
 
-rule__ParameterCS__Group_2__0
+rule__ParameterCS__Group_2_0__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__ParameterCS__Group_2__0__Impl
-	rule__ParameterCS__Group_2__1
+	rule__ParameterCS__Group_2_0__0__Impl
+	rule__ParameterCS__Group_2_0__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__ParameterCS__Group_2__0__Impl
+rule__ParameterCS__Group_2_0__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0()); }
+{ before(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0_0()); }
 
 	'{' 
 
-{ after(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0()); }
+{ after(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0_0()); }
 )
 
 ;
@@ -12417,34 +12944,26 @@
 }
 
 
-rule__ParameterCS__Group_2__1
+rule__ParameterCS__Group_2_0__1
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__ParameterCS__Group_2__1__Impl
-	rule__ParameterCS__Group_2__2
+	rule__ParameterCS__Group_2_0__1__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__ParameterCS__Group_2__1__Impl
+rule__ParameterCS__Group_2_0__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-(
-{ before(grammarAccess.getParameterCSAccess().getGroup_2_1()); }
-(rule__ParameterCS__Group_2_1__0)
-{ after(grammarAccess.getParameterCSAccess().getGroup_2_1()); }
-)
-(
-{ before(grammarAccess.getParameterCSAccess().getGroup_2_1()); }
-(rule__ParameterCS__Group_2_1__0)*
-{ after(grammarAccess.getParameterCSAccess().getGroup_2_1()); }
-)
+{ before(grammarAccess.getParameterCSAccess().getGroup_2_0_1()); }
+(rule__ParameterCS__Group_2_0_1__0)?
+{ after(grammarAccess.getParameterCSAccess().getGroup_2_0_1()); }
 )
 
 ;
@@ -12453,28 +12972,31 @@
 }
 
 
-rule__ParameterCS__Group_2__2
+
+
+
+
+rule__ParameterCS__Group_2_0_1__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__ParameterCS__Group_2__2__Impl
+	rule__ParameterCS__Group_2_0_1__0__Impl
+	rule__ParameterCS__Group_2_0_1__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__ParameterCS__Group_2__2__Impl
+rule__ParameterCS__Group_2_0_1__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_2()); }
-
-	'}' 
-
-{ after(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_2()); }
+{ before(grammarAccess.getParameterCSAccess().getAlternatives_2_0_1_0()); }
+(rule__ParameterCS__Alternatives_2_0_1_0)
+{ after(grammarAccess.getParameterCSAccess().getAlternatives_2_0_1_0()); }
 )
 
 ;
@@ -12483,6 +13005,34 @@
 }
 
 
+rule__ParameterCS__Group_2_0_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ParameterCS__Group_2_0_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ParameterCS__Group_2_0_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getParameterCSAccess().getCommaKeyword_2_0_1_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getParameterCSAccess().getCommaKeyword_2_0_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
 
 
 
@@ -12507,9 +13057,9 @@
     }
 :
 (
-{ before(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0()); }
-(rule__ParameterCS__Alternatives_2_1_0)
-{ after(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0()); }
+{ before(grammarAccess.getParameterCSAccess().getGroup_2_1_0()); }
+(rule__ParameterCS__Group_2_1_0__0)?
+{ after(grammarAccess.getParameterCSAccess().getGroup_2_1_0()); }
 )
 
 ;
@@ -12535,11 +13085,74 @@
     }
 :
 (
-{ before(grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_1()); }
+{ before(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_1_1()); }
+
+	'}' 
+
+{ after(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ParameterCS__Group_2_1_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ParameterCS__Group_2_1_0__0__Impl
+	rule__ParameterCS__Group_2_1_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ParameterCS__Group_2_1_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0_0()); }
+(rule__ParameterCS__Alternatives_2_1_0_0)
+{ after(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ParameterCS__Group_2_1_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ParameterCS__Group_2_1_0__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ParameterCS__Group_2_1_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_0_1()); }
 (
 	',' 
 )?
-{ after(grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_1()); }
+{ after(grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_0_1()); }
 )
 
 ;
@@ -12666,9 +13279,9 @@
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getAlternatives_0()); }
-(rule__ReferenceCS__Alternatives_0)?
-{ after(grammarAccess.getReferenceCSAccess().getAlternatives_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0()); }
+(rule__ReferenceCS__UnorderedGroup_0)
+{ after(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0()); }
 )
 
 ;
@@ -12842,9 +13455,9 @@
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getGroup_6()); }
-(rule__ReferenceCS__Group_6__0)?
-{ after(grammarAccess.getReferenceCSAccess().getGroup_6()); }
+{ before(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()); }
+(rule__ReferenceCS__UnorderedGroup_6)?
+{ after(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()); }
 )
 
 ;
@@ -12897,128 +13510,6 @@
 
 
 
-rule__ReferenceCS__Group_0_0__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__ReferenceCS__Group_0_0__0__Impl
-	rule__ReferenceCS__Group_0_0__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__Group_0_0__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_0()); }
-(rule__ReferenceCS__QualifiersAssignment_0_0_0)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__ReferenceCS__Group_0_0__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__ReferenceCS__Group_0_0__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__Group_0_0__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_1()); }
-(rule__ReferenceCS__QualifiersAssignment_0_0_1)?
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-rule__ReferenceCS__Group_0_1__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__ReferenceCS__Group_0_1__0__Impl
-	rule__ReferenceCS__Group_0_1__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__Group_0_1__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_0()); }
-(rule__ReferenceCS__QualifiersAssignment_0_1_0)
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__ReferenceCS__Group_0_1__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__ReferenceCS__Group_0_1__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__Group_0_1__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_1()); }
-(rule__ReferenceCS__QualifiersAssignment_0_1_1)?
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
 rule__ReferenceCS__Group_3__0
     @init {
 		int stackSize = keepStackSize();
@@ -13208,29 +13699,29 @@
 
 
 
-rule__ReferenceCS__Group_6__0
+rule__ReferenceCS__Group_6_0__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__ReferenceCS__Group_6__0__Impl
-	rule__ReferenceCS__Group_6__1
+	rule__ReferenceCS__Group_6_0__0__Impl
+	rule__ReferenceCS__Group_6_0__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__Group_6__0__Impl
+rule__ReferenceCS__Group_6_0__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()); }
 
 	'{' 
 
-{ after(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()); }
 )
 
 ;
@@ -13239,34 +13730,26 @@
 }
 
 
-rule__ReferenceCS__Group_6__1
+rule__ReferenceCS__Group_6_0__1
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__ReferenceCS__Group_6__1__Impl
-	rule__ReferenceCS__Group_6__2
+	rule__ReferenceCS__Group_6_0__1__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__Group_6__1__Impl
+rule__ReferenceCS__Group_6_0__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-(
-{ before(grammarAccess.getReferenceCSAccess().getGroup_6_1()); }
-(rule__ReferenceCS__Group_6_1__0)
-{ after(grammarAccess.getReferenceCSAccess().getGroup_6_1()); }
-)
-(
-{ before(grammarAccess.getReferenceCSAccess().getGroup_6_1()); }
-(rule__ReferenceCS__Group_6_1__0)*
-{ after(grammarAccess.getReferenceCSAccess().getGroup_6_1()); }
-)
+{ before(grammarAccess.getReferenceCSAccess().getGroup_6_0_1()); }
+(rule__ReferenceCS__Group_6_0_1__0)?
+{ after(grammarAccess.getReferenceCSAccess().getGroup_6_0_1()); }
 )
 
 ;
@@ -13275,28 +13758,31 @@
 }
 
 
-rule__ReferenceCS__Group_6__2
+
+
+
+
+rule__ReferenceCS__Group_6_0_1__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__ReferenceCS__Group_6__2__Impl
+	rule__ReferenceCS__Group_6_0_1__0__Impl
+	rule__ReferenceCS__Group_6_0_1__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__Group_6__2__Impl
+rule__ReferenceCS__Group_6_0_1__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_2()); }
-
-	'}' 
-
-{ after(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_2()); }
+{ before(grammarAccess.getReferenceCSAccess().getAlternatives_6_0_1_0()); }
+(rule__ReferenceCS__Alternatives_6_0_1_0)
+{ after(grammarAccess.getReferenceCSAccess().getAlternatives_6_0_1_0()); }
 )
 
 ;
@@ -13305,6 +13791,34 @@
 }
 
 
+rule__ReferenceCS__Group_6_0_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_0_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_0_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
 
 
 
@@ -13374,6 +13888,510 @@
 
 
 
+rule__ReferenceCS__Group_6_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_2__0__Impl
+	rule__ReferenceCS__Group_6_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getAlternatives_6_2_0()); }
+(rule__ReferenceCS__Alternatives_6_2_0)
+{ after(grammarAccess.getReferenceCSAccess().getAlternatives_6_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__Group_6_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ReferenceCS__Group_6_3__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_3__0__Impl
+	rule__ReferenceCS__Group_6_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_3__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getAlternatives_6_3_0()); }
+(rule__ReferenceCS__Alternatives_6_3_0)
+{ after(grammarAccess.getReferenceCSAccess().getAlternatives_6_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__Group_6_3__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_3__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_3__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ReferenceCS__Group_6_4__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_4__0__Impl
+	rule__ReferenceCS__Group_6_4__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_4__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getAlternatives_6_4_0()); }
+(rule__ReferenceCS__Alternatives_6_4_0)
+{ after(grammarAccess.getReferenceCSAccess().getAlternatives_6_4_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__Group_6_4__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_4__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_4__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ReferenceCS__Group_6_5__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_5__0__Impl
+	rule__ReferenceCS__Group_6_5__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_5__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getAlternatives_6_5_0()); }
+(rule__ReferenceCS__Alternatives_6_5_0)
+{ after(grammarAccess.getReferenceCSAccess().getAlternatives_6_5_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__Group_6_5__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_5__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_5__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ReferenceCS__Group_6_6__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_6__0__Impl
+	rule__ReferenceCS__Group_6_6__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_6__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getAlternatives_6_6_0()); }
+(rule__ReferenceCS__Alternatives_6_6_0)
+{ after(grammarAccess.getReferenceCSAccess().getAlternatives_6_6_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__Group_6_6__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_6__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_6__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ReferenceCS__Group_6_7__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_7__0__Impl
+	rule__ReferenceCS__Group_6_7__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_7__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getAlternatives_6_7_0()); }
+(rule__ReferenceCS__Alternatives_6_7_0)
+{ after(grammarAccess.getReferenceCSAccess().getAlternatives_6_7_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__Group_6_7__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_7__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_7__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ReferenceCS__Group_6_8__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_8__0__Impl
+	rule__ReferenceCS__Group_6_8__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_8__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getGroup_6_8_0()); }
+(rule__ReferenceCS__Group_6_8_0__0)?
+{ after(grammarAccess.getReferenceCSAccess().getGroup_6_8_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__Group_6_8__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_8__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_8__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()); }
+
+	'}' 
+
+{ after(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ReferenceCS__Group_6_8_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_8_0__0__Impl
+	rule__ReferenceCS__Group_6_8_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_8_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getAlternatives_6_8_0_0()); }
+(rule__ReferenceCS__Alternatives_6_8_0_0)
+{ after(grammarAccess.getReferenceCSAccess().getAlternatives_6_8_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__Group_6_8_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__Group_6_8_0__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ReferenceCS__Group_6_8_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()); }
+(
+	',' 
+)?
+{ after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
 rule__ReferenceCS__Group_7_0__0
     @init {
 		int stackSize = keepStackSize();
@@ -22905,6 +23923,1130 @@
 
 
 
+rule__AttributeCS__UnorderedGroup_0
+    @init {
+    	int stackSize = keepStackSize();
+		getUnorderedGroupHelper().enter(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+    }
+:
+	rule__AttributeCS__UnorderedGroup_0__0
+	?
+	
+;
+finally {
+	getUnorderedGroupHelper().leave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_0__Impl
+	@init {
+		int stackSize = keepStackSize();
+		boolean selected = false;
+    }
+:
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getIsStaticAssignment_0_0()); }
+						(rule__AttributeCS__IsStaticAssignment_0_0)
+						{ after(grammarAccess.getAttributeCSAccess().getIsStaticAssignment_0_0()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getIsDefinitionAssignment_0_1()); }
+						(rule__AttributeCS__IsDefinitionAssignment_0_1)
+						{ after(grammarAccess.getAttributeCSAccess().getIsDefinitionAssignment_0_1()); }
+					)
+ 				)
+			)  
+
+		)
+;
+finally {
+	if (selected)
+		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_0__Impl
+	rule__AttributeCS__UnorderedGroup_0__1?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_0__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__AttributeCS__UnorderedGroup_5
+    @init {
+    	int stackSize = keepStackSize();
+		getUnorderedGroupHelper().enter(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+    }
+:
+	rule__AttributeCS__UnorderedGroup_5__0
+	
+	{getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5())}?
+	
+;
+finally {
+	getUnorderedGroupHelper().leave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_5__Impl
+	@init {
+		int stackSize = keepStackSize();
+		boolean selected = false;
+    }
+:
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getGroup_5_0()); }
+						(rule__AttributeCS__Group_5_0__0)
+						{ after(grammarAccess.getAttributeCSAccess().getGroup_5_0()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getGroup_5_1()); }
+						(rule__AttributeCS__Group_5_1__0)
+						{ after(grammarAccess.getAttributeCSAccess().getGroup_5_1()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getGroup_5_2()); }
+						(rule__AttributeCS__Group_5_2__0)
+						{ after(grammarAccess.getAttributeCSAccess().getGroup_5_2()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getGroup_5_3()); }
+						(rule__AttributeCS__Group_5_3__0)
+						{ after(grammarAccess.getAttributeCSAccess().getGroup_5_3()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getGroup_5_4()); }
+						(rule__AttributeCS__Group_5_4__0)
+						{ after(grammarAccess.getAttributeCSAccess().getGroup_5_4()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getGroup_5_5()); }
+						(rule__AttributeCS__Group_5_5__0)
+						{ after(grammarAccess.getAttributeCSAccess().getGroup_5_5()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getGroup_5_6()); }
+						(rule__AttributeCS__Group_5_6__0)
+						{ after(grammarAccess.getAttributeCSAccess().getGroup_5_6()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getAttributeCSAccess().getGroup_5_7()); }
+						(rule__AttributeCS__Group_5_7__0)
+						{ after(grammarAccess.getAttributeCSAccess().getGroup_5_7()); }
+					)
+ 				)
+			)  
+
+		)
+;
+finally {
+	if (selected)
+		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_5__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_5__Impl
+	rule__AttributeCS__UnorderedGroup_5__1?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_5__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_5__Impl
+	rule__AttributeCS__UnorderedGroup_5__2?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_5__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_5__Impl
+	rule__AttributeCS__UnorderedGroup_5__3?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_5__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_5__Impl
+	rule__AttributeCS__UnorderedGroup_5__4?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_5__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_5__Impl
+	rule__AttributeCS__UnorderedGroup_5__5?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_5__5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_5__Impl
+	rule__AttributeCS__UnorderedGroup_5__6?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_5__6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_5__Impl
+	rule__AttributeCS__UnorderedGroup_5__7?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AttributeCS__UnorderedGroup_5__7
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__AttributeCS__UnorderedGroup_5__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+rule__OperationCS__UnorderedGroup_0
+    @init {
+    	int stackSize = keepStackSize();
+		getUnorderedGroupHelper().enter(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+    }
+:
+	rule__OperationCS__UnorderedGroup_0__0
+	?
+	
+;
+finally {
+	getUnorderedGroupHelper().leave(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+	restoreStackSize(stackSize);
+}
+
+
+rule__OperationCS__UnorderedGroup_0__Impl
+	@init {
+		int stackSize = keepStackSize();
+		boolean selected = false;
+    }
+:
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getOperationCSAccess().getIsStaticAssignment_0_0()); }
+						(rule__OperationCS__IsStaticAssignment_0_0)
+						{ after(grammarAccess.getOperationCSAccess().getIsStaticAssignment_0_0()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getOperationCSAccess().getIsDefinitionAssignment_0_1()); }
+						(rule__OperationCS__IsDefinitionAssignment_0_1)
+						{ after(grammarAccess.getOperationCSAccess().getIsDefinitionAssignment_0_1()); }
+					)
+ 				)
+			)  
+
+		)
+;
+finally {
+	if (selected)
+		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+	restoreStackSize(stackSize);
+}
+
+
+rule__OperationCS__UnorderedGroup_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__UnorderedGroup_0__Impl
+	rule__OperationCS__UnorderedGroup_0__1?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OperationCS__UnorderedGroup_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__UnorderedGroup_0__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__OperationCS__UnorderedGroup_9
+    @init {
+    	int stackSize = keepStackSize();
+		getUnorderedGroupHelper().enter(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+    }
+:
+	rule__OperationCS__UnorderedGroup_9__0
+	
+	{getUnorderedGroupHelper().canLeave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9())}?
+	
+;
+finally {
+	getUnorderedGroupHelper().leave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+	restoreStackSize(stackSize);
+}
+
+
+rule__OperationCS__UnorderedGroup_9__Impl
+	@init {
+		int stackSize = keepStackSize();
+		boolean selected = false;
+    }
+:
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getOperationCSAccess().getGroup_9_0()); }
+						(rule__OperationCS__Group_9_0__0)
+						{ after(grammarAccess.getOperationCSAccess().getGroup_9_0()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getOperationCSAccess().getGroup_9_1()); }
+						(rule__OperationCS__Group_9_1__0)
+						{ after(grammarAccess.getOperationCSAccess().getGroup_9_1()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getOperationCSAccess().getGroup_9_2()); }
+						(rule__OperationCS__Group_9_2__0)
+						{ after(grammarAccess.getOperationCSAccess().getGroup_9_2()); }
+					)
+ 				)
+			)  
+
+		)
+;
+finally {
+	if (selected)
+		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+	restoreStackSize(stackSize);
+}
+
+
+rule__OperationCS__UnorderedGroup_9__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__UnorderedGroup_9__Impl
+	rule__OperationCS__UnorderedGroup_9__1?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OperationCS__UnorderedGroup_9__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__UnorderedGroup_9__Impl
+	rule__OperationCS__UnorderedGroup_9__2?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OperationCS__UnorderedGroup_9__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OperationCS__UnorderedGroup_9__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__ParameterCS__UnorderedGroup_2
+    @init {
+    	int stackSize = keepStackSize();
+		getUnorderedGroupHelper().enter(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+    }
+:
+	rule__ParameterCS__UnorderedGroup_2__0
+	
+	{getUnorderedGroupHelper().canLeave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2())}?
+	
+;
+finally {
+	getUnorderedGroupHelper().leave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+	restoreStackSize(stackSize);
+}
+
+
+rule__ParameterCS__UnorderedGroup_2__Impl
+	@init {
+		int stackSize = keepStackSize();
+		boolean selected = false;
+    }
+:
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getParameterCSAccess().getGroup_2_0()); }
+						(rule__ParameterCS__Group_2_0__0)
+						{ after(grammarAccess.getParameterCSAccess().getGroup_2_0()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getParameterCSAccess().getGroup_2_1()); }
+						(rule__ParameterCS__Group_2_1__0)
+						{ after(grammarAccess.getParameterCSAccess().getGroup_2_1()); }
+					)
+ 				)
+			)  
+
+		)
+;
+finally {
+	if (selected)
+		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+	restoreStackSize(stackSize);
+}
+
+
+rule__ParameterCS__UnorderedGroup_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ParameterCS__UnorderedGroup_2__Impl
+	rule__ParameterCS__UnorderedGroup_2__1?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ParameterCS__UnorderedGroup_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ParameterCS__UnorderedGroup_2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ReferenceCS__UnorderedGroup_0
+    @init {
+    	int stackSize = keepStackSize();
+		getUnorderedGroupHelper().enter(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_0__0
+	?
+	
+;
+finally {
+	getUnorderedGroupHelper().leave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_0__Impl
+	@init {
+		int stackSize = keepStackSize();
+		boolean selected = false;
+    }
+:
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getIsStaticAssignment_0_0()); }
+						(rule__ReferenceCS__IsStaticAssignment_0_0)
+						{ after(grammarAccess.getReferenceCSAccess().getIsStaticAssignment_0_0()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getIsDefinitionAssignment_0_1()); }
+						(rule__ReferenceCS__IsDefinitionAssignment_0_1)
+						{ after(grammarAccess.getReferenceCSAccess().getIsDefinitionAssignment_0_1()); }
+					)
+ 				)
+			)  
+
+		)
+;
+finally {
+	if (selected)
+		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_0__Impl
+	rule__ReferenceCS__UnorderedGroup_0__1?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_0__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ReferenceCS__UnorderedGroup_6
+    @init {
+    	int stackSize = keepStackSize();
+		getUnorderedGroupHelper().enter(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__0
+	
+	{getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6())}?
+	
+;
+finally {
+	getUnorderedGroupHelper().leave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__Impl
+	@init {
+		int stackSize = keepStackSize();
+		boolean selected = false;
+    }
+:
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getGroup_6_0()); }
+						(rule__ReferenceCS__Group_6_0__0)
+						{ after(grammarAccess.getReferenceCSAccess().getGroup_6_0()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getGroup_6_1()); }
+						(rule__ReferenceCS__Group_6_1__0)
+						{ after(grammarAccess.getReferenceCSAccess().getGroup_6_1()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getGroup_6_2()); }
+						(rule__ReferenceCS__Group_6_2__0)
+						{ after(grammarAccess.getReferenceCSAccess().getGroup_6_2()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getGroup_6_3()); }
+						(rule__ReferenceCS__Group_6_3__0)
+						{ after(grammarAccess.getReferenceCSAccess().getGroup_6_3()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getGroup_6_4()); }
+						(rule__ReferenceCS__Group_6_4__0)
+						{ after(grammarAccess.getReferenceCSAccess().getGroup_6_4()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getGroup_6_5()); }
+						(rule__ReferenceCS__Group_6_5__0)
+						{ after(grammarAccess.getReferenceCSAccess().getGroup_6_5()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getGroup_6_6()); }
+						(rule__ReferenceCS__Group_6_6__0)
+						{ after(grammarAccess.getReferenceCSAccess().getGroup_6_6()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getGroup_6_7()); }
+						(rule__ReferenceCS__Group_6_7__0)
+						{ after(grammarAccess.getReferenceCSAccess().getGroup_6_7()); }
+					)
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8);
+	 				}
+	 				{
+	 				  selected = true;
+	 				}
+					(
+					
+						{ before(grammarAccess.getReferenceCSAccess().getGroup_6_8()); }
+						(rule__ReferenceCS__Group_6_8__0)
+						{ after(grammarAccess.getReferenceCSAccess().getGroup_6_8()); }
+					)
+ 				)
+			)  
+
+		)
+;
+finally {
+	if (selected)
+		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__Impl
+	rule__ReferenceCS__UnorderedGroup_6__1?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__Impl
+	rule__ReferenceCS__UnorderedGroup_6__2?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__Impl
+	rule__ReferenceCS__UnorderedGroup_6__3?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__Impl
+	rule__ReferenceCS__UnorderedGroup_6__4?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__Impl
+	rule__ReferenceCS__UnorderedGroup_6__5?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__Impl
+	rule__ReferenceCS__UnorderedGroup_6__6?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__Impl
+	rule__ReferenceCS__UnorderedGroup_6__7?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__7
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__Impl
+	rule__ReferenceCS__UnorderedGroup_6__8?
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ReferenceCS__UnorderedGroup_6__8
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ReferenceCS__UnorderedGroup_6__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 rule__TopLevelCS__OwnedLibrariesAssignment_2
     @init {
 		int stackSize = keepStackSize();
@@ -23268,22 +25410,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_0_0_0
+rule__AttributeCS__IsStaticAssignment_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 
 	'static' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 )
 
 ;
@@ -23291,68 +25433,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_0_0_1
+rule__AttributeCS__IsDefinitionAssignment_0_1
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 
 	'definition' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_0_1_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-
-	'definition' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_0_1_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
-
-	'static' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 )
 
 ;
@@ -23405,22 +25501,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_5_1_0_0
+rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0()); }
 
 	'derived' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0()); }
 )
 
 ;
@@ -23428,45 +25524,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_5_1_0_1
+rule__AttributeCS__IsIdAssignment_5_1_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0()); }
-
-	'!derived' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_5_1_0_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0()); }
 
 	'id' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0()); }
 )
 
 ;
@@ -23474,45 +25547,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_5_1_0_3
+rule__AttributeCS__IsOrderedAssignment_5_2_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0()); }
-
-	'!id' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_5_1_0_4
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0()); }
 
 	'ordered' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0()); }
 )
 
 ;
@@ -23520,45 +25570,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_5_1_0_5
+rule__AttributeCS__IsReadonlyAssignment_5_3_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0()); }
-
-	'!ordered' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_5_1_0_6
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0()); }
 
 	'readonly' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0()); }
 )
 
 ;
@@ -23566,45 +25593,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_5_1_0_7
+rule__AttributeCS__IsTransientAssignment_5_4_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0()); }
-
-	'!readonly' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_5_1_0_8
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0()); }
 
 	'transient' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0()); }
 )
 
 ;
@@ -23612,68 +25616,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_5_1_0_9
+rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0()); }
-
-	'!transient' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_5_1_0_10
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0()); }
-
-	'unique' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_5_1_0_11
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0()); }
 
 	'!unique' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0()); }
 )
 
 ;
@@ -23681,22 +25639,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_5_1_0_12
+rule__AttributeCS__IsUnsettableAssignment_5_6_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0()); }
 
 	'unsettable' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0()); }
 )
 
 ;
@@ -23704,68 +25662,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__AttributeCS__QualifiersAssignment_5_1_0_13
+rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0()); }
 (
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0()); }
-
-	'!unsettable' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_5_1_0_14
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0()); }
+{ before(grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0()); }
 
 	'volatile' 
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0()); }
 )
 
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AttributeCS__QualifiersAssignment_5_1_0_15
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0()); }
-(
-{ before(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0()); }
-
-	'!volatile' 
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0()); }
-)
-
-{ after(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0()); }
+{ after(grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0()); }
 )
 
 ;
@@ -24291,22 +26203,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__OperationCS__QualifiersAssignment_0_0_0
+rule__OperationCS__IsStaticAssignment_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 
 	'static' 
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 )
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 )
 
 ;
@@ -24314,68 +26226,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__OperationCS__QualifiersAssignment_0_0_1
+rule__OperationCS__IsDefinitionAssignment_0_1
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 
 	'definition' 
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 )
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperationCS__QualifiersAssignment_0_1_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-
-	'definition' 
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-)
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperationCS__QualifiersAssignment_0_1_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
-
-	'static' 
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
-)
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 )
 
 ;
@@ -24488,22 +26354,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__OperationCS__QualifiersAssignment_9_1_0_0
+rule__OperationCS__IsDerivedAssignment_9_0_1_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0()); }
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0()); }
 
 	'derived' 
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0()); }
 )
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0()); }
 )
 
 ;
@@ -24511,45 +26377,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__OperationCS__QualifiersAssignment_9_1_0_1
+rule__OperationCS__IsOrderedAssignment_9_1_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0()); }
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0()); }
-
-	'!derived' 
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0()); }
-)
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperationCS__QualifiersAssignment_9_1_0_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0()); }
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0()); }
 
 	'ordered' 
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0()); }
 )
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0()); }
 )
 
 ;
@@ -24557,68 +26400,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__OperationCS__QualifiersAssignment_9_1_0_3
+rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0()); }
 (
-{ before(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0()); }
-
-	'!ordered' 
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0()); }
-)
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperationCS__QualifiersAssignment_9_1_0_4
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0()); }
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0()); }
-
-	'unique' 
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0()); }
-)
-
-{ after(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperationCS__QualifiersAssignment_9_1_0_5
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0()); }
-(
-{ before(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0()); }
+{ before(grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0()); }
 
 	'!unique' 
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0()); }
 )
 
-{ after(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0()); }
+{ after(grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0()); }
 )
 
 ;
@@ -24806,22 +26603,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ParameterCS__QualifiersAssignment_2_1_0_0
+rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0()); }
+{ before(grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0()); }
 (
-{ before(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0()); }
+{ before(grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0()); }
 
 	'ordered' 
 
-{ after(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0()); }
+{ after(grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0()); }
 )
 
-{ after(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0()); }
+{ after(grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0()); }
 )
 
 ;
@@ -24829,68 +26626,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ParameterCS__QualifiersAssignment_2_1_0_1
+rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0()); }
+{ before(grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0()); }
 (
-{ before(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0()); }
-
-	'!ordered' 
-
-{ after(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0()); }
-)
-
-{ after(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ParameterCS__QualifiersAssignment_2_1_0_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0()); }
-(
-{ before(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0()); }
-
-	'unique' 
-
-{ after(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0()); }
-)
-
-{ after(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ParameterCS__QualifiersAssignment_2_1_0_3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0()); }
-(
-{ before(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0()); }
+{ before(grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0()); }
 
 	'!unique' 
 
-{ after(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0()); }
+{ after(grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0()); }
 )
 
-{ after(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0()); }
+{ after(grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0()); }
 )
 
 ;
@@ -24913,22 +26664,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_0_0_0
+rule__ReferenceCS__IsStaticAssignment_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 
 	'static' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0()); }
 )
 
 ;
@@ -24936,68 +26687,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_0_0_1
+rule__ReferenceCS__IsDefinitionAssignment_0_1
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 
 	'definition' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_0_1_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-
-	'definition' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_0_1_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
-
-	'static' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); }
 )
 
 ;
@@ -25069,22 +26774,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_6_1_0_0
+rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0()); }
 
 	'composes' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0()); }
 )
 
 ;
@@ -25092,45 +26797,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_6_1_0_1
+rule__ReferenceCS__IsDerivedAssignment_6_1_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0()); }
-
-	'!composes' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_6_1_0_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0()); }
 
 	'derived' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0()); }
 )
 
 ;
@@ -25138,45 +26820,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_6_1_0_3
+rule__ReferenceCS__IsOrderedAssignment_6_2_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0()); }
-
-	'!derived' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_6_1_0_4
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0()); }
 
 	'ordered' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0()); }
 )
 
 ;
@@ -25184,45 +26843,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_6_1_0_5
+rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0()); }
-
-	'!ordered' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_6_1_0_6
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0()); }
 
 	'readonly' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0()); }
 )
 
 ;
@@ -25230,45 +26866,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_6_1_0_7
+rule__ReferenceCS__IsResolveAssignment_6_4_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0()); }
-
-	'!readonly' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_6_1_0_8
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0()); }
 
 	'resolve' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0()); }
 )
 
 ;
@@ -25276,45 +26889,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_6_1_0_9
+rule__ReferenceCS__IsTransientAssignment_6_5_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0()); }
-
-	'!resolve' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_6_1_0_10
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0()); }
 
 	'transient' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0()); }
 )
 
 ;
@@ -25322,68 +26912,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_6_1_0_11
+rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0()); }
-
-	'!transient' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_6_1_0_12
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0()); }
-
-	'unique' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_6_1_0_13
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0()); }
 
 	'!unique' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0()); }
 )
 
 ;
@@ -25391,22 +26935,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_6_1_0_14
+rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0()); }
 
 	'unsettable' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0()); }
 )
 
 ;
@@ -25414,68 +26958,22 @@
 	restoreStackSize(stackSize);
 }
 
-rule__ReferenceCS__QualifiersAssignment_6_1_0_15
+rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0()); }
 (
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0()); }
-
-	'!unsettable' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_6_1_0_16
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0()); }
+{ before(grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0()); }
 
 	'volatile' 
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0()); }
 )
 
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ReferenceCS__QualifiersAssignment_6_1_0_17
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0()); }
-(
-{ before(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0()); }
-
-	'!volatile' 
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0()); }
-)
-
-{ after(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0()); }
+{ after(grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0()); }
 )
 
 ;
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.tokens b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.tokens
index d41b23c..d3e740d 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.tokens
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.tokens
@@ -1,61 +1,61 @@
-'!composes'=129
-'!derived'=120
-'!id'=121
-'!ordered'=122
-'!readonly'=123
-'!resolve'=130
-'!serializable'=54
-'!transient'=124
-'!unique'=125
-'!unsettable'=126
-'!volatile'=127
-'#'=101
-'&&'=119
-'('=95
-')'=96
-'*'=63
-'+'=65
-'++'=104
-','=98
-'-'=61
-'->'=77
-'.'=76
-'..'=103
-'/'=64
-':'=97
-'::'=102
-'::*'=128
+'!composes'=62
+'!derived'=54
+'!id'=55
+'!ordered'=56
+'!readonly'=57
+'!resolve'=63
+'!serializable'=61
+'!transient'=58
+'!unique'=129
+'!unsettable'=59
+'!volatile'=60
+'#'=110
+'&&'=128
+'('=104
+')'=105
+'*'=72
+'+'=74
+'++'=113
+','=107
+'-'=70
+'->'=86
+'.'=85
+'..'=112
+'/'=73
+':'=106
+'::'=111
+'::*'=130
 ';'=53
-'<'=67
-'<='=69
-'<>'=71
-'='=70
-'>'=66
-'>='=68
-'?'=94
-'?->'=79
-'?.'=78
+'<'=76
+'<='=78
+'<>'=80
+'='=79
+'>'=75
+'>='=77
+'?'=103
+'?->'=88
+'?.'=87
 '@'=133
-'Bag'=90
-'Boolean'=81
-'Collection'=92
-'Integer'=82
-'Lambda'=105
-'OclAny'=86
-'OclInvalid'=87
-'OclVoid'=88
-'OrderedSet'=93
-'Real'=83
-'Sequence'=91
-'Set'=89
-'String'=84
-'Tuple'=80
-'UnlimitedNatural'=85
-'['=109
-']'=110
+'Bag'=99
+'Boolean'=90
+'Collection'=101
+'Integer'=91
+'Lambda'=114
+'OclAny'=95
+'OclInvalid'=96
+'OclVoid'=97
+'OrderedSet'=102
+'Real'=92
+'Sequence'=100
+'Set'=98
+'String'=93
+'Tuple'=89
+'UnlimitedNatural'=94
+'['=118
+']'=119
 'abstract'=17
-'and'=72
-'annotation'=55
+'and'=81
+'annotation'=64
 'attribute'=18
 'body'=19
 'callable'=20
@@ -65,57 +65,57 @@
 'definition'=24
 'derivation'=25
 'derived'=26
-'documentation'=56
-'else'=114
-'elseif'=116
-'endif'=115
+'documentation'=65
+'else'=123
+'elseif'=125
+'endif'=124
 'enum'=27
 'extends'=28
 'false'=132
 'id'=29
-'if'=112
-'implies'=75
+'if'=121
+'implies'=84
 'import'=30
-'in'=111
+'in'=120
 'initial'=31
 'interface'=32
-'invalid'=106
-'invariant'=57
+'invalid'=115
+'invariant'=66
 'key'=33
-'let'=117
+'let'=126
 'library'=34
-'literal'=58
+'literal'=67
 'module'=35
-'not'=62
-'null'=107
+'not'=71
+'null'=116
 'operation'=36
-'or'=73
+'or'=82
 'ordered'=37
 'package'=38
 'postcondition'=39
-'pre'=108
+'pre'=117
 'precondition'=40
 'primitive'=41
 'property'=42
 'readonly'=43
 'reference'=44
 'resolve'=45
-'self'=118
-'serializable'=59
+'self'=127
+'serializable'=68
 'static'=46
 'super'=47
-'sysml'=60
-'then'=113
+'sysml'=69
+'then'=122
 'throws'=48
 'transient'=49
 'true'=131
 'unique'=50
 'unsettable'=51
 'volatile'=52
-'xor'=74
-'{'=99
+'xor'=83
+'{'=108
 '|'=134
-'}'=100
+'}'=109
 RULE_ANY_OTHER=16
 RULE_DOUBLE_QUOTED_STRING=12
 RULE_ESCAPED_CHARACTER=10
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcoreLexer.java b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcoreLexer.java
index 5105f63..8d1cddf 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcoreLexer.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcoreLexer.java
@@ -939,10 +939,10 @@
         try {
             int _type = T__54;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:48:7: ( '!serializable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:48:9: '!serializable'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:48:7: ( '!derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:48:9: '!derived'
             {
-            match("!serializable"); 
+            match("!derived"); 
 
 
             }
@@ -960,10 +960,10 @@
         try {
             int _type = T__55;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:49:7: ( 'annotation' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:49:9: 'annotation'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:49:7: ( '!id' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:49:9: '!id'
             {
-            match("annotation"); 
+            match("!id"); 
 
 
             }
@@ -981,10 +981,10 @@
         try {
             int _type = T__56;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:50:7: ( 'documentation' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:50:9: 'documentation'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:50:7: ( '!ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:50:9: '!ordered'
             {
-            match("documentation"); 
+            match("!ordered"); 
 
 
             }
@@ -1002,10 +1002,10 @@
         try {
             int _type = T__57;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:51:7: ( 'invariant' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:51:9: 'invariant'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:51:7: ( '!readonly' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:51:9: '!readonly'
             {
-            match("invariant"); 
+            match("!readonly"); 
 
 
             }
@@ -1023,10 +1023,10 @@
         try {
             int _type = T__58;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:52:7: ( 'literal' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:52:9: 'literal'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:52:7: ( '!transient' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:52:9: '!transient'
             {
-            match("literal"); 
+            match("!transient"); 
 
 
             }
@@ -1044,10 +1044,10 @@
         try {
             int _type = T__59;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:53:7: ( 'serializable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:53:9: 'serializable'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:53:7: ( '!unsettable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:53:9: '!unsettable'
             {
-            match("serializable"); 
+            match("!unsettable"); 
 
 
             }
@@ -1065,10 +1065,10 @@
         try {
             int _type = T__60;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:54:7: ( 'sysml' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:54:9: 'sysml'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:54:7: ( '!volatile' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:54:9: '!volatile'
             {
-            match("sysml"); 
+            match("!volatile"); 
 
 
             }
@@ -1086,10 +1086,11 @@
         try {
             int _type = T__61;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:55:7: ( '-' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:55:9: '-'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:55:7: ( '!serializable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:55:9: '!serializable'
             {
-            match('-'); 
+            match("!serializable"); 
+
 
             }
 
@@ -1106,10 +1107,10 @@
         try {
             int _type = T__62;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:56:7: ( 'not' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:56:9: 'not'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:56:7: ( '!composes' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:56:9: '!composes'
             {
-            match("not"); 
+            match("!composes"); 
 
 
             }
@@ -1127,10 +1128,11 @@
         try {
             int _type = T__63;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:57:7: ( '*' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:57:9: '*'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:57:7: ( '!resolve' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:57:9: '!resolve'
             {
-            match('*'); 
+            match("!resolve"); 
+
 
             }
 
@@ -1147,10 +1149,11 @@
         try {
             int _type = T__64;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:58:7: ( '/' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:58:9: '/'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:58:7: ( 'annotation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:58:9: 'annotation'
             {
-            match('/'); 
+            match("annotation"); 
+
 
             }
 
@@ -1167,10 +1170,11 @@
         try {
             int _type = T__65;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:59:7: ( '+' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:59:9: '+'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:59:7: ( 'documentation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:59:9: 'documentation'
             {
-            match('+'); 
+            match("documentation"); 
+
 
             }
 
@@ -1187,10 +1191,11 @@
         try {
             int _type = T__66;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:60:7: ( '>' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:60:9: '>'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:60:7: ( 'invariant' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:60:9: 'invariant'
             {
-            match('>'); 
+            match("invariant"); 
+
 
             }
 
@@ -1207,10 +1212,11 @@
         try {
             int _type = T__67;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:61:7: ( '<' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:61:9: '<'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:61:7: ( 'literal' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:61:9: 'literal'
             {
-            match('<'); 
+            match("literal"); 
+
 
             }
 
@@ -1227,10 +1233,10 @@
         try {
             int _type = T__68;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:62:7: ( '>=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:62:9: '>='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:62:7: ( 'serializable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:62:9: 'serializable'
             {
-            match(">="); 
+            match("serializable"); 
 
 
             }
@@ -1248,10 +1254,10 @@
         try {
             int _type = T__69;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:63:7: ( '<=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:63:9: '<='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:63:7: ( 'sysml' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:63:9: 'sysml'
             {
-            match("<="); 
+            match("sysml"); 
 
 
             }
@@ -1269,10 +1275,10 @@
         try {
             int _type = T__70;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:64:7: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:64:9: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:64:7: ( '-' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:64:9: '-'
             {
-            match('='); 
+            match('-'); 
 
             }
 
@@ -1289,10 +1295,10 @@
         try {
             int _type = T__71;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:65:7: ( '<>' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:65:9: '<>'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:65:7: ( 'not' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:65:9: 'not'
             {
-            match("<>"); 
+            match("not"); 
 
 
             }
@@ -1310,11 +1316,10 @@
         try {
             int _type = T__72;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:66:7: ( 'and' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:66:9: 'and'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:66:7: ( '*' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:66:9: '*'
             {
-            match("and"); 
-
+            match('*'); 
 
             }
 
@@ -1331,11 +1336,10 @@
         try {
             int _type = T__73;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:67:7: ( 'or' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:67:9: 'or'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:67:7: ( '/' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:67:9: '/'
             {
-            match("or"); 
-
+            match('/'); 
 
             }
 
@@ -1352,11 +1356,10 @@
         try {
             int _type = T__74;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:68:7: ( 'xor' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:68:9: 'xor'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:68:7: ( '+' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:68:9: '+'
             {
-            match("xor"); 
-
+            match('+'); 
 
             }
 
@@ -1373,11 +1376,10 @@
         try {
             int _type = T__75;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:69:7: ( 'implies' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:69:9: 'implies'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:69:7: ( '>' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:69:9: '>'
             {
-            match("implies"); 
-
+            match('>'); 
 
             }
 
@@ -1394,10 +1396,10 @@
         try {
             int _type = T__76;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:70:7: ( '.' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:70:9: '.'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:70:7: ( '<' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:70:9: '<'
             {
-            match('.'); 
+            match('<'); 
 
             }
 
@@ -1414,10 +1416,10 @@
         try {
             int _type = T__77;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:71:7: ( '->' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:71:9: '->'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:71:7: ( '>=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:71:9: '>='
             {
-            match("->"); 
+            match(">="); 
 
 
             }
@@ -1435,10 +1437,10 @@
         try {
             int _type = T__78;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:72:7: ( '?.' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:72:9: '?.'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:72:7: ( '<=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:72:9: '<='
             {
-            match("?."); 
+            match("<="); 
 
 
             }
@@ -1456,11 +1458,10 @@
         try {
             int _type = T__79;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:73:7: ( '?->' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:73:9: '?->'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:73:7: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:73:9: '='
             {
-            match("?->"); 
-
+            match('='); 
 
             }
 
@@ -1477,10 +1478,10 @@
         try {
             int _type = T__80;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:74:7: ( 'Tuple' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:74:9: 'Tuple'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:74:7: ( '<>' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:74:9: '<>'
             {
-            match("Tuple"); 
+            match("<>"); 
 
 
             }
@@ -1498,10 +1499,10 @@
         try {
             int _type = T__81;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:75:7: ( 'Boolean' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:75:9: 'Boolean'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:75:7: ( 'and' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:75:9: 'and'
             {
-            match("Boolean"); 
+            match("and"); 
 
 
             }
@@ -1519,10 +1520,10 @@
         try {
             int _type = T__82;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:76:7: ( 'Integer' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:76:9: 'Integer'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:76:7: ( 'or' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:76:9: 'or'
             {
-            match("Integer"); 
+            match("or"); 
 
 
             }
@@ -1540,10 +1541,10 @@
         try {
             int _type = T__83;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:77:7: ( 'Real' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:77:9: 'Real'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:77:7: ( 'xor' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:77:9: 'xor'
             {
-            match("Real"); 
+            match("xor"); 
 
 
             }
@@ -1561,10 +1562,10 @@
         try {
             int _type = T__84;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:78:7: ( 'String' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:78:9: 'String'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:78:7: ( 'implies' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:78:9: 'implies'
             {
-            match("String"); 
+            match("implies"); 
 
 
             }
@@ -1582,11 +1583,10 @@
         try {
             int _type = T__85;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:79:7: ( 'UnlimitedNatural' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:79:9: 'UnlimitedNatural'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:79:7: ( '.' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:79:9: '.'
             {
-            match("UnlimitedNatural"); 
-
+            match('.'); 
 
             }
 
@@ -1603,10 +1603,10 @@
         try {
             int _type = T__86;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:80:7: ( 'OclAny' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:80:9: 'OclAny'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:80:7: ( '->' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:80:9: '->'
             {
-            match("OclAny"); 
+            match("->"); 
 
 
             }
@@ -1624,10 +1624,10 @@
         try {
             int _type = T__87;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:81:7: ( 'OclInvalid' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:81:9: 'OclInvalid'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:81:7: ( '?.' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:81:9: '?.'
             {
-            match("OclInvalid"); 
+            match("?."); 
 
 
             }
@@ -1645,10 +1645,10 @@
         try {
             int _type = T__88;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:82:7: ( 'OclVoid' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:82:9: 'OclVoid'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:82:7: ( '?->' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:82:9: '?->'
             {
-            match("OclVoid"); 
+            match("?->"); 
 
 
             }
@@ -1666,10 +1666,10 @@
         try {
             int _type = T__89;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:83:7: ( 'Set' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:83:9: 'Set'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:83:7: ( 'Tuple' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:83:9: 'Tuple'
             {
-            match("Set"); 
+            match("Tuple"); 
 
 
             }
@@ -1687,10 +1687,10 @@
         try {
             int _type = T__90;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:84:7: ( 'Bag' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:84:9: 'Bag'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:84:7: ( 'Boolean' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:84:9: 'Boolean'
             {
-            match("Bag"); 
+            match("Boolean"); 
 
 
             }
@@ -1708,10 +1708,10 @@
         try {
             int _type = T__91;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:85:7: ( 'Sequence' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:85:9: 'Sequence'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:85:7: ( 'Integer' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:85:9: 'Integer'
             {
-            match("Sequence"); 
+            match("Integer"); 
 
 
             }
@@ -1729,10 +1729,10 @@
         try {
             int _type = T__92;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:86:7: ( 'Collection' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:86:9: 'Collection'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:86:7: ( 'Real' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:86:9: 'Real'
             {
-            match("Collection"); 
+            match("Real"); 
 
 
             }
@@ -1750,10 +1750,10 @@
         try {
             int _type = T__93;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:87:7: ( 'OrderedSet' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:87:9: 'OrderedSet'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:87:7: ( 'String' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:87:9: 'String'
             {
-            match("OrderedSet"); 
+            match("String"); 
 
 
             }
@@ -1771,10 +1771,11 @@
         try {
             int _type = T__94;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:88:7: ( '?' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:88:9: '?'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:88:7: ( 'UnlimitedNatural' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:88:9: 'UnlimitedNatural'
             {
-            match('?'); 
+            match("UnlimitedNatural"); 
+
 
             }
 
@@ -1791,10 +1792,11 @@
         try {
             int _type = T__95;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:89:7: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:89:9: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:89:7: ( 'OclAny' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:89:9: 'OclAny'
             {
-            match('('); 
+            match("OclAny"); 
+
 
             }
 
@@ -1811,10 +1813,11 @@
         try {
             int _type = T__96;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:90:7: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:90:9: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:90:7: ( 'OclInvalid' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:90:9: 'OclInvalid'
             {
-            match(')'); 
+            match("OclInvalid"); 
+
 
             }
 
@@ -1831,10 +1834,11 @@
         try {
             int _type = T__97;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:91:7: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:91:9: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:91:7: ( 'OclVoid' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:91:9: 'OclVoid'
             {
-            match(':'); 
+            match("OclVoid"); 
+
 
             }
 
@@ -1851,10 +1855,11 @@
         try {
             int _type = T__98;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:92:7: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:92:9: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:92:7: ( 'Set' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:92:9: 'Set'
             {
-            match(','); 
+            match("Set"); 
+
 
             }
 
@@ -1871,10 +1876,11 @@
         try {
             int _type = T__99;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:93:7: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:93:9: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:93:7: ( 'Bag' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:93:9: 'Bag'
             {
-            match('{'); 
+            match("Bag"); 
+
 
             }
 
@@ -1891,10 +1897,11 @@
         try {
             int _type = T__100;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:94:8: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:94:10: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:94:8: ( 'Sequence' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:94:10: 'Sequence'
             {
-            match('}'); 
+            match("Sequence"); 
+
 
             }
 
@@ -1911,10 +1918,11 @@
         try {
             int _type = T__101;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:95:8: ( '#' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:95:10: '#'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:95:8: ( 'Collection' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:95:10: 'Collection'
             {
-            match('#'); 
+            match("Collection"); 
+
 
             }
 
@@ -1931,10 +1939,10 @@
         try {
             int _type = T__102;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:96:8: ( '::' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:96:10: '::'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:96:8: ( 'OrderedSet' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:96:10: 'OrderedSet'
             {
-            match("::"); 
+            match("OrderedSet"); 
 
 
             }
@@ -1952,11 +1960,10 @@
         try {
             int _type = T__103;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:97:8: ( '..' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:97:10: '..'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:97:8: ( '?' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:97:10: '?'
             {
-            match(".."); 
-
+            match('?'); 
 
             }
 
@@ -1973,11 +1980,10 @@
         try {
             int _type = T__104;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:98:8: ( '++' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:98:10: '++'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:98:8: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:98:10: '('
             {
-            match("++"); 
-
+            match('('); 
 
             }
 
@@ -1994,11 +2000,10 @@
         try {
             int _type = T__105;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:99:8: ( 'Lambda' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:99:10: 'Lambda'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:99:8: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:99:10: ')'
             {
-            match("Lambda"); 
-
+            match(')'); 
 
             }
 
@@ -2015,11 +2020,10 @@
         try {
             int _type = T__106;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:100:8: ( 'invalid' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:100:10: 'invalid'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:100:8: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:100:10: ':'
             {
-            match("invalid"); 
-
+            match(':'); 
 
             }
 
@@ -2036,11 +2040,10 @@
         try {
             int _type = T__107;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:101:8: ( 'null' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:101:10: 'null'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:101:8: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:101:10: ','
             {
-            match("null"); 
-
+            match(','); 
 
             }
 
@@ -2057,11 +2060,10 @@
         try {
             int _type = T__108;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:102:8: ( 'pre' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:102:10: 'pre'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:102:8: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:102:10: '{'
             {
-            match("pre"); 
-
+            match('{'); 
 
             }
 
@@ -2078,10 +2080,10 @@
         try {
             int _type = T__109;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:103:8: ( '[' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:103:10: '['
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:103:8: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:103:10: '}'
             {
-            match('['); 
+            match('}'); 
 
             }
 
@@ -2098,10 +2100,10 @@
         try {
             int _type = T__110;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:104:8: ( ']' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:104:10: ']'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:104:8: ( '#' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:104:10: '#'
             {
-            match(']'); 
+            match('#'); 
 
             }
 
@@ -2118,10 +2120,10 @@
         try {
             int _type = T__111;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:105:8: ( 'in' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:105:10: 'in'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:105:8: ( '::' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:105:10: '::'
             {
-            match("in"); 
+            match("::"); 
 
 
             }
@@ -2139,10 +2141,10 @@
         try {
             int _type = T__112;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:106:8: ( 'if' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:106:10: 'if'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:106:8: ( '..' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:106:10: '..'
             {
-            match("if"); 
+            match(".."); 
 
 
             }
@@ -2160,10 +2162,10 @@
         try {
             int _type = T__113;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:107:8: ( 'then' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:107:10: 'then'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:107:8: ( '++' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:107:10: '++'
             {
-            match("then"); 
+            match("++"); 
 
 
             }
@@ -2181,10 +2183,10 @@
         try {
             int _type = T__114;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:108:8: ( 'else' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:108:10: 'else'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:108:8: ( 'Lambda' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:108:10: 'Lambda'
             {
-            match("else"); 
+            match("Lambda"); 
 
 
             }
@@ -2202,10 +2204,10 @@
         try {
             int _type = T__115;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:109:8: ( 'endif' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:109:10: 'endif'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:109:8: ( 'invalid' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:109:10: 'invalid'
             {
-            match("endif"); 
+            match("invalid"); 
 
 
             }
@@ -2223,10 +2225,10 @@
         try {
             int _type = T__116;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:110:8: ( 'elseif' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:110:10: 'elseif'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:110:8: ( 'null' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:110:10: 'null'
             {
-            match("elseif"); 
+            match("null"); 
 
 
             }
@@ -2244,10 +2246,10 @@
         try {
             int _type = T__117;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:111:8: ( 'let' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:111:10: 'let'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:111:8: ( 'pre' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:111:10: 'pre'
             {
-            match("let"); 
+            match("pre"); 
 
 
             }
@@ -2265,11 +2267,10 @@
         try {
             int _type = T__118;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:112:8: ( 'self' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:112:10: 'self'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:112:8: ( '[' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:112:10: '['
             {
-            match("self"); 
-
+            match('['); 
 
             }
 
@@ -2286,11 +2287,10 @@
         try {
             int _type = T__119;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:113:8: ( '&&' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:113:10: '&&'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:113:8: ( ']' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:113:10: ']'
             {
-            match("&&"); 
-
+            match(']'); 
 
             }
 
@@ -2307,10 +2307,10 @@
         try {
             int _type = T__120;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:114:8: ( '!derived' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:114:10: '!derived'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:114:8: ( 'in' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:114:10: 'in'
             {
-            match("!derived"); 
+            match("in"); 
 
 
             }
@@ -2328,10 +2328,10 @@
         try {
             int _type = T__121;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:115:8: ( '!id' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:115:10: '!id'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:115:8: ( 'if' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:115:10: 'if'
             {
-            match("!id"); 
+            match("if"); 
 
 
             }
@@ -2349,10 +2349,10 @@
         try {
             int _type = T__122;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:116:8: ( '!ordered' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:116:10: '!ordered'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:116:8: ( 'then' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:116:10: 'then'
             {
-            match("!ordered"); 
+            match("then"); 
 
 
             }
@@ -2370,10 +2370,10 @@
         try {
             int _type = T__123;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:117:8: ( '!readonly' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:117:10: '!readonly'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:117:8: ( 'else' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:117:10: 'else'
             {
-            match("!readonly"); 
+            match("else"); 
 
 
             }
@@ -2391,10 +2391,10 @@
         try {
             int _type = T__124;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:118:8: ( '!transient' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:118:10: '!transient'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:118:8: ( 'endif' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:118:10: 'endif'
             {
-            match("!transient"); 
+            match("endif"); 
 
 
             }
@@ -2412,10 +2412,10 @@
         try {
             int _type = T__125;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:119:8: ( '!unique' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:119:10: '!unique'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:119:8: ( 'elseif' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:119:10: 'elseif'
             {
-            match("!unique"); 
+            match("elseif"); 
 
 
             }
@@ -2433,10 +2433,10 @@
         try {
             int _type = T__126;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:120:8: ( '!unsettable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:120:10: '!unsettable'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:120:8: ( 'let' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:120:10: 'let'
             {
-            match("!unsettable"); 
+            match("let"); 
 
 
             }
@@ -2454,10 +2454,10 @@
         try {
             int _type = T__127;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:121:8: ( '!volatile' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:121:10: '!volatile'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:121:8: ( 'self' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:121:10: 'self'
             {
-            match("!volatile"); 
+            match("self"); 
 
 
             }
@@ -2475,10 +2475,10 @@
         try {
             int _type = T__128;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:122:8: ( '::*' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:122:10: '::*'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:122:8: ( '&&' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:122:10: '&&'
             {
-            match("::*"); 
+            match("&&"); 
 
 
             }
@@ -2496,10 +2496,10 @@
         try {
             int _type = T__129;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:123:8: ( '!composes' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:123:10: '!composes'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:123:8: ( '!unique' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:123:10: '!unique'
             {
-            match("!composes"); 
+            match("!unique"); 
 
 
             }
@@ -2517,10 +2517,10 @@
         try {
             int _type = T__130;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:124:8: ( '!resolve' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:124:10: '!resolve'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:124:8: ( '::*' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:124:10: '::*'
             {
-            match("!resolve"); 
+            match("::*"); 
 
 
             }
@@ -2620,8 +2620,8 @@
         try {
             int _type = RULE_UNQUOTED_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27706:22: ( '\\u00A3$%^\\u00A3$%^' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27706:24: '\\u00A3$%^\\u00A3$%^'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29204:22: ( '\\u00A3$%^\\u00A3$%^' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29204:24: '\\u00A3$%^\\u00A3$%^'
             {
             match("\u00A3$%^\u00A3$%^"); 
 
@@ -2639,8 +2639,8 @@
     // $ANTLR start "RULE_ESCAPED_CHARACTER"
     public final void mRULE_ESCAPED_CHARACTER() throws RecognitionException {
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27708:33: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27708:35: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29206:33: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29206:35: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
             {
             match('\\'); 
             if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
@@ -2664,8 +2664,8 @@
     // $ANTLR start "RULE_LETTER_CHARACTER"
     public final void mRULE_LETTER_CHARACTER() throws RecognitionException {
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27710:32: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27710:34: ( 'a' .. 'z' | 'A' .. 'Z' | '_' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29208:32: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29208:34: ( 'a' .. 'z' | 'A' .. 'Z' | '_' )
             {
             if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                 input.consume();
@@ -2690,11 +2690,11 @@
         try {
             int _type = RULE_DOUBLE_QUOTED_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27712:27: ( '\"' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )* '\"' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27712:29: '\"' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29210:27: ( '\"' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )* '\"' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29210:29: '\"' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
             {
             match('\"'); 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27712:33: ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29210:33: ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )*
             loop1:
             do {
                 int alt1=3;
@@ -2710,14 +2710,14 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27712:34: RULE_ESCAPED_CHARACTER
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29210:34: RULE_ESCAPED_CHARACTER
             	    {
             	    mRULE_ESCAPED_CHARACTER(); 
 
             	    }
             	    break;
             	case 2 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27712:57: ~ ( ( '\\\\' | '\"' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29210:57: ~ ( ( '\\\\' | '\"' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -2754,11 +2754,11 @@
         try {
             int _type = RULE_SINGLE_QUOTED_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27714:27: ( '\\'' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27714:29: '\\'' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29212:27: ( '\\'' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29212:29: '\\'' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
             {
             match('\''); 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27714:34: ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29212:34: ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )*
             loop2:
             do {
                 int alt2=3;
@@ -2774,14 +2774,14 @@
 
                 switch (alt2) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27714:35: RULE_ESCAPED_CHARACTER
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29212:35: RULE_ESCAPED_CHARACTER
             	    {
             	    mRULE_ESCAPED_CHARACTER(); 
 
             	    }
             	    break;
             	case 2 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27714:58: ~ ( ( '\\\\' | '\\'' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29212:58: ~ ( ( '\\\\' | '\\'' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -2818,12 +2818,12 @@
         try {
             int _type = RULE_ML_SINGLE_QUOTED_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27716:30: ( '/\\'' ( options {greedy=false; } : . )* '\\'/' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27716:32: '/\\'' ( options {greedy=false; } : . )* '\\'/'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29214:30: ( '/\\'' ( options {greedy=false; } : . )* '\\'/' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29214:32: '/\\'' ( options {greedy=false; } : . )* '\\'/'
             {
             match("/'"); 
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27716:38: ( options {greedy=false; } : . )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29214:38: ( options {greedy=false; } : . )*
             loop3:
             do {
                 int alt3=2;
@@ -2848,7 +2848,7 @@
 
                 switch (alt3) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27716:66: .
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29214:66: .
             	    {
             	    matchAny(); 
 
@@ -2878,11 +2878,11 @@
         try {
             int _type = RULE_SIMPLE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27718:16: ( RULE_LETTER_CHARACTER ( RULE_LETTER_CHARACTER | '0' .. '9' )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27718:18: RULE_LETTER_CHARACTER ( RULE_LETTER_CHARACTER | '0' .. '9' )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29216:16: ( RULE_LETTER_CHARACTER ( RULE_LETTER_CHARACTER | '0' .. '9' )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29216:18: RULE_LETTER_CHARACTER ( RULE_LETTER_CHARACTER | '0' .. '9' )*
             {
             mRULE_LETTER_CHARACTER(); 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27718:40: ( RULE_LETTER_CHARACTER | '0' .. '9' )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29216:40: ( RULE_LETTER_CHARACTER | '0' .. '9' )*
             loop4:
             do {
                 int alt4=2;
@@ -2931,8 +2931,8 @@
         try {
             int _type = RULE_ESCAPED_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27720:17: ( '_' RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27720:19: '_' RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29218:17: ( '_' RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29218:19: '_' RULE_SINGLE_QUOTED_STRING
             {
             match('_'); 
             mRULE_SINGLE_QUOTED_STRING(); 
@@ -2952,10 +2952,10 @@
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27722:10: ( ( '0' .. '9' )+ )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27722:12: ( '0' .. '9' )+
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29220:10: ( ( '0' .. '9' )+ )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29220:12: ( '0' .. '9' )+
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27722:12: ( '0' .. '9' )+
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29220:12: ( '0' .. '9' )+
             int cnt5=0;
             loop5:
             do {
@@ -2969,7 +2969,7 @@
 
                 switch (alt5) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27722:13: '0' .. '9'
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29220:13: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -3001,12 +3001,12 @@
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27724:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27724:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29222:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29222:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27724:24: ( options {greedy=false; } : . )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29222:24: ( options {greedy=false; } : . )*
             loop6:
             do {
                 int alt6=2;
@@ -3031,7 +3031,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27724:52: .
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29222:52: .
             	    {
             	    matchAny(); 
 
@@ -3061,12 +3061,12 @@
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27726:17: ( '--' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27726:19: '--' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29224:17: ( '--' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29224:19: '--' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("--"); 
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27726:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29224:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop7:
             do {
                 int alt7=2;
@@ -3079,7 +3079,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27726:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29224:24: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -3099,7 +3099,7 @@
                 }
             } while (true);
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27726:40: ( ( '\\r' )? '\\n' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29224:40: ( ( '\\r' )? '\\n' )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -3108,9 +3108,9 @@
             }
             switch (alt9) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27726:41: ( '\\r' )? '\\n'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29224:41: ( '\\r' )? '\\n'
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27726:41: ( '\\r' )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29224:41: ( '\\r' )?
                     int alt8=2;
                     int LA8_0 = input.LA(1);
 
@@ -3119,7 +3119,7 @@
                     }
                     switch (alt8) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27726:41: '\\r'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29224:41: '\\r'
                             {
                             match('\r'); 
 
@@ -3151,10 +3151,10 @@
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27728:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27728:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29226:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29226:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27728:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29226:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt10=0;
             loop10:
             do {
@@ -3208,8 +3208,8 @@
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27730:16: ( . )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27730:18: .
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29228:16: ( . )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29228:18: .
             {
             matchAny(); 
 
@@ -4177,7 +4177,7 @@
         "\2\0\1\47\4\uffff\1\163\1\164\1\144\1\uffff\1\144\1\154\1\141\1"+
         "\155\1\164\1\146\1\143\1\144\1\164\1\163\1\60\1\160\2\60\1\171\1"+
         "\142\1\164\1\144\1\145\1\60\1\143\1\163\1\145\2\141\1\160\1\154"+
-        "\1\163\1\145\1\141\1\151\1\154\5\uffff\1\145\1\uffff\1\156\5\uffff"+
+        "\1\163\1\145\1\141\1\151\1\154\4\uffff\1\145\1\uffff\1\156\6\uffff"+
         "\1\164\1\154\14\uffff\1\162\5\uffff\1\160\1\157\1\147\1\164\1\141"+
         "\1\162\1\161\2\154\1\144\1\154\2\uffff\1\52\5\uffff\1\155\3\uffff"+
         "\1\154\10\uffff\1\164\1\162\1\157\1\60\1\171\1\154\1\163\1\160\1"+
@@ -4223,8 +4223,8 @@
         "\uffff\1\44\2\uffff\1\47\4\uffff\1\163\1\164\1\156\1\uffff\1\144"+
         "\1\154\1\141\1\155\1\164\1\162\1\143\1\165\1\164\1\163\1\172\1\160"+
         "\2\172\1\171\2\164\1\144\1\145\1\172\1\143\1\163\1\157\1\163\1\141"+
-        "\1\160\1\162\1\163\1\162\1\165\1\163\1\154\5\uffff\1\145\1\uffff"+
-        "\1\156\5\uffff\1\164\1\154\14\uffff\1\162\5\uffff\1\160\1\157\1"+
+        "\1\160\1\162\1\163\1\162\1\165\1\163\1\154\4\uffff\1\145\1\uffff"+
+        "\1\156\6\uffff\1\164\1\154\14\uffff\1\162\5\uffff\1\160\1\157\1"+
         "\147\1\164\1\141\1\162\1\164\2\154\1\144\1\154\2\uffff\1\52\5\uffff"+
         "\1\155\3\uffff\1\154\10\uffff\1\164\1\162\1\157\1\172\1\171\1\154"+
         "\1\163\1\160\1\141\2\151\1\165\1\155\1\151\2\145\1\uffff\1\157\1"+
@@ -4263,28 +4263,28 @@
         "\1\164\3\uffff\2\156\2\172\1\165\2\172\2\uffff\1\162\2\uffff\1\141"+
         "\1\154\1\172\1\uffff";
     static final String DFA11_acceptS =
-        "\21\uffff\1\45\3\uffff\1\57\4\uffff\1\66\13\uffff\1\117\1\120\1"+
-        "\uffff\1\122\1\123\1\124\1\125\1\uffff\1\135\1\136\2\uffff\1\165"+
+        "\21\uffff\1\45\3\uffff\1\70\4\uffff\1\77\13\uffff\1\130\1\131\1"+
+        "\uffff\1\133\1\134\1\135\1\136\1\uffff\1\146\1\147\2\uffff\1\165"+
         "\1\166\4\uffff\1\173\1\175\1\u0080\1\u0081\3\uffff\1\173\40\uffff"+
-        "\1\45\1\46\1\150\1\151\1\152\1\uffff\1\154\1\uffff\1\157\1\161\1"+
-        "\75\1\177\1\55\2\uffff\1\57\1\172\1\176\1\60\1\130\1\61\1\64\1\62"+
-        "\1\65\1\67\1\63\1\66\1\uffff\1\127\1\74\1\76\1\77\1\116\13\uffff"+
-        "\1\117\1\120\1\uffff\1\121\1\122\1\123\1\124\1\125\1\uffff\1\135"+
-        "\1\136\1\147\1\uffff\1\165\1\166\1\167\1\170\1\171\1\174\1\175\1"+
-        "\u0080\20\uffff\1\15\4\uffff\1\137\1\140\7\uffff\1\71\45\uffff\1"+
-        "\160\1\126\5\uffff\1\70\21\uffff\1\21\2\uffff\1\145\6\uffff\1\134"+
-        "\21\uffff\1\153\1\162\1\155\1\156\1\56\1\uffff\1\72\2\uffff\1\112"+
-        "\3\uffff\1\111\14\uffff\1\3\7\uffff\1\13\3\uffff\1\142\26\uffff"+
-        "\1\146\2\uffff\1\141\1\uffff\1\163\3\uffff\1\133\3\uffff\1\103\16"+
-        "\uffff\1\5\6\uffff\1\143\26\uffff\1\37\1\uffff\1\54\5\uffff\1\100"+
-        "\13\uffff\1\164\13\uffff\1\144\1\16\7\uffff\1\23\12\uffff\1\36\1"+
-        "\uffff\1\40\1\uffff\1\42\4\uffff\1\104\2\uffff\1\106\4\uffff\1\131"+
-        "\10\uffff\1\12\1\uffff\1\14\1\73\1\17\2\uffff\1\132\1\22\1\52\1"+
-        "\uffff\1\25\1\26\6\uffff\1\35\4\uffff\1\101\1\102\3\uffff\1\110"+
+        "\1\45\1\46\1\47\1\50\1\uffff\1\52\1\uffff\1\54\1\55\1\56\1\106\1"+
+        "\177\1\66\2\uffff\1\70\1\172\1\176\1\71\1\141\1\72\1\75\1\73\1\76"+
+        "\1\100\1\74\1\77\1\uffff\1\140\1\105\1\107\1\110\1\127\13\uffff"+
+        "\1\130\1\131\1\uffff\1\132\1\133\1\134\1\135\1\136\1\uffff\1\146"+
+        "\1\147\1\160\1\uffff\1\165\1\166\1\167\1\170\1\171\1\174\1\175\1"+
+        "\u0080\20\uffff\1\15\4\uffff\1\150\1\151\7\uffff\1\102\45\uffff"+
+        "\1\162\1\137\5\uffff\1\101\21\uffff\1\21\2\uffff\1\156\6\uffff\1"+
+        "\145\21\uffff\1\51\1\57\1\53\1\161\1\67\1\uffff\1\103\2\uffff\1"+
+        "\123\3\uffff\1\122\14\uffff\1\3\7\uffff\1\13\3\uffff\1\153\26\uffff"+
+        "\1\157\2\uffff\1\152\1\uffff\1\163\3\uffff\1\144\3\uffff\1\114\16"+
+        "\uffff\1\5\6\uffff\1\154\26\uffff\1\37\1\uffff\1\65\5\uffff\1\111"+
+        "\13\uffff\1\164\13\uffff\1\155\1\16\7\uffff\1\23\12\uffff\1\36\1"+
+        "\uffff\1\40\1\uffff\1\42\4\uffff\1\115\2\uffff\1\117\4\uffff\1\142"+
+        "\10\uffff\1\12\1\uffff\1\14\1\104\1\17\2\uffff\1\143\1\22\1\63\1"+
+        "\uffff\1\25\1\26\6\uffff\1\35\4\uffff\1\112\1\113\3\uffff\1\121"+
         "\2\uffff\1\1\2\uffff\1\4\1\6\1\7\11\uffff\1\32\1\33\4\uffff\1\44"+
-        "\1\113\4\uffff\1\2\4\uffff\1\20\1\51\1\24\2\uffff\1\31\1\34\1\uffff"+
-        "\1\41\5\uffff\1\47\1\10\1\11\4\uffff\1\43\1\uffff\1\107\1\115\1"+
-        "\114\7\uffff\1\30\1\53\1\uffff\1\50\1\27\3\uffff\1\105";
+        "\1\124\4\uffff\1\2\4\uffff\1\20\1\62\1\24\2\uffff\1\31\1\34\1\uffff"+
+        "\1\41\5\uffff\1\60\1\10\1\11\4\uffff\1\43\1\uffff\1\120\1\126\1"+
+        "\125\7\uffff\1\30\1\64\1\uffff\1\61\1\27\3\uffff\1\116";
     static final String DFA11_specialS =
         "\1\2\64\uffff\1\0\1\1\u0212\uffff}>";
     static final String[] DFA11_transitionS = {
@@ -4312,8 +4312,8 @@
             "\1\136",
             "\1\137",
             "",
-            "\1\151\1\142\4\uffff\1\143\5\uffff\1\144\2\uffff\1\145\1\141"+
-            "\1\146\1\147\1\150",
+            "\1\151\1\141\4\uffff\1\142\5\uffff\1\143\2\uffff\1\144\1\150"+
+            "\1\145\1\146\1\147",
             "\1\153\20\uffff\1\152",
             "\1\155\5\uffff\1\156",
             "",
@@ -4397,7 +4397,6 @@
             "",
             "",
             "",
-            "",
             "\1\u00d4",
             "",
             "\1\u00d5",
@@ -4406,6 +4405,7 @@
             "",
             "",
             "",
+            "",
             "\1\u00d6",
             "\1\u00d7",
             "",
@@ -4511,7 +4511,7 @@
             "\1\u0118",
             "\1\u0119",
             "\1\u011a\21\uffff\1\u011b",
-            "\1\u011c\11\uffff\1\u011d",
+            "\1\u011d\11\uffff\1\u011c",
             "\12\77\7\uffff\32\77\4\uffff\1\77\1\uffff\32\77",
             "\1\u011f",
             "\12\77\7\uffff\32\77\4\uffff\1\77\1\uffff\32\77",
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcoreParser.java b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcoreParser.java
index 2f43e39..a644490 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcoreParser.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcoreParser.java
@@ -23,7 +23,7 @@
 @SuppressWarnings("all")
 public class InternalOCLinEcoreParser extends AbstractInternalContentAssistParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_INT", "RULE_SINGLE_QUOTED_STRING", "RULE_ML_SINGLE_QUOTED_STRING", "RULE_SIMPLE_ID", "RULE_ESCAPED_ID", "RULE_UNQUOTED_STRING", "RULE_ESCAPED_CHARACTER", "RULE_LETTER_CHARACTER", "RULE_DOUBLE_QUOTED_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'abstract'", "'attribute'", "'body'", "'callable'", "'class'", "'composes'", "'datatype'", "'definition'", "'derivation'", "'derived'", "'enum'", "'extends'", "'id'", "'import'", "'initial'", "'interface'", "'key'", "'library'", "'module'", "'operation'", "'ordered'", "'package'", "'postcondition'", "'precondition'", "'primitive'", "'property'", "'readonly'", "'reference'", "'resolve'", "'static'", "'super'", "'throws'", "'transient'", "'unique'", "'unsettable'", "'volatile'", "';'", "'!serializable'", "'annotation'", "'documentation'", "'invariant'", "'literal'", "'serializable'", "'sysml'", "'-'", "'not'", "'*'", "'/'", "'+'", "'>'", "'<'", "'>='", "'<='", "'='", "'<>'", "'and'", "'or'", "'xor'", "'implies'", "'.'", "'->'", "'?.'", "'?->'", "'Tuple'", "'Boolean'", "'Integer'", "'Real'", "'String'", "'UnlimitedNatural'", "'OclAny'", "'OclInvalid'", "'OclVoid'", "'Set'", "'Bag'", "'Sequence'", "'Collection'", "'OrderedSet'", "'?'", "'('", "')'", "':'", "','", "'{'", "'}'", "'#'", "'::'", "'..'", "'++'", "'Lambda'", "'invalid'", "'null'", "'pre'", "'['", "']'", "'in'", "'if'", "'then'", "'else'", "'endif'", "'elseif'", "'let'", "'self'", "'&&'", "'!derived'", "'!id'", "'!ordered'", "'!readonly'", "'!transient'", "'!unique'", "'!unsettable'", "'!volatile'", "'::*'", "'!composes'", "'!resolve'", "'true'", "'false'", "'@'", "'|'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_INT", "RULE_SINGLE_QUOTED_STRING", "RULE_ML_SINGLE_QUOTED_STRING", "RULE_SIMPLE_ID", "RULE_ESCAPED_ID", "RULE_UNQUOTED_STRING", "RULE_ESCAPED_CHARACTER", "RULE_LETTER_CHARACTER", "RULE_DOUBLE_QUOTED_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'abstract'", "'attribute'", "'body'", "'callable'", "'class'", "'composes'", "'datatype'", "'definition'", "'derivation'", "'derived'", "'enum'", "'extends'", "'id'", "'import'", "'initial'", "'interface'", "'key'", "'library'", "'module'", "'operation'", "'ordered'", "'package'", "'postcondition'", "'precondition'", "'primitive'", "'property'", "'readonly'", "'reference'", "'resolve'", "'static'", "'super'", "'throws'", "'transient'", "'unique'", "'unsettable'", "'volatile'", "';'", "'!derived'", "'!id'", "'!ordered'", "'!readonly'", "'!transient'", "'!unsettable'", "'!volatile'", "'!serializable'", "'!composes'", "'!resolve'", "'annotation'", "'documentation'", "'invariant'", "'literal'", "'serializable'", "'sysml'", "'-'", "'not'", "'*'", "'/'", "'+'", "'>'", "'<'", "'>='", "'<='", "'='", "'<>'", "'and'", "'or'", "'xor'", "'implies'", "'.'", "'->'", "'?.'", "'?->'", "'Tuple'", "'Boolean'", "'Integer'", "'Real'", "'String'", "'UnlimitedNatural'", "'OclAny'", "'OclInvalid'", "'OclVoid'", "'Set'", "'Bag'", "'Sequence'", "'Collection'", "'OrderedSet'", "'?'", "'('", "')'", "':'", "','", "'{'", "'}'", "'#'", "'::'", "'..'", "'++'", "'Lambda'", "'invalid'", "'null'", "'pre'", "'['", "']'", "'in'", "'if'", "'then'", "'else'", "'endif'", "'elseif'", "'let'", "'self'", "'&&'", "'!unique'", "'::*'", "'true'", "'false'", "'@'", "'|'"
     };
     public static final int T__29=29;
     public static final int T__28=28;
@@ -10195,7 +10195,7 @@
             int alt3=2;
             int LA3_0 = input.LA(1);
 
-            if ( (LA3_0==97) ) {
+            if ( (LA3_0==106) ) {
                 alt3=1;
             }
             else if ( (LA3_0==53) ) {
@@ -10285,7 +10285,7 @@
             int alt4=2;
             int LA4_0 = input.LA(1);
 
-            if ( ((LA4_0>=RULE_SIMPLE_ID && LA4_0<=RULE_ESCAPED_ID)||(LA4_0>=17 && LA4_0<=52)||(LA4_0>=55 && LA4_0<=60)) ) {
+            if ( ((LA4_0>=RULE_SIMPLE_ID && LA4_0<=RULE_ESCAPED_ID)||(LA4_0>=17 && LA4_0<=52)||(LA4_0>=64 && LA4_0<=69)) ) {
                 alt4=1;
             }
             else if ( (LA4_0==RULE_SINGLE_QUOTED_STRING) ) {
@@ -10369,7 +10369,7 @@
             int alt5=2;
             int LA5_0 = input.LA(1);
 
-            if ( (LA5_0==99) ) {
+            if ( (LA5_0==108) ) {
                 alt5=1;
             }
             else if ( (LA5_0==53) ) {
@@ -10458,9 +10458,9 @@
             // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3450:1: ( ( ( rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_0 ) ) | ( ( rule__AnnotationCS__OwnedContentsAssignment_4_0_1_1 ) ) | ( ( rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_2 ) ) )
             int alt6=3;
             switch ( input.LA(1) ) {
-            case 55:
-            case 56:
-            case 60:
+            case 64:
+            case 65:
+            case 69:
                 {
                 alt6=1;
                 }
@@ -10502,7 +10502,7 @@
             case 50:
             case 51:
             case 52:
-            case 58:
+            case 67:
                 {
                 alt6=2;
                 }
@@ -10511,10 +10511,10 @@
                 {
                 int LA6_3 = input.LA(2);
 
-                if ( ((LA6_3>=RULE_SIMPLE_ID && LA6_3<=RULE_ESCAPED_ID)||(LA6_3>=17 && LA6_3<=52)||(LA6_3>=55 && LA6_3<=60)) ) {
+                if ( ((LA6_3>=RULE_SIMPLE_ID && LA6_3<=RULE_ESCAPED_ID)||(LA6_3>=17 && LA6_3<=52)||(LA6_3>=64 && LA6_3<=69)) ) {
                     alt6=3;
                 }
-                else if ( (LA6_3==53||LA6_3==70||LA6_3==99) ) {
+                else if ( (LA6_3==53||LA6_3==79||LA6_3==108) ) {
                     alt6=2;
                 }
                 else {
@@ -10649,17 +10649,17 @@
             // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3478:1: ( ( ruleAnnotationCS ) | ( ruleDocumentationCS ) | ( ruleSysMLCS ) )
             int alt7=3;
             switch ( input.LA(1) ) {
-            case 55:
+            case 64:
                 {
                 alt7=1;
                 }
                 break;
-            case 56:
+            case 65:
                 {
                 alt7=2;
                 }
                 break;
-            case 60:
+            case 69:
                 {
                 alt7=3;
                 }
@@ -10759,21 +10759,21 @@
     // $ANTLR end "rule__AnnotationElementCS__Alternatives"
 
 
-    // $ANTLR start "rule__AttributeCS__Alternatives_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3502:1: rule__AttributeCS__Alternatives_0 : ( ( ( rule__AttributeCS__Group_0_0__0 ) ) | ( ( rule__AttributeCS__Group_0_1__0 ) ) );
-    public final void rule__AttributeCS__Alternatives_0() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__Alternatives_5_0_1_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3502:1: rule__AttributeCS__Alternatives_5_0_1_0 : ( ( ( rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0 ) ) | ( '!derived' ) );
+    public final void rule__AttributeCS__Alternatives_5_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3506:1: ( ( ( rule__AttributeCS__Group_0_0__0 ) ) | ( ( rule__AttributeCS__Group_0_1__0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3506:1: ( ( ( rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0 ) ) | ( '!derived' ) )
             int alt8=2;
             int LA8_0 = input.LA(1);
 
-            if ( (LA8_0==46) ) {
+            if ( (LA8_0==26) ) {
                 alt8=1;
             }
-            else if ( (LA8_0==24) ) {
+            else if ( (LA8_0==54) ) {
                 alt8=2;
             }
             else {
@@ -10785,19 +10785,19 @@
             }
             switch (alt8) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3507:1: ( ( rule__AttributeCS__Group_0_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3507:1: ( ( rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3507:1: ( ( rule__AttributeCS__Group_0_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3508:1: ( rule__AttributeCS__Group_0_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3507:1: ( ( rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3508:1: ( rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0 )
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getGroup_0_0()); 
+                       before(grammarAccess.getAttributeCSAccess().getIsDerivedAssignment_5_0_1_0_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3509:1: ( rule__AttributeCS__Group_0_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3509:2: rule__AttributeCS__Group_0_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3509:1: ( rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3509:2: rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_0_0__0_in_rule__AttributeCS__Alternatives_07552);
-                    rule__AttributeCS__Group_0_0__0();
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0_in_rule__AttributeCS__Alternatives_5_0_1_07552);
+                    rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -10805,7 +10805,7 @@
                     }
 
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getGroup_0_0()); 
+                       after(grammarAccess.getAttributeCSAccess().getIsDerivedAssignment_5_0_1_0_0()); 
                     }
 
                     }
@@ -10814,27 +10814,17 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3513:6: ( ( rule__AttributeCS__Group_0_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3513:6: ( '!derived' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3513:6: ( ( rule__AttributeCS__Group_0_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3514:1: ( rule__AttributeCS__Group_0_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3513:6: ( '!derived' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3514:1: '!derived'
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getGroup_0_1()); 
+                       before(grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3515:1: ( rule__AttributeCS__Group_0_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3515:2: rule__AttributeCS__Group_0_1__0
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_0_1__0_in_rule__AttributeCS__Alternatives_07570);
-                    rule__AttributeCS__Group_0_1__0();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
+                    match(input,54,FollowSets000.FOLLOW_54_in_rule__AttributeCS__Alternatives_5_0_1_07571); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getGroup_0_1()); 
+                       after(grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()); 
                     }
 
                     }
@@ -10856,122 +10846,48 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__Alternatives_0"
+    // $ANTLR end "rule__AttributeCS__Alternatives_5_0_1_0"
 
 
     // $ANTLR start "rule__AttributeCS__Alternatives_5_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3524:1: rule__AttributeCS__Alternatives_5_1_0 : ( ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_0 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_1 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_2 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_3 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_4 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_5 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_6 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_7 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_8 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_9 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_10 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_11 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_12 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_13 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_14 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_15 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3526:1: rule__AttributeCS__Alternatives_5_1_0 : ( ( ( rule__AttributeCS__IsIdAssignment_5_1_0_0 ) ) | ( '!id' ) );
     public final void rule__AttributeCS__Alternatives_5_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3528:1: ( ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_0 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_1 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_2 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_3 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_4 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_5 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_6 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_7 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_8 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_9 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_10 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_11 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_12 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_13 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_14 ) ) | ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_15 ) ) )
-            int alt9=16;
-            switch ( input.LA(1) ) {
-            case 26:
-                {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3530:1: ( ( ( rule__AttributeCS__IsIdAssignment_5_1_0_0 ) ) | ( '!id' ) )
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0==29) ) {
                 alt9=1;
-                }
-                break;
-            case 120:
-                {
+            }
+            else if ( (LA9_0==55) ) {
                 alt9=2;
-                }
-                break;
-            case 29:
-                {
-                alt9=3;
-                }
-                break;
-            case 121:
-                {
-                alt9=4;
-                }
-                break;
-            case 37:
-                {
-                alt9=5;
-                }
-                break;
-            case 122:
-                {
-                alt9=6;
-                }
-                break;
-            case 43:
-                {
-                alt9=7;
-                }
-                break;
-            case 123:
-                {
-                alt9=8;
-                }
-                break;
-            case 49:
-                {
-                alt9=9;
-                }
-                break;
-            case 124:
-                {
-                alt9=10;
-                }
-                break;
-            case 50:
-                {
-                alt9=11;
-                }
-                break;
-            case 125:
-                {
-                alt9=12;
-                }
-                break;
-            case 51:
-                {
-                alt9=13;
-                }
-                break;
-            case 126:
-                {
-                alt9=14;
-                }
-                break;
-            case 52:
-                {
-                alt9=15;
-                }
-                break;
-            case 127:
-                {
-                alt9=16;
-                }
-                break;
-            default:
+            }
+            else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 9, 0, input);
 
                 throw nvae;
             }
-
             switch (alt9) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3529:1: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3531:1: ( ( rule__AttributeCS__IsIdAssignment_5_1_0_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3529:1: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3530:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3531:1: ( ( rule__AttributeCS__IsIdAssignment_5_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3532:1: ( rule__AttributeCS__IsIdAssignment_5_1_0_0 )
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_0()); 
+                       before(grammarAccess.getAttributeCSAccess().getIsIdAssignment_5_1_0_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3531:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3531:2: rule__AttributeCS__QualifiersAssignment_5_1_0_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3533:1: ( rule__AttributeCS__IsIdAssignment_5_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3533:2: rule__AttributeCS__IsIdAssignment_5_1_0_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_0_in_rule__AttributeCS__Alternatives_5_1_07603);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_0();
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__IsIdAssignment_5_1_0_0_in_rule__AttributeCS__Alternatives_5_1_07605);
+                    rule__AttributeCS__IsIdAssignment_5_1_0_0();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -10979,7 +10895,7 @@
                     }
 
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_0()); 
+                       after(grammarAccess.getAttributeCSAccess().getIsIdAssignment_5_1_0_0()); 
                     }
 
                     }
@@ -10988,433 +10904,17 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3535:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3537:6: ( '!id' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3535:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3536:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3537:6: ( '!id' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3538:1: '!id'
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_1()); 
+                       before(grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3537:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3537:2: rule__AttributeCS__QualifiersAssignment_5_1_0_1
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_1_in_rule__AttributeCS__Alternatives_5_1_07621);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
+                    match(input,55,FollowSets000.FOLLOW_55_in_rule__AttributeCS__Alternatives_5_1_07624); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_1()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3541:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_2 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3541:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_2 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3542:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_2 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_2()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3543:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_2 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3543:2: rule__AttributeCS__QualifiersAssignment_5_1_0_2
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_2_in_rule__AttributeCS__Alternatives_5_1_07639);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_2();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_2()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3547:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_3 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3547:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_3 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3548:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_3 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_3()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3549:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_3 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3549:2: rule__AttributeCS__QualifiersAssignment_5_1_0_3
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_3_in_rule__AttributeCS__Alternatives_5_1_07657);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_3();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_3()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3553:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_4 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3553:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_4 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3554:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_4 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_4()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3555:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_4 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3555:2: rule__AttributeCS__QualifiersAssignment_5_1_0_4
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_4_in_rule__AttributeCS__Alternatives_5_1_07675);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_4();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_4()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3559:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_5 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3559:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_5 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3560:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_5 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_5()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3561:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_5 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3561:2: rule__AttributeCS__QualifiersAssignment_5_1_0_5
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_5_in_rule__AttributeCS__Alternatives_5_1_07693);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_5();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_5()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3565:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_6 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3565:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_6 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3566:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_6 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_6()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3567:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_6 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3567:2: rule__AttributeCS__QualifiersAssignment_5_1_0_6
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_6_in_rule__AttributeCS__Alternatives_5_1_07711);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_6();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_6()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 8 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3571:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_7 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3571:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_7 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3572:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_7 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_7()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3573:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_7 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3573:2: rule__AttributeCS__QualifiersAssignment_5_1_0_7
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_7_in_rule__AttributeCS__Alternatives_5_1_07729);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_7();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_7()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 9 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3577:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_8 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3577:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_8 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3578:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_8 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_8()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3579:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_8 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3579:2: rule__AttributeCS__QualifiersAssignment_5_1_0_8
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_8_in_rule__AttributeCS__Alternatives_5_1_07747);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_8();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_8()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 10 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3583:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_9 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3583:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_9 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3584:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_9 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_9()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3585:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_9 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3585:2: rule__AttributeCS__QualifiersAssignment_5_1_0_9
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_9_in_rule__AttributeCS__Alternatives_5_1_07765);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_9();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_9()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 11 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3589:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_10 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3589:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_10 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3590:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_10 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_10()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3591:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_10 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3591:2: rule__AttributeCS__QualifiersAssignment_5_1_0_10
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_10_in_rule__AttributeCS__Alternatives_5_1_07783);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_10();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_10()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 12 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3595:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_11 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3595:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_11 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3596:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_11 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_11()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3597:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_11 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3597:2: rule__AttributeCS__QualifiersAssignment_5_1_0_11
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_11_in_rule__AttributeCS__Alternatives_5_1_07801);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_11();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_11()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 13 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3601:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_12 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3601:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_12 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3602:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_12 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_12()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3603:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_12 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3603:2: rule__AttributeCS__QualifiersAssignment_5_1_0_12
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_12_in_rule__AttributeCS__Alternatives_5_1_07819);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_12();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_12()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 14 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3607:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_13 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3607:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_13 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3608:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_13 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_13()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3609:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_13 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3609:2: rule__AttributeCS__QualifiersAssignment_5_1_0_13
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_13_in_rule__AttributeCS__Alternatives_5_1_07837);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_13();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_13()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 15 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3613:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_14 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3613:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_14 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3614:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_14 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_14()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3615:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_14 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3615:2: rule__AttributeCS__QualifiersAssignment_5_1_0_14
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_14_in_rule__AttributeCS__Alternatives_5_1_07855);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_14();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_14()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 16 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3619:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_15 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3619:6: ( ( rule__AttributeCS__QualifiersAssignment_5_1_0_15 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3620:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_15 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_15()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3621:1: ( rule__AttributeCS__QualifiersAssignment_5_1_0_15 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3621:2: rule__AttributeCS__QualifiersAssignment_5_1_0_15
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_15_in_rule__AttributeCS__Alternatives_5_1_07873);
-                    rule__AttributeCS__QualifiersAssignment_5_1_0_15();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_5_1_0_15()); 
+                       after(grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()); 
                     }
 
                     }
@@ -11439,21 +10939,21 @@
     // $ANTLR end "rule__AttributeCS__Alternatives_5_1_0"
 
 
-    // $ANTLR start "rule__AttributeCS__Alternatives_6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3630:1: rule__AttributeCS__Alternatives_6 : ( ( ( rule__AttributeCS__Group_6_0__0 ) ) | ( ';' ) );
-    public final void rule__AttributeCS__Alternatives_6() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__Alternatives_5_2_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3550:1: rule__AttributeCS__Alternatives_5_2_0 : ( ( ( rule__AttributeCS__IsOrderedAssignment_5_2_0_0 ) ) | ( '!ordered' ) );
+    public final void rule__AttributeCS__Alternatives_5_2_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3634:1: ( ( ( rule__AttributeCS__Group_6_0__0 ) ) | ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3554:1: ( ( ( rule__AttributeCS__IsOrderedAssignment_5_2_0_0 ) ) | ( '!ordered' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
-            if ( (LA10_0==99) ) {
+            if ( (LA10_0==37) ) {
                 alt10=1;
             }
-            else if ( (LA10_0==53) ) {
+            else if ( (LA10_0==56) ) {
                 alt10=2;
             }
             else {
@@ -11465,18 +10965,558 @@
             }
             switch (alt10) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3635:1: ( ( rule__AttributeCS__Group_6_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3555:1: ( ( rule__AttributeCS__IsOrderedAssignment_5_2_0_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3635:1: ( ( rule__AttributeCS__Group_6_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3636:1: ( rule__AttributeCS__Group_6_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3555:1: ( ( rule__AttributeCS__IsOrderedAssignment_5_2_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3556:1: ( rule__AttributeCS__IsOrderedAssignment_5_2_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getIsOrderedAssignment_5_2_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3557:1: ( rule__AttributeCS__IsOrderedAssignment_5_2_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3557:2: rule__AttributeCS__IsOrderedAssignment_5_2_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__IsOrderedAssignment_5_2_0_0_in_rule__AttributeCS__Alternatives_5_2_07658);
+                    rule__AttributeCS__IsOrderedAssignment_5_2_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getIsOrderedAssignment_5_2_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3561:6: ( '!ordered' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3561:6: ( '!ordered' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3562:1: '!ordered'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()); 
+                    }
+                    match(input,56,FollowSets000.FOLLOW_56_in_rule__AttributeCS__Alternatives_5_2_07677); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Alternatives_5_2_0"
+
+
+    // $ANTLR start "rule__AttributeCS__Alternatives_5_3_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3574:1: rule__AttributeCS__Alternatives_5_3_0 : ( ( ( rule__AttributeCS__IsReadonlyAssignment_5_3_0_0 ) ) | ( '!readonly' ) );
+    public final void rule__AttributeCS__Alternatives_5_3_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3578:1: ( ( ( rule__AttributeCS__IsReadonlyAssignment_5_3_0_0 ) ) | ( '!readonly' ) )
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0==43) ) {
+                alt11=1;
+            }
+            else if ( (LA11_0==57) ) {
+                alt11=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 11, 0, input);
+
+                throw nvae;
+            }
+            switch (alt11) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3579:1: ( ( rule__AttributeCS__IsReadonlyAssignment_5_3_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3579:1: ( ( rule__AttributeCS__IsReadonlyAssignment_5_3_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3580:1: ( rule__AttributeCS__IsReadonlyAssignment_5_3_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getIsReadonlyAssignment_5_3_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3581:1: ( rule__AttributeCS__IsReadonlyAssignment_5_3_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3581:2: rule__AttributeCS__IsReadonlyAssignment_5_3_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__IsReadonlyAssignment_5_3_0_0_in_rule__AttributeCS__Alternatives_5_3_07711);
+                    rule__AttributeCS__IsReadonlyAssignment_5_3_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getIsReadonlyAssignment_5_3_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3585:6: ( '!readonly' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3585:6: ( '!readonly' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3586:1: '!readonly'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()); 
+                    }
+                    match(input,57,FollowSets000.FOLLOW_57_in_rule__AttributeCS__Alternatives_5_3_07730); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Alternatives_5_3_0"
+
+
+    // $ANTLR start "rule__AttributeCS__Alternatives_5_4_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3598:1: rule__AttributeCS__Alternatives_5_4_0 : ( ( ( rule__AttributeCS__IsTransientAssignment_5_4_0_0 ) ) | ( '!transient' ) );
+    public final void rule__AttributeCS__Alternatives_5_4_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3602:1: ( ( ( rule__AttributeCS__IsTransientAssignment_5_4_0_0 ) ) | ( '!transient' ) )
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0==49) ) {
+                alt12=1;
+            }
+            else if ( (LA12_0==58) ) {
+                alt12=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 12, 0, input);
+
+                throw nvae;
+            }
+            switch (alt12) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3603:1: ( ( rule__AttributeCS__IsTransientAssignment_5_4_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3603:1: ( ( rule__AttributeCS__IsTransientAssignment_5_4_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3604:1: ( rule__AttributeCS__IsTransientAssignment_5_4_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getIsTransientAssignment_5_4_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3605:1: ( rule__AttributeCS__IsTransientAssignment_5_4_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3605:2: rule__AttributeCS__IsTransientAssignment_5_4_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__IsTransientAssignment_5_4_0_0_in_rule__AttributeCS__Alternatives_5_4_07764);
+                    rule__AttributeCS__IsTransientAssignment_5_4_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getIsTransientAssignment_5_4_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3609:6: ( '!transient' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3609:6: ( '!transient' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3610:1: '!transient'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()); 
+                    }
+                    match(input,58,FollowSets000.FOLLOW_58_in_rule__AttributeCS__Alternatives_5_4_07783); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Alternatives_5_4_0"
+
+
+    // $ANTLR start "rule__AttributeCS__Alternatives_5_5_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3622:1: rule__AttributeCS__Alternatives_5_5_0 : ( ( ( rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0 ) ) | ( 'unique' ) );
+    public final void rule__AttributeCS__Alternatives_5_5_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3626:1: ( ( ( rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0 ) ) | ( 'unique' ) )
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==129) ) {
+                alt13=1;
+            }
+            else if ( (LA13_0==50) ) {
+                alt13=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 13, 0, input);
+
+                throw nvae;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3627:1: ( ( rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3627:1: ( ( rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3628:1: ( rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getIsNotUniqueAssignment_5_5_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3629:1: ( rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3629:2: rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0_in_rule__AttributeCS__Alternatives_5_5_07817);
+                    rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getIsNotUniqueAssignment_5_5_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3633:6: ( 'unique' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3633:6: ( 'unique' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3634:1: 'unique'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()); 
+                    }
+                    match(input,50,FollowSets000.FOLLOW_50_in_rule__AttributeCS__Alternatives_5_5_07836); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Alternatives_5_5_0"
+
+
+    // $ANTLR start "rule__AttributeCS__Alternatives_5_6_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3646:1: rule__AttributeCS__Alternatives_5_6_0 : ( ( ( rule__AttributeCS__IsUnsettableAssignment_5_6_0_0 ) ) | ( '!unsettable' ) );
+    public final void rule__AttributeCS__Alternatives_5_6_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3650:1: ( ( ( rule__AttributeCS__IsUnsettableAssignment_5_6_0_0 ) ) | ( '!unsettable' ) )
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( (LA14_0==51) ) {
+                alt14=1;
+            }
+            else if ( (LA14_0==59) ) {
+                alt14=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 14, 0, input);
+
+                throw nvae;
+            }
+            switch (alt14) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3651:1: ( ( rule__AttributeCS__IsUnsettableAssignment_5_6_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3651:1: ( ( rule__AttributeCS__IsUnsettableAssignment_5_6_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3652:1: ( rule__AttributeCS__IsUnsettableAssignment_5_6_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getIsUnsettableAssignment_5_6_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3653:1: ( rule__AttributeCS__IsUnsettableAssignment_5_6_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3653:2: rule__AttributeCS__IsUnsettableAssignment_5_6_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__IsUnsettableAssignment_5_6_0_0_in_rule__AttributeCS__Alternatives_5_6_07870);
+                    rule__AttributeCS__IsUnsettableAssignment_5_6_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getIsUnsettableAssignment_5_6_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3657:6: ( '!unsettable' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3657:6: ( '!unsettable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3658:1: '!unsettable'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()); 
+                    }
+                    match(input,59,FollowSets000.FOLLOW_59_in_rule__AttributeCS__Alternatives_5_6_07889); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Alternatives_5_6_0"
+
+
+    // $ANTLR start "rule__AttributeCS__Alternatives_5_7_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3670:1: rule__AttributeCS__Alternatives_5_7_0_0 : ( ( ( rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0 ) ) | ( '!volatile' ) );
+    public final void rule__AttributeCS__Alternatives_5_7_0_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3674:1: ( ( ( rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0 ) ) | ( '!volatile' ) )
+            int alt15=2;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0==52) ) {
+                alt15=1;
+            }
+            else if ( (LA15_0==60) ) {
+                alt15=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 15, 0, input);
+
+                throw nvae;
+            }
+            switch (alt15) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3675:1: ( ( rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3675:1: ( ( rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3676:1: ( rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getIsVolatileAssignment_5_7_0_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3677:1: ( rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3677:2: rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0_in_rule__AttributeCS__Alternatives_5_7_0_07923);
+                    rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getIsVolatileAssignment_5_7_0_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3681:6: ( '!volatile' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3681:6: ( '!volatile' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3682:1: '!volatile'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()); 
+                    }
+                    match(input,60,FollowSets000.FOLLOW_60_in_rule__AttributeCS__Alternatives_5_7_0_07942); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Alternatives_5_7_0_0"
+
+
+    // $ANTLR start "rule__AttributeCS__Alternatives_6"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3694:1: rule__AttributeCS__Alternatives_6 : ( ( ( rule__AttributeCS__Group_6_0__0 ) ) | ( ';' ) );
+    public final void rule__AttributeCS__Alternatives_6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3698:1: ( ( ( rule__AttributeCS__Group_6_0__0 ) ) | ( ';' ) )
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==108) ) {
+                alt16=1;
+            }
+            else if ( (LA16_0==53) ) {
+                alt16=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 16, 0, input);
+
+                throw nvae;
+            }
+            switch (alt16) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3699:1: ( ( rule__AttributeCS__Group_6_0__0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3699:1: ( ( rule__AttributeCS__Group_6_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3700:1: ( rule__AttributeCS__Group_6_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getAttributeCSAccess().getGroup_6_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3637:1: ( rule__AttributeCS__Group_6_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3637:2: rule__AttributeCS__Group_6_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3701:1: ( rule__AttributeCS__Group_6_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3701:2: rule__AttributeCS__Group_6_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__0_in_rule__AttributeCS__Alternatives_67906);
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__0_in_rule__AttributeCS__Alternatives_67976);
                     rule__AttributeCS__Group_6_0__0();
 
                     state._fsp--;
@@ -11494,15 +11534,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3641:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3705:6: ( ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3641:6: ( ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3642:1: ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3705:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3706:1: ';'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_1()); 
                     }
-                    match(input,53,FollowSets000.FOLLOW_53_in_rule__AttributeCS__Alternatives_67925); if (state.failed) return ;
+                    match(input,53,FollowSets000.FOLLOW_53_in_rule__AttributeCS__Alternatives_67995); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_1()); 
                     }
@@ -11530,54 +11570,54 @@
 
 
     // $ANTLR start "rule__AttributeCS__Alternatives_6_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3654:1: rule__AttributeCS__Alternatives_6_0_1 : ( ( ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 ) ) | ( ( rule__AttributeCS__Group_6_0_1_1__0 ) ) | ( ( rule__AttributeCS__Group_6_0_1_2__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3718:1: rule__AttributeCS__Alternatives_6_0_1 : ( ( ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 ) ) | ( ( rule__AttributeCS__Group_6_0_1_1__0 ) ) | ( ( rule__AttributeCS__Group_6_0_1_2__0 ) ) );
     public final void rule__AttributeCS__Alternatives_6_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3658:1: ( ( ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 ) ) | ( ( rule__AttributeCS__Group_6_0_1_1__0 ) ) | ( ( rule__AttributeCS__Group_6_0_1_2__0 ) ) )
-            int alt11=3;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3722:1: ( ( ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 ) ) | ( ( rule__AttributeCS__Group_6_0_1_1__0 ) ) | ( ( rule__AttributeCS__Group_6_0_1_2__0 ) ) )
+            int alt17=3;
             switch ( input.LA(1) ) {
-            case 55:
-            case 56:
-            case 60:
+            case 64:
+            case 65:
+            case 69:
                 {
-                alt11=1;
+                alt17=1;
                 }
                 break;
             case 25:
                 {
-                alt11=2;
+                alt17=2;
                 }
                 break;
             case 31:
                 {
-                alt11=3;
+                alt17=3;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 11, 0, input);
+                    new NoViableAltException("", 17, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt11) {
+            switch (alt17) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3659:1: ( ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3723:1: ( ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3659:1: ( ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3660:1: ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3723:1: ( ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3724:1: ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getAttributeCSAccess().getOwnedAnnotationsAssignment_6_0_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3661:1: ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3661:2: rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3725:1: ( rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3725:2: rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0_in_rule__AttributeCS__Alternatives_6_0_17959);
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0_in_rule__AttributeCS__Alternatives_6_0_18029);
                     rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0();
 
                     state._fsp--;
@@ -11595,18 +11635,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3665:6: ( ( rule__AttributeCS__Group_6_0_1_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3729:6: ( ( rule__AttributeCS__Group_6_0_1_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3665:6: ( ( rule__AttributeCS__Group_6_0_1_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3666:1: ( rule__AttributeCS__Group_6_0_1_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3729:6: ( ( rule__AttributeCS__Group_6_0_1_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3730:1: ( rule__AttributeCS__Group_6_0_1_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getAttributeCSAccess().getGroup_6_0_1_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3667:1: ( rule__AttributeCS__Group_6_0_1_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3667:2: rule__AttributeCS__Group_6_0_1_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3731:1: ( rule__AttributeCS__Group_6_0_1_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3731:2: rule__AttributeCS__Group_6_0_1_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__0_in_rule__AttributeCS__Alternatives_6_0_17977);
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__0_in_rule__AttributeCS__Alternatives_6_0_18047);
                     rule__AttributeCS__Group_6_0_1_1__0();
 
                     state._fsp--;
@@ -11624,18 +11664,18 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3671:6: ( ( rule__AttributeCS__Group_6_0_1_2__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3735:6: ( ( rule__AttributeCS__Group_6_0_1_2__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3671:6: ( ( rule__AttributeCS__Group_6_0_1_2__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3672:1: ( rule__AttributeCS__Group_6_0_1_2__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3735:6: ( ( rule__AttributeCS__Group_6_0_1_2__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3736:1: ( rule__AttributeCS__Group_6_0_1_2__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getAttributeCSAccess().getGroup_6_0_1_2()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3673:1: ( rule__AttributeCS__Group_6_0_1_2__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3673:2: rule__AttributeCS__Group_6_0_1_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3737:1: ( rule__AttributeCS__Group_6_0_1_2__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3737:2: rule__AttributeCS__Group_6_0_1_2__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__0_in_rule__AttributeCS__Alternatives_6_0_17995);
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__0_in_rule__AttributeCS__Alternatives_6_0_18065);
                     rule__AttributeCS__Group_6_0_1_2__0();
 
                     state._fsp--;
@@ -11670,51 +11710,51 @@
 
 
     // $ANTLR start "rule__ClassCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3682:1: rule__ClassCS__Alternatives : ( ( ruleStructuredClassCS ) | ( ruleDataTypeCS ) | ( ruleEnumerationCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3746:1: rule__ClassCS__Alternatives : ( ( ruleStructuredClassCS ) | ( ruleDataTypeCS ) | ( ruleEnumerationCS ) );
     public final void rule__ClassCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3686:1: ( ( ruleStructuredClassCS ) | ( ruleDataTypeCS ) | ( ruleEnumerationCS ) )
-            int alt12=3;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3750:1: ( ( ruleStructuredClassCS ) | ( ruleDataTypeCS ) | ( ruleEnumerationCS ) )
+            int alt18=3;
             switch ( input.LA(1) ) {
             case 17:
             case 21:
                 {
-                alt12=1;
+                alt18=1;
                 }
                 break;
             case 23:
             case 41:
                 {
-                alt12=2;
+                alt18=2;
                 }
                 break;
             case 27:
                 {
-                alt12=3;
+                alt18=3;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 12, 0, input);
+                    new NoViableAltException("", 18, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt12) {
+            switch (alt18) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3687:1: ( ruleStructuredClassCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3751:1: ( ruleStructuredClassCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3687:1: ( ruleStructuredClassCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3688:1: ruleStructuredClassCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3751:1: ( ruleStructuredClassCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3752:1: ruleStructuredClassCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getClassCSAccess().getStructuredClassCSParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleStructuredClassCS_in_rule__ClassCS__Alternatives8028);
+                    pushFollow(FollowSets000.FOLLOW_ruleStructuredClassCS_in_rule__ClassCS__Alternatives8098);
                     ruleStructuredClassCS();
 
                     state._fsp--;
@@ -11729,15 +11769,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3693:6: ( ruleDataTypeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3757:6: ( ruleDataTypeCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3693:6: ( ruleDataTypeCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3694:1: ruleDataTypeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3757:6: ( ruleDataTypeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3758:1: ruleDataTypeCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getClassCSAccess().getDataTypeCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleDataTypeCS_in_rule__ClassCS__Alternatives8045);
+                    pushFollow(FollowSets000.FOLLOW_ruleDataTypeCS_in_rule__ClassCS__Alternatives8115);
                     ruleDataTypeCS();
 
                     state._fsp--;
@@ -11752,15 +11792,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3699:6: ( ruleEnumerationCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3763:6: ( ruleEnumerationCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3699:6: ( ruleEnumerationCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3700:1: ruleEnumerationCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3763:6: ( ruleEnumerationCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3764:1: ruleEnumerationCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getClassCSAccess().getEnumerationCSParserRuleCall_2()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationCS_in_rule__ClassCS__Alternatives8062);
+                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationCS_in_rule__ClassCS__Alternatives8132);
                     ruleEnumerationCS();
 
                     state._fsp--;
@@ -11792,43 +11832,43 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Alternatives_5_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3710:1: rule__DataTypeCS__Alternatives_5_1 : ( ( ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 ) ) | ( '!serializable' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3774:1: rule__DataTypeCS__Alternatives_5_1 : ( ( ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 ) ) | ( '!serializable' ) );
     public final void rule__DataTypeCS__Alternatives_5_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3714:1: ( ( ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 ) ) | ( '!serializable' ) )
-            int alt13=2;
-            int LA13_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3778:1: ( ( ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 ) ) | ( '!serializable' ) )
+            int alt19=2;
+            int LA19_0 = input.LA(1);
 
-            if ( (LA13_0==59) ) {
-                alt13=1;
+            if ( (LA19_0==68) ) {
+                alt19=1;
             }
-            else if ( (LA13_0==54) ) {
-                alt13=2;
+            else if ( (LA19_0==61) ) {
+                alt19=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 13, 0, input);
+                    new NoViableAltException("", 19, 0, input);
 
                 throw nvae;
             }
-            switch (alt13) {
+            switch (alt19) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3715:1: ( ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3779:1: ( ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3715:1: ( ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3716:1: ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3779:1: ( ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3780:1: ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDataTypeCSAccess().getIsSerializableAssignment_5_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3717:1: ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3717:2: rule__DataTypeCS__IsSerializableAssignment_5_1_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3781:1: ( rule__DataTypeCS__IsSerializableAssignment_5_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3781:2: rule__DataTypeCS__IsSerializableAssignment_5_1_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__IsSerializableAssignment_5_1_0_in_rule__DataTypeCS__Alternatives_5_18094);
+                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__IsSerializableAssignment_5_1_0_in_rule__DataTypeCS__Alternatives_5_18164);
                     rule__DataTypeCS__IsSerializableAssignment_5_1_0();
 
                     state._fsp--;
@@ -11846,15 +11886,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3721:6: ( '!serializable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3785:6: ( '!serializable' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3721:6: ( '!serializable' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3722:1: '!serializable'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3785:6: ( '!serializable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3786:1: '!serializable'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDataTypeCSAccess().getSerializableKeyword_5_1_1()); 
                     }
-                    match(input,54,FollowSets000.FOLLOW_54_in_rule__DataTypeCS__Alternatives_5_18113); if (state.failed) return ;
+                    match(input,61,FollowSets000.FOLLOW_61_in_rule__DataTypeCS__Alternatives_5_18183); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getDataTypeCSAccess().getSerializableKeyword_5_1_1()); 
                     }
@@ -11882,43 +11922,43 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Alternatives_6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3734:1: rule__DataTypeCS__Alternatives_6 : ( ( ( rule__DataTypeCS__Group_6_0__0 ) ) | ( ';' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3798:1: rule__DataTypeCS__Alternatives_6 : ( ( ( rule__DataTypeCS__Group_6_0__0 ) ) | ( ';' ) );
     public final void rule__DataTypeCS__Alternatives_6() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3738:1: ( ( ( rule__DataTypeCS__Group_6_0__0 ) ) | ( ';' ) )
-            int alt14=2;
-            int LA14_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3802:1: ( ( ( rule__DataTypeCS__Group_6_0__0 ) ) | ( ';' ) )
+            int alt20=2;
+            int LA20_0 = input.LA(1);
 
-            if ( (LA14_0==99) ) {
-                alt14=1;
+            if ( (LA20_0==108) ) {
+                alt20=1;
             }
-            else if ( (LA14_0==53) ) {
-                alt14=2;
+            else if ( (LA20_0==53) ) {
+                alt20=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 14, 0, input);
+                    new NoViableAltException("", 20, 0, input);
 
                 throw nvae;
             }
-            switch (alt14) {
+            switch (alt20) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3739:1: ( ( rule__DataTypeCS__Group_6_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3803:1: ( ( rule__DataTypeCS__Group_6_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3739:1: ( ( rule__DataTypeCS__Group_6_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3740:1: ( rule__DataTypeCS__Group_6_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3803:1: ( ( rule__DataTypeCS__Group_6_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3804:1: ( rule__DataTypeCS__Group_6_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDataTypeCSAccess().getGroup_6_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3741:1: ( rule__DataTypeCS__Group_6_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3741:2: rule__DataTypeCS__Group_6_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3805:1: ( rule__DataTypeCS__Group_6_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3805:2: rule__DataTypeCS__Group_6_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__0_in_rule__DataTypeCS__Alternatives_68147);
+                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__0_in_rule__DataTypeCS__Alternatives_68217);
                     rule__DataTypeCS__Group_6_0__0();
 
                     state._fsp--;
@@ -11936,15 +11976,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3745:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3809:6: ( ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3745:6: ( ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3746:1: ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3809:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3810:1: ';'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDataTypeCSAccess().getSemicolonKeyword_6_1()); 
                     }
-                    match(input,53,FollowSets000.FOLLOW_53_in_rule__DataTypeCS__Alternatives_68166); if (state.failed) return ;
+                    match(input,53,FollowSets000.FOLLOW_53_in_rule__DataTypeCS__Alternatives_68236); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getDataTypeCSAccess().getSemicolonKeyword_6_1()); 
                     }
@@ -11972,43 +12012,43 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Alternatives_6_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3758:1: rule__DataTypeCS__Alternatives_6_0_1 : ( ( ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 ) ) | ( ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3822:1: rule__DataTypeCS__Alternatives_6_0_1 : ( ( ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 ) ) | ( ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 ) ) );
     public final void rule__DataTypeCS__Alternatives_6_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3762:1: ( ( ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 ) ) | ( ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 ) ) )
-            int alt15=2;
-            int LA15_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3826:1: ( ( ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 ) ) | ( ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 ) ) )
+            int alt21=2;
+            int LA21_0 = input.LA(1);
 
-            if ( ((LA15_0>=55 && LA15_0<=56)||LA15_0==60) ) {
-                alt15=1;
+            if ( ((LA21_0>=64 && LA21_0<=65)||LA21_0==69) ) {
+                alt21=1;
             }
-            else if ( (LA15_0==20||LA15_0==57) ) {
-                alt15=2;
+            else if ( (LA21_0==20||LA21_0==66) ) {
+                alt21=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 15, 0, input);
+                    new NoViableAltException("", 21, 0, input);
 
                 throw nvae;
             }
-            switch (alt15) {
+            switch (alt21) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3763:1: ( ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3827:1: ( ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3763:1: ( ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3764:1: ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3827:1: ( ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3828:1: ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDataTypeCSAccess().getOwnedAnnotationsAssignment_6_0_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3765:1: ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3765:2: rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3829:1: ( rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3829:2: rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0_in_rule__DataTypeCS__Alternatives_6_0_18200);
+                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0_in_rule__DataTypeCS__Alternatives_6_0_18270);
                     rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0();
 
                     state._fsp--;
@@ -12026,18 +12066,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3769:6: ( ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3833:6: ( ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3769:6: ( ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3770:1: ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3833:6: ( ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3834:1: ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDataTypeCSAccess().getOwnedConstraintsAssignment_6_0_1_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3771:1: ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3771:2: rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3835:1: ( rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3835:2: rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1_in_rule__DataTypeCS__Alternatives_6_0_18218);
+                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1_in_rule__DataTypeCS__Alternatives_6_0_18288);
                     rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1();
 
                     state._fsp--;
@@ -12072,40 +12112,40 @@
 
 
     // $ANTLR start "rule__DetailCS__NameAlternatives_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3780:1: rule__DetailCS__NameAlternatives_0_0 : ( ( ruleUnrestrictedName ) | ( RULE_SINGLE_QUOTED_STRING ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3844:1: rule__DetailCS__NameAlternatives_0_0 : ( ( ruleUnrestrictedName ) | ( RULE_SINGLE_QUOTED_STRING ) );
     public final void rule__DetailCS__NameAlternatives_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3784:1: ( ( ruleUnrestrictedName ) | ( RULE_SINGLE_QUOTED_STRING ) )
-            int alt16=2;
-            int LA16_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3848:1: ( ( ruleUnrestrictedName ) | ( RULE_SINGLE_QUOTED_STRING ) )
+            int alt22=2;
+            int LA22_0 = input.LA(1);
 
-            if ( ((LA16_0>=RULE_SIMPLE_ID && LA16_0<=RULE_ESCAPED_ID)||(LA16_0>=17 && LA16_0<=52)||(LA16_0>=55 && LA16_0<=60)) ) {
-                alt16=1;
+            if ( ((LA22_0>=RULE_SIMPLE_ID && LA22_0<=RULE_ESCAPED_ID)||(LA22_0>=17 && LA22_0<=52)||(LA22_0>=64 && LA22_0<=69)) ) {
+                alt22=1;
             }
-            else if ( (LA16_0==RULE_SINGLE_QUOTED_STRING) ) {
-                alt16=2;
+            else if ( (LA22_0==RULE_SINGLE_QUOTED_STRING) ) {
+                alt22=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 16, 0, input);
+                    new NoViableAltException("", 22, 0, input);
 
                 throw nvae;
             }
-            switch (alt16) {
+            switch (alt22) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3785:1: ( ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3849:1: ( ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3785:1: ( ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3786:1: ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3849:1: ( ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3850:1: ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDetailCSAccess().getNameUnrestrictedNameParserRuleCall_0_0_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__DetailCS__NameAlternatives_0_08251);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__DetailCS__NameAlternatives_0_08321);
                     ruleUnrestrictedName();
 
                     state._fsp--;
@@ -12120,15 +12160,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3791:6: ( RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3855:6: ( RULE_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3791:6: ( RULE_SINGLE_QUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3792:1: RULE_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3855:6: ( RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3856:1: RULE_SINGLE_QUOTED_STRING
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDetailCSAccess().getNameSINGLE_QUOTED_STRINGTerminalRuleCall_0_0_1()); 
                     }
-                    match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DetailCS__NameAlternatives_0_08268); if (state.failed) return ;
+                    match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DetailCS__NameAlternatives_0_08338); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getDetailCSAccess().getNameSINGLE_QUOTED_STRINGTerminalRuleCall_0_0_1()); 
                     }
@@ -12156,40 +12196,40 @@
 
 
     // $ANTLR start "rule__DetailCS__ValuesAlternatives_2_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3802:1: rule__DetailCS__ValuesAlternatives_2_0 : ( ( RULE_SINGLE_QUOTED_STRING ) | ( RULE_ML_SINGLE_QUOTED_STRING ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3866:1: rule__DetailCS__ValuesAlternatives_2_0 : ( ( RULE_SINGLE_QUOTED_STRING ) | ( RULE_ML_SINGLE_QUOTED_STRING ) );
     public final void rule__DetailCS__ValuesAlternatives_2_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3806:1: ( ( RULE_SINGLE_QUOTED_STRING ) | ( RULE_ML_SINGLE_QUOTED_STRING ) )
-            int alt17=2;
-            int LA17_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3870:1: ( ( RULE_SINGLE_QUOTED_STRING ) | ( RULE_ML_SINGLE_QUOTED_STRING ) )
+            int alt23=2;
+            int LA23_0 = input.LA(1);
 
-            if ( (LA17_0==RULE_SINGLE_QUOTED_STRING) ) {
-                alt17=1;
+            if ( (LA23_0==RULE_SINGLE_QUOTED_STRING) ) {
+                alt23=1;
             }
-            else if ( (LA17_0==RULE_ML_SINGLE_QUOTED_STRING) ) {
-                alt17=2;
+            else if ( (LA23_0==RULE_ML_SINGLE_QUOTED_STRING) ) {
+                alt23=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 17, 0, input);
+                    new NoViableAltException("", 23, 0, input);
 
                 throw nvae;
             }
-            switch (alt17) {
+            switch (alt23) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3807:1: ( RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3871:1: ( RULE_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3807:1: ( RULE_SINGLE_QUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3808:1: RULE_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3871:1: ( RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3872:1: RULE_SINGLE_QUOTED_STRING
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDetailCSAccess().getValuesSINGLE_QUOTED_STRINGTerminalRuleCall_2_0_0()); 
                     }
-                    match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DetailCS__ValuesAlternatives_2_08300); if (state.failed) return ;
+                    match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DetailCS__ValuesAlternatives_2_08370); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getDetailCSAccess().getValuesSINGLE_QUOTED_STRINGTerminalRuleCall_2_0_0()); 
                     }
@@ -12200,15 +12240,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3813:6: ( RULE_ML_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3877:6: ( RULE_ML_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3813:6: ( RULE_ML_SINGLE_QUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3814:1: RULE_ML_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3877:6: ( RULE_ML_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3878:1: RULE_ML_SINGLE_QUOTED_STRING
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getDetailCSAccess().getValuesML_SINGLE_QUOTED_STRINGTerminalRuleCall_2_0_1()); 
                     }
-                    match(input,RULE_ML_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_ML_SINGLE_QUOTED_STRING_in_rule__DetailCS__ValuesAlternatives_2_08317); if (state.failed) return ;
+                    match(input,RULE_ML_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_ML_SINGLE_QUOTED_STRING_in_rule__DetailCS__ValuesAlternatives_2_08387); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getDetailCSAccess().getValuesML_SINGLE_QUOTED_STRINGTerminalRuleCall_2_0_1()); 
                     }
@@ -12236,43 +12276,43 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Alternatives_4_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3824:1: rule__EnumerationCS__Alternatives_4_1 : ( ( ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 ) ) | ( '!serializable' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3888:1: rule__EnumerationCS__Alternatives_4_1 : ( ( ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 ) ) | ( '!serializable' ) );
     public final void rule__EnumerationCS__Alternatives_4_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3828:1: ( ( ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 ) ) | ( '!serializable' ) )
-            int alt18=2;
-            int LA18_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3892:1: ( ( ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 ) ) | ( '!serializable' ) )
+            int alt24=2;
+            int LA24_0 = input.LA(1);
 
-            if ( (LA18_0==59) ) {
-                alt18=1;
+            if ( (LA24_0==68) ) {
+                alt24=1;
             }
-            else if ( (LA18_0==54) ) {
-                alt18=2;
+            else if ( (LA24_0==61) ) {
+                alt24=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 18, 0, input);
+                    new NoViableAltException("", 24, 0, input);
 
                 throw nvae;
             }
-            switch (alt18) {
+            switch (alt24) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3829:1: ( ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3893:1: ( ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3829:1: ( ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3830:1: ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3893:1: ( ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3894:1: ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationCSAccess().getIsSerializableAssignment_4_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3831:1: ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3831:2: rule__EnumerationCS__IsSerializableAssignment_4_1_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3895:1: ( rule__EnumerationCS__IsSerializableAssignment_4_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3895:2: rule__EnumerationCS__IsSerializableAssignment_4_1_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__IsSerializableAssignment_4_1_0_in_rule__EnumerationCS__Alternatives_4_18349);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__IsSerializableAssignment_4_1_0_in_rule__EnumerationCS__Alternatives_4_18419);
                     rule__EnumerationCS__IsSerializableAssignment_4_1_0();
 
                     state._fsp--;
@@ -12290,15 +12330,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3835:6: ( '!serializable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3899:6: ( '!serializable' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3835:6: ( '!serializable' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3836:1: '!serializable'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3899:6: ( '!serializable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3900:1: '!serializable'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationCSAccess().getSerializableKeyword_4_1_1()); 
                     }
-                    match(input,54,FollowSets000.FOLLOW_54_in_rule__EnumerationCS__Alternatives_4_18368); if (state.failed) return ;
+                    match(input,61,FollowSets000.FOLLOW_61_in_rule__EnumerationCS__Alternatives_4_18438); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEnumerationCSAccess().getSerializableKeyword_4_1_1()); 
                     }
@@ -12326,43 +12366,43 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Alternatives_5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3848:1: rule__EnumerationCS__Alternatives_5 : ( ( ( rule__EnumerationCS__Group_5_0__0 ) ) | ( ';' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3912:1: rule__EnumerationCS__Alternatives_5 : ( ( ( rule__EnumerationCS__Group_5_0__0 ) ) | ( ';' ) );
     public final void rule__EnumerationCS__Alternatives_5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3852:1: ( ( ( rule__EnumerationCS__Group_5_0__0 ) ) | ( ';' ) )
-            int alt19=2;
-            int LA19_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3916:1: ( ( ( rule__EnumerationCS__Group_5_0__0 ) ) | ( ';' ) )
+            int alt25=2;
+            int LA25_0 = input.LA(1);
 
-            if ( (LA19_0==99) ) {
-                alt19=1;
+            if ( (LA25_0==108) ) {
+                alt25=1;
             }
-            else if ( (LA19_0==53) ) {
-                alt19=2;
+            else if ( (LA25_0==53) ) {
+                alt25=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 19, 0, input);
+                    new NoViableAltException("", 25, 0, input);
 
                 throw nvae;
             }
-            switch (alt19) {
+            switch (alt25) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3853:1: ( ( rule__EnumerationCS__Group_5_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3917:1: ( ( rule__EnumerationCS__Group_5_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3853:1: ( ( rule__EnumerationCS__Group_5_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3854:1: ( rule__EnumerationCS__Group_5_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3917:1: ( ( rule__EnumerationCS__Group_5_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3918:1: ( rule__EnumerationCS__Group_5_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationCSAccess().getGroup_5_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3855:1: ( rule__EnumerationCS__Group_5_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3855:2: rule__EnumerationCS__Group_5_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3919:1: ( rule__EnumerationCS__Group_5_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3919:2: rule__EnumerationCS__Group_5_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__0_in_rule__EnumerationCS__Alternatives_58402);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__0_in_rule__EnumerationCS__Alternatives_58472);
                     rule__EnumerationCS__Group_5_0__0();
 
                     state._fsp--;
@@ -12380,15 +12420,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3859:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3923:6: ( ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3859:6: ( ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3860:1: ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3923:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3924:1: ';'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationCSAccess().getSemicolonKeyword_5_1()); 
                     }
-                    match(input,53,FollowSets000.FOLLOW_53_in_rule__EnumerationCS__Alternatives_58421); if (state.failed) return ;
+                    match(input,53,FollowSets000.FOLLOW_53_in_rule__EnumerationCS__Alternatives_58491); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEnumerationCSAccess().getSemicolonKeyword_5_1()); 
                     }
@@ -12416,20 +12456,20 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Alternatives_5_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3872:1: rule__EnumerationCS__Alternatives_5_0_1 : ( ( ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 ) ) | ( ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 ) ) | ( ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3936:1: rule__EnumerationCS__Alternatives_5_0_1 : ( ( ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 ) ) | ( ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 ) ) | ( ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 ) ) );
     public final void rule__EnumerationCS__Alternatives_5_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3876:1: ( ( ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 ) ) | ( ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 ) ) | ( ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 ) ) )
-            int alt20=3;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3940:1: ( ( ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 ) ) | ( ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 ) ) | ( ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 ) ) )
+            int alt26=3;
             switch ( input.LA(1) ) {
-            case 55:
-            case 56:
-            case 60:
+            case 64:
+            case 65:
+            case 69:
                 {
-                alt20=1;
+                alt26=1;
                 }
                 break;
             case RULE_SIMPLE_ID:
@@ -12469,57 +12509,57 @@
             case 50:
             case 51:
             case 52:
-            case 58:
+            case 67:
                 {
-                alt20=2;
+                alt26=2;
                 }
                 break;
             case 20:
                 {
-                int LA20_3 = input.LA(2);
+                int LA26_3 = input.LA(2);
 
-                if ( (LA20_3==57) ) {
-                    alt20=3;
+                if ( (LA26_3==66) ) {
+                    alt26=3;
                 }
-                else if ( (LA20_3==53||LA20_3==70||LA20_3==99) ) {
-                    alt20=2;
+                else if ( (LA26_3==53||LA26_3==79||LA26_3==108) ) {
+                    alt26=2;
                 }
                 else {
                     if (state.backtracking>0) {state.failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("", 20, 3, input);
+                        new NoViableAltException("", 26, 3, input);
 
                     throw nvae;
                 }
                 }
                 break;
-            case 57:
+            case 66:
                 {
-                alt20=3;
+                alt26=3;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 20, 0, input);
+                    new NoViableAltException("", 26, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt20) {
+            switch (alt26) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3877:1: ( ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3941:1: ( ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3877:1: ( ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3878:1: ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3941:1: ( ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3942:1: ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationCSAccess().getOwnedAnnotationsAssignment_5_0_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3879:1: ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3879:2: rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3943:1: ( rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3943:2: rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0_in_rule__EnumerationCS__Alternatives_5_0_18455);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0_in_rule__EnumerationCS__Alternatives_5_0_18525);
                     rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0();
 
                     state._fsp--;
@@ -12537,18 +12577,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3883:6: ( ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3947:6: ( ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3883:6: ( ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3884:1: ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3947:6: ( ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3948:1: ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationCSAccess().getOwnedLiteralsAssignment_5_0_1_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3885:1: ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3885:2: rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3949:1: ( rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3949:2: rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1_in_rule__EnumerationCS__Alternatives_5_0_18473);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1_in_rule__EnumerationCS__Alternatives_5_0_18543);
                     rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1();
 
                     state._fsp--;
@@ -12566,18 +12606,18 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3889:6: ( ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3953:6: ( ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3889:6: ( ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3890:1: ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3953:6: ( ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3954:1: ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationCSAccess().getOwnedConstraintsAssignment_5_0_1_2()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3891:1: ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3891:2: rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3955:1: ( rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3955:2: rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2_in_rule__EnumerationCS__Alternatives_5_0_18491);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2_in_rule__EnumerationCS__Alternatives_5_0_18561);
                     rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2();
 
                     state._fsp--;
@@ -12612,43 +12652,43 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Alternatives_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3900:1: rule__EnumerationLiteralCS__Alternatives_0 : ( ( ( rule__EnumerationLiteralCS__Group_0_0__0 ) ) | ( ( rule__EnumerationLiteralCS__NameAssignment_0_1 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3964:1: rule__EnumerationLiteralCS__Alternatives_0 : ( ( ( rule__EnumerationLiteralCS__Group_0_0__0 ) ) | ( ( rule__EnumerationLiteralCS__NameAssignment_0_1 ) ) );
     public final void rule__EnumerationLiteralCS__Alternatives_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3904:1: ( ( ( rule__EnumerationLiteralCS__Group_0_0__0 ) ) | ( ( rule__EnumerationLiteralCS__NameAssignment_0_1 ) ) )
-            int alt21=2;
-            int LA21_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3968:1: ( ( ( rule__EnumerationLiteralCS__Group_0_0__0 ) ) | ( ( rule__EnumerationLiteralCS__NameAssignment_0_1 ) ) )
+            int alt27=2;
+            int LA27_0 = input.LA(1);
 
-            if ( (LA21_0==58) ) {
-                alt21=1;
+            if ( (LA27_0==67) ) {
+                alt27=1;
             }
-            else if ( ((LA21_0>=RULE_SIMPLE_ID && LA21_0<=RULE_ESCAPED_ID)||(LA21_0>=17 && LA21_0<=52)) ) {
-                alt21=2;
+            else if ( ((LA27_0>=RULE_SIMPLE_ID && LA27_0<=RULE_ESCAPED_ID)||(LA27_0>=17 && LA27_0<=52)) ) {
+                alt27=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 21, 0, input);
+                    new NoViableAltException("", 27, 0, input);
 
                 throw nvae;
             }
-            switch (alt21) {
+            switch (alt27) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3905:1: ( ( rule__EnumerationLiteralCS__Group_0_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3969:1: ( ( rule__EnumerationLiteralCS__Group_0_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3905:1: ( ( rule__EnumerationLiteralCS__Group_0_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3906:1: ( rule__EnumerationLiteralCS__Group_0_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3969:1: ( ( rule__EnumerationLiteralCS__Group_0_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3970:1: ( rule__EnumerationLiteralCS__Group_0_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationLiteralCSAccess().getGroup_0_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3907:1: ( rule__EnumerationLiteralCS__Group_0_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3907:2: rule__EnumerationLiteralCS__Group_0_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3971:1: ( rule__EnumerationLiteralCS__Group_0_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3971:2: rule__EnumerationLiteralCS__Group_0_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_0_0__0_in_rule__EnumerationLiteralCS__Alternatives_08524);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_0_0__0_in_rule__EnumerationLiteralCS__Alternatives_08594);
                     rule__EnumerationLiteralCS__Group_0_0__0();
 
                     state._fsp--;
@@ -12666,18 +12706,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3911:6: ( ( rule__EnumerationLiteralCS__NameAssignment_0_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3975:6: ( ( rule__EnumerationLiteralCS__NameAssignment_0_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3911:6: ( ( rule__EnumerationLiteralCS__NameAssignment_0_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3912:1: ( rule__EnumerationLiteralCS__NameAssignment_0_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3975:6: ( ( rule__EnumerationLiteralCS__NameAssignment_0_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3976:1: ( rule__EnumerationLiteralCS__NameAssignment_0_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationLiteralCSAccess().getNameAssignment_0_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3913:1: ( rule__EnumerationLiteralCS__NameAssignment_0_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3913:2: rule__EnumerationLiteralCS__NameAssignment_0_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3977:1: ( rule__EnumerationLiteralCS__NameAssignment_0_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3977:2: rule__EnumerationLiteralCS__NameAssignment_0_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__NameAssignment_0_1_in_rule__EnumerationLiteralCS__Alternatives_08542);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__NameAssignment_0_1_in_rule__EnumerationLiteralCS__Alternatives_08612);
                     rule__EnumerationLiteralCS__NameAssignment_0_1();
 
                     state._fsp--;
@@ -12712,43 +12752,43 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Alternatives_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3922:1: rule__EnumerationLiteralCS__Alternatives_2 : ( ( ( rule__EnumerationLiteralCS__Group_2_0__0 ) ) | ( ';' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3986:1: rule__EnumerationLiteralCS__Alternatives_2 : ( ( ( rule__EnumerationLiteralCS__Group_2_0__0 ) ) | ( ';' ) );
     public final void rule__EnumerationLiteralCS__Alternatives_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3926:1: ( ( ( rule__EnumerationLiteralCS__Group_2_0__0 ) ) | ( ';' ) )
-            int alt22=2;
-            int LA22_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3990:1: ( ( ( rule__EnumerationLiteralCS__Group_2_0__0 ) ) | ( ';' ) )
+            int alt28=2;
+            int LA28_0 = input.LA(1);
 
-            if ( (LA22_0==99) ) {
-                alt22=1;
+            if ( (LA28_0==108) ) {
+                alt28=1;
             }
-            else if ( (LA22_0==53) ) {
-                alt22=2;
+            else if ( (LA28_0==53) ) {
+                alt28=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 22, 0, input);
+                    new NoViableAltException("", 28, 0, input);
 
                 throw nvae;
             }
-            switch (alt22) {
+            switch (alt28) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3927:1: ( ( rule__EnumerationLiteralCS__Group_2_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3991:1: ( ( rule__EnumerationLiteralCS__Group_2_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3927:1: ( ( rule__EnumerationLiteralCS__Group_2_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3928:1: ( rule__EnumerationLiteralCS__Group_2_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3991:1: ( ( rule__EnumerationLiteralCS__Group_2_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3992:1: ( rule__EnumerationLiteralCS__Group_2_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationLiteralCSAccess().getGroup_2_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3929:1: ( rule__EnumerationLiteralCS__Group_2_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3929:2: rule__EnumerationLiteralCS__Group_2_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3993:1: ( rule__EnumerationLiteralCS__Group_2_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3993:2: rule__EnumerationLiteralCS__Group_2_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__0_in_rule__EnumerationLiteralCS__Alternatives_28575);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__0_in_rule__EnumerationLiteralCS__Alternatives_28645);
                     rule__EnumerationLiteralCS__Group_2_0__0();
 
                     state._fsp--;
@@ -12766,15 +12806,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3933:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3997:6: ( ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3933:6: ( ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3934:1: ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3997:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3998:1: ';'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEnumerationLiteralCSAccess().getSemicolonKeyword_2_1()); 
                     }
-                    match(input,53,FollowSets000.FOLLOW_53_in_rule__EnumerationLiteralCS__Alternatives_28594); if (state.failed) return ;
+                    match(input,53,FollowSets000.FOLLOW_53_in_rule__EnumerationLiteralCS__Alternatives_28664); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEnumerationLiteralCSAccess().getSemicolonKeyword_2_1()); 
                     }
@@ -12802,26 +12842,26 @@
 
 
     // $ANTLR start "rule__ModelElementCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3946:1: rule__ModelElementCS__Alternatives : ( ( ruleClassCS ) | ( ruleEnumerationLiteralCS ) | ( ruleOperationCS ) | ( rulePackageCS ) | ( ruleStructuralFeatureCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4010:1: rule__ModelElementCS__Alternatives : ( ( ruleClassCS ) | ( ruleEnumerationLiteralCS ) | ( ruleOperationCS ) | ( rulePackageCS ) | ( ruleStructuralFeatureCS ) );
     public final void rule__ModelElementCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3950:1: ( ( ruleClassCS ) | ( ruleEnumerationLiteralCS ) | ( ruleOperationCS ) | ( rulePackageCS ) | ( ruleStructuralFeatureCS ) )
-            int alt23=5;
-            alt23 = dfa23.predict(input);
-            switch (alt23) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4014:1: ( ( ruleClassCS ) | ( ruleEnumerationLiteralCS ) | ( ruleOperationCS ) | ( rulePackageCS ) | ( ruleStructuralFeatureCS ) )
+            int alt29=5;
+            alt29 = dfa29.predict(input);
+            switch (alt29) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3951:1: ( ruleClassCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4015:1: ( ruleClassCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3951:1: ( ruleClassCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3952:1: ruleClassCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4015:1: ( ruleClassCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4016:1: ruleClassCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getModelElementCSAccess().getClassCSParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleClassCS_in_rule__ModelElementCS__Alternatives8628);
+                    pushFollow(FollowSets000.FOLLOW_ruleClassCS_in_rule__ModelElementCS__Alternatives8698);
                     ruleClassCS();
 
                     state._fsp--;
@@ -12836,15 +12876,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3957:6: ( ruleEnumerationLiteralCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4021:6: ( ruleEnumerationLiteralCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3957:6: ( ruleEnumerationLiteralCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3958:1: ruleEnumerationLiteralCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4021:6: ( ruleEnumerationLiteralCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4022:1: ruleEnumerationLiteralCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getModelElementCSAccess().getEnumerationLiteralCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralCS_in_rule__ModelElementCS__Alternatives8645);
+                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralCS_in_rule__ModelElementCS__Alternatives8715);
                     ruleEnumerationLiteralCS();
 
                     state._fsp--;
@@ -12859,15 +12899,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3963:6: ( ruleOperationCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4027:6: ( ruleOperationCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3963:6: ( ruleOperationCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3964:1: ruleOperationCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4027:6: ( ruleOperationCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4028:1: ruleOperationCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getModelElementCSAccess().getOperationCSParserRuleCall_2()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleOperationCS_in_rule__ModelElementCS__Alternatives8662);
+                    pushFollow(FollowSets000.FOLLOW_ruleOperationCS_in_rule__ModelElementCS__Alternatives8732);
                     ruleOperationCS();
 
                     state._fsp--;
@@ -12882,15 +12922,15 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3969:6: ( rulePackageCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4033:6: ( rulePackageCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3969:6: ( rulePackageCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3970:1: rulePackageCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4033:6: ( rulePackageCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4034:1: rulePackageCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getModelElementCSAccess().getPackageCSParserRuleCall_3()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePackageCS_in_rule__ModelElementCS__Alternatives8679);
+                    pushFollow(FollowSets000.FOLLOW_rulePackageCS_in_rule__ModelElementCS__Alternatives8749);
                     rulePackageCS();
 
                     state._fsp--;
@@ -12905,15 +12945,15 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3975:6: ( ruleStructuralFeatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4039:6: ( ruleStructuralFeatureCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3975:6: ( ruleStructuralFeatureCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3976:1: ruleStructuralFeatureCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4039:6: ( ruleStructuralFeatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4040:1: ruleStructuralFeatureCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getModelElementCSAccess().getStructuralFeatureCSParserRuleCall_4()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleStructuralFeatureCS_in_rule__ModelElementCS__Alternatives8696);
+                    pushFollow(FollowSets000.FOLLOW_ruleStructuralFeatureCS_in_rule__ModelElementCS__Alternatives8766);
                     ruleStructuralFeatureCS();
 
                     state._fsp--;
@@ -12944,45 +12984,45 @@
     // $ANTLR end "rule__ModelElementCS__Alternatives"
 
 
-    // $ANTLR start "rule__OperationCS__Alternatives_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3986:1: rule__OperationCS__Alternatives_0 : ( ( ( rule__OperationCS__Group_0_0__0 ) ) | ( ( rule__OperationCS__Group_0_1__0 ) ) );
-    public final void rule__OperationCS__Alternatives_0() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__Alternatives_9_0_1_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4050:1: rule__OperationCS__Alternatives_9_0_1_0 : ( ( ( rule__OperationCS__IsDerivedAssignment_9_0_1_0_0 ) ) | ( '!derived' ) );
+    public final void rule__OperationCS__Alternatives_9_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3990:1: ( ( ( rule__OperationCS__Group_0_0__0 ) ) | ( ( rule__OperationCS__Group_0_1__0 ) ) )
-            int alt24=2;
-            int LA24_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4054:1: ( ( ( rule__OperationCS__IsDerivedAssignment_9_0_1_0_0 ) ) | ( '!derived' ) )
+            int alt30=2;
+            int LA30_0 = input.LA(1);
 
-            if ( (LA24_0==46) ) {
-                alt24=1;
+            if ( (LA30_0==26) ) {
+                alt30=1;
             }
-            else if ( (LA24_0==24) ) {
-                alt24=2;
+            else if ( (LA30_0==54) ) {
+                alt30=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 24, 0, input);
+                    new NoViableAltException("", 30, 0, input);
 
                 throw nvae;
             }
-            switch (alt24) {
+            switch (alt30) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3991:1: ( ( rule__OperationCS__Group_0_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4055:1: ( ( rule__OperationCS__IsDerivedAssignment_9_0_1_0_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3991:1: ( ( rule__OperationCS__Group_0_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3992:1: ( rule__OperationCS__Group_0_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4055:1: ( ( rule__OperationCS__IsDerivedAssignment_9_0_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4056:1: ( rule__OperationCS__IsDerivedAssignment_9_0_1_0_0 )
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getOperationCSAccess().getGroup_0_0()); 
+                       before(grammarAccess.getOperationCSAccess().getIsDerivedAssignment_9_0_1_0_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3993:1: ( rule__OperationCS__Group_0_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3993:2: rule__OperationCS__Group_0_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4057:1: ( rule__OperationCS__IsDerivedAssignment_9_0_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4057:2: rule__OperationCS__IsDerivedAssignment_9_0_1_0_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__Group_0_0__0_in_rule__OperationCS__Alternatives_08728);
-                    rule__OperationCS__Group_0_0__0();
+                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__IsDerivedAssignment_9_0_1_0_0_in_rule__OperationCS__Alternatives_9_0_1_08798);
+                    rule__OperationCS__IsDerivedAssignment_9_0_1_0_0();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -12990,7 +13030,7 @@
                     }
 
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getOperationCSAccess().getGroup_0_0()); 
+                       after(grammarAccess.getOperationCSAccess().getIsDerivedAssignment_9_0_1_0_0()); 
                     }
 
                     }
@@ -12999,27 +13039,17 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3997:6: ( ( rule__OperationCS__Group_0_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4061:6: ( '!derived' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3997:6: ( ( rule__OperationCS__Group_0_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3998:1: ( rule__OperationCS__Group_0_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4061:6: ( '!derived' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4062:1: '!derived'
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getOperationCSAccess().getGroup_0_1()); 
+                       before(grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3999:1: ( rule__OperationCS__Group_0_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:3999:2: rule__OperationCS__Group_0_1__0
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__Group_0_1__0_in_rule__OperationCS__Alternatives_08746);
-                    rule__OperationCS__Group_0_1__0();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
+                    match(input,54,FollowSets000.FOLLOW_54_in_rule__OperationCS__Alternatives_9_0_1_08817); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getOperationCSAccess().getGroup_0_1()); 
+                       after(grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1()); 
                     }
 
                     }
@@ -13041,72 +13071,48 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__Alternatives_0"
+    // $ANTLR end "rule__OperationCS__Alternatives_9_0_1_0"
 
 
     // $ANTLR start "rule__OperationCS__Alternatives_9_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4008:1: rule__OperationCS__Alternatives_9_1_0 : ( ( ( rule__OperationCS__QualifiersAssignment_9_1_0_0 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_1 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_2 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_3 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_4 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_5 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4074:1: rule__OperationCS__Alternatives_9_1_0 : ( ( ( rule__OperationCS__IsOrderedAssignment_9_1_0_0 ) ) | ( '!ordered' ) );
     public final void rule__OperationCS__Alternatives_9_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4012:1: ( ( ( rule__OperationCS__QualifiersAssignment_9_1_0_0 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_1 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_2 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_3 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_4 ) ) | ( ( rule__OperationCS__QualifiersAssignment_9_1_0_5 ) ) )
-            int alt25=6;
-            switch ( input.LA(1) ) {
-            case 26:
-                {
-                alt25=1;
-                }
-                break;
-            case 120:
-                {
-                alt25=2;
-                }
-                break;
-            case 37:
-                {
-                alt25=3;
-                }
-                break;
-            case 122:
-                {
-                alt25=4;
-                }
-                break;
-            case 50:
-                {
-                alt25=5;
-                }
-                break;
-            case 125:
-                {
-                alt25=6;
-                }
-                break;
-            default:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4078:1: ( ( ( rule__OperationCS__IsOrderedAssignment_9_1_0_0 ) ) | ( '!ordered' ) )
+            int alt31=2;
+            int LA31_0 = input.LA(1);
+
+            if ( (LA31_0==37) ) {
+                alt31=1;
+            }
+            else if ( (LA31_0==56) ) {
+                alt31=2;
+            }
+            else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 25, 0, input);
+                    new NoViableAltException("", 31, 0, input);
 
                 throw nvae;
             }
-
-            switch (alt25) {
+            switch (alt31) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4013:1: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4079:1: ( ( rule__OperationCS__IsOrderedAssignment_9_1_0_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4013:1: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4014:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4079:1: ( ( rule__OperationCS__IsOrderedAssignment_9_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4080:1: ( rule__OperationCS__IsOrderedAssignment_9_1_0_0 )
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_0()); 
+                       before(grammarAccess.getOperationCSAccess().getIsOrderedAssignment_9_1_0_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4015:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4015:2: rule__OperationCS__QualifiersAssignment_9_1_0_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4081:1: ( rule__OperationCS__IsOrderedAssignment_9_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4081:2: rule__OperationCS__IsOrderedAssignment_9_1_0_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_0_in_rule__OperationCS__Alternatives_9_1_08779);
-                    rule__OperationCS__QualifiersAssignment_9_1_0_0();
+                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__IsOrderedAssignment_9_1_0_0_in_rule__OperationCS__Alternatives_9_1_08851);
+                    rule__OperationCS__IsOrderedAssignment_9_1_0_0();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -13114,7 +13120,7 @@
                     }
 
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_0()); 
+                       after(grammarAccess.getOperationCSAccess().getIsOrderedAssignment_9_1_0_0()); 
                     }
 
                     }
@@ -13123,143 +13129,17 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4019:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4085:6: ( '!ordered' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4019:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4020:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4085:6: ( '!ordered' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4086:1: '!ordered'
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_1()); 
+                       before(grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4021:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4021:2: rule__OperationCS__QualifiersAssignment_9_1_0_1
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_1_in_rule__OperationCS__Alternatives_9_1_08797);
-                    rule__OperationCS__QualifiersAssignment_9_1_0_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
+                    match(input,56,FollowSets000.FOLLOW_56_in_rule__OperationCS__Alternatives_9_1_08870); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_1()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4025:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_2 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4025:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_2 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4026:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_2 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_2()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4027:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_2 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4027:2: rule__OperationCS__QualifiersAssignment_9_1_0_2
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_2_in_rule__OperationCS__Alternatives_9_1_08815);
-                    rule__OperationCS__QualifiersAssignment_9_1_0_2();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_2()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4031:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_3 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4031:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_3 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4032:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_3 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_3()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4033:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_3 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4033:2: rule__OperationCS__QualifiersAssignment_9_1_0_3
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_3_in_rule__OperationCS__Alternatives_9_1_08833);
-                    rule__OperationCS__QualifiersAssignment_9_1_0_3();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_3()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4037:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_4 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4037:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_4 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4038:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_4 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_4()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4039:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_4 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4039:2: rule__OperationCS__QualifiersAssignment_9_1_0_4
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_4_in_rule__OperationCS__Alternatives_9_1_08851);
-                    rule__OperationCS__QualifiersAssignment_9_1_0_4();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_4()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4043:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_5 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4043:6: ( ( rule__OperationCS__QualifiersAssignment_9_1_0_5 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4044:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_5 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_5()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4045:1: ( rule__OperationCS__QualifiersAssignment_9_1_0_5 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4045:2: rule__OperationCS__QualifiersAssignment_9_1_0_5
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_5_in_rule__OperationCS__Alternatives_9_1_08869);
-                    rule__OperationCS__QualifiersAssignment_9_1_0_5();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_9_1_0_5()); 
+                       after(grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1()); 
                     }
 
                     }
@@ -13284,44 +13164,134 @@
     // $ANTLR end "rule__OperationCS__Alternatives_9_1_0"
 
 
+    // $ANTLR start "rule__OperationCS__Alternatives_9_2_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4098:1: rule__OperationCS__Alternatives_9_2_0_0 : ( ( ( rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0 ) ) | ( 'unique' ) );
+    public final void rule__OperationCS__Alternatives_9_2_0_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4102:1: ( ( ( rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0 ) ) | ( 'unique' ) )
+            int alt32=2;
+            int LA32_0 = input.LA(1);
+
+            if ( (LA32_0==129) ) {
+                alt32=1;
+            }
+            else if ( (LA32_0==50) ) {
+                alt32=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 32, 0, input);
+
+                throw nvae;
+            }
+            switch (alt32) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4103:1: ( ( rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4103:1: ( ( rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4104:1: ( rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getOperationCSAccess().getIsNotUniqueAssignment_9_2_0_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4105:1: ( rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4105:2: rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0_in_rule__OperationCS__Alternatives_9_2_0_08904);
+                    rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getOperationCSAccess().getIsNotUniqueAssignment_9_2_0_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4109:6: ( 'unique' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4109:6: ( 'unique' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4110:1: 'unique'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1()); 
+                    }
+                    match(input,50,FollowSets000.FOLLOW_50_in_rule__OperationCS__Alternatives_9_2_0_08923); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Alternatives_9_2_0_0"
+
+
     // $ANTLR start "rule__OperationCS__Alternatives_10"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4054:1: rule__OperationCS__Alternatives_10 : ( ( ( rule__OperationCS__Group_10_0__0 ) ) | ( ';' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4122:1: rule__OperationCS__Alternatives_10 : ( ( ( rule__OperationCS__Group_10_0__0 ) ) | ( ';' ) );
     public final void rule__OperationCS__Alternatives_10() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4058:1: ( ( ( rule__OperationCS__Group_10_0__0 ) ) | ( ';' ) )
-            int alt26=2;
-            int LA26_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4126:1: ( ( ( rule__OperationCS__Group_10_0__0 ) ) | ( ';' ) )
+            int alt33=2;
+            int LA33_0 = input.LA(1);
 
-            if ( (LA26_0==99) ) {
-                alt26=1;
+            if ( (LA33_0==108) ) {
+                alt33=1;
             }
-            else if ( (LA26_0==53) ) {
-                alt26=2;
+            else if ( (LA33_0==53) ) {
+                alt33=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 26, 0, input);
+                    new NoViableAltException("", 33, 0, input);
 
                 throw nvae;
             }
-            switch (alt26) {
+            switch (alt33) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4059:1: ( ( rule__OperationCS__Group_10_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4127:1: ( ( rule__OperationCS__Group_10_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4059:1: ( ( rule__OperationCS__Group_10_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4060:1: ( rule__OperationCS__Group_10_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4127:1: ( ( rule__OperationCS__Group_10_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4128:1: ( rule__OperationCS__Group_10_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getOperationCSAccess().getGroup_10_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4061:1: ( rule__OperationCS__Group_10_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4061:2: rule__OperationCS__Group_10_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4129:1: ( rule__OperationCS__Group_10_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4129:2: rule__OperationCS__Group_10_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__Group_10_0__0_in_rule__OperationCS__Alternatives_108902);
+                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__Group_10_0__0_in_rule__OperationCS__Alternatives_108957);
                     rule__OperationCS__Group_10_0__0();
 
                     state._fsp--;
@@ -13339,15 +13309,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4065:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4133:6: ( ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4065:6: ( ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4066:1: ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4133:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4134:1: ';'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_1()); 
                     }
-                    match(input,53,FollowSets000.FOLLOW_53_in_rule__OperationCS__Alternatives_108921); if (state.failed) return ;
+                    match(input,53,FollowSets000.FOLLOW_53_in_rule__OperationCS__Alternatives_108976); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_1()); 
                     }
@@ -13375,59 +13345,59 @@
 
 
     // $ANTLR start "rule__OperationCS__Alternatives_10_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4078:1: rule__OperationCS__Alternatives_10_0_1 : ( ( ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 ) ) | ( ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 ) ) | ( ( rule__OperationCS__Group_10_0_1_2__0 ) ) | ( ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4146:1: rule__OperationCS__Alternatives_10_0_1 : ( ( ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 ) ) | ( ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 ) ) | ( ( rule__OperationCS__Group_10_0_1_2__0 ) ) | ( ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 ) ) );
     public final void rule__OperationCS__Alternatives_10_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4082:1: ( ( ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 ) ) | ( ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 ) ) | ( ( rule__OperationCS__Group_10_0_1_2__0 ) ) | ( ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 ) ) )
-            int alt27=4;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4150:1: ( ( ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 ) ) | ( ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 ) ) | ( ( rule__OperationCS__Group_10_0_1_2__0 ) ) | ( ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 ) ) )
+            int alt34=4;
             switch ( input.LA(1) ) {
-            case 55:
-            case 56:
-            case 60:
+            case 64:
+            case 65:
+            case 69:
                 {
-                alt27=1;
+                alt34=1;
                 }
                 break;
             case 40:
                 {
-                alt27=2;
+                alt34=2;
                 }
                 break;
             case 19:
                 {
-                alt27=3;
+                alt34=3;
                 }
                 break;
             case 39:
                 {
-                alt27=4;
+                alt34=4;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 27, 0, input);
+                    new NoViableAltException("", 34, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt27) {
+            switch (alt34) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4083:1: ( ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4151:1: ( ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4083:1: ( ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4084:1: ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4151:1: ( ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4152:1: ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getOperationCSAccess().getOwnedAnnotationsAssignment_10_0_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4085:1: ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4085:2: rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4153:1: ( rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4153:2: rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0_in_rule__OperationCS__Alternatives_10_0_18955);
+                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0_in_rule__OperationCS__Alternatives_10_0_19010);
                     rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0();
 
                     state._fsp--;
@@ -13445,18 +13415,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4089:6: ( ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4157:6: ( ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4089:6: ( ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4090:1: ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4157:6: ( ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4158:1: ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getOperationCSAccess().getOwnedPreconditionsAssignment_10_0_1_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4091:1: ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4091:2: rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4159:1: ( rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4159:2: rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1_in_rule__OperationCS__Alternatives_10_0_18973);
+                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1_in_rule__OperationCS__Alternatives_10_0_19028);
                     rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1();
 
                     state._fsp--;
@@ -13474,18 +13444,18 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4095:6: ( ( rule__OperationCS__Group_10_0_1_2__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4163:6: ( ( rule__OperationCS__Group_10_0_1_2__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4095:6: ( ( rule__OperationCS__Group_10_0_1_2__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4096:1: ( rule__OperationCS__Group_10_0_1_2__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4163:6: ( ( rule__OperationCS__Group_10_0_1_2__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4164:1: ( rule__OperationCS__Group_10_0_1_2__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getOperationCSAccess().getGroup_10_0_1_2()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4097:1: ( rule__OperationCS__Group_10_0_1_2__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4097:2: rule__OperationCS__Group_10_0_1_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4165:1: ( rule__OperationCS__Group_10_0_1_2__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4165:2: rule__OperationCS__Group_10_0_1_2__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__Group_10_0_1_2__0_in_rule__OperationCS__Alternatives_10_0_18991);
+                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__Group_10_0_1_2__0_in_rule__OperationCS__Alternatives_10_0_19046);
                     rule__OperationCS__Group_10_0_1_2__0();
 
                     state._fsp--;
@@ -13503,18 +13473,18 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4101:6: ( ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4169:6: ( ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4101:6: ( ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4102:1: ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4169:6: ( ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4170:1: ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getOperationCSAccess().getOwnedPostconditionsAssignment_10_0_1_3()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4103:1: ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4103:2: rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4171:1: ( rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4171:2: rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3_in_rule__OperationCS__Alternatives_10_0_19009);
+                    pushFollow(FollowSets000.FOLLOW_rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3_in_rule__OperationCS__Alternatives_10_0_19064);
                     rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3();
 
                     state._fsp--;
@@ -13549,43 +13519,43 @@
 
 
     // $ANTLR start "rule__PackageCS__Alternatives_4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4112:1: rule__PackageCS__Alternatives_4 : ( ( ( rule__PackageCS__Group_4_0__0 ) ) | ( ';' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4180:1: rule__PackageCS__Alternatives_4 : ( ( ( rule__PackageCS__Group_4_0__0 ) ) | ( ';' ) );
     public final void rule__PackageCS__Alternatives_4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4116:1: ( ( ( rule__PackageCS__Group_4_0__0 ) ) | ( ';' ) )
-            int alt28=2;
-            int LA28_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4184:1: ( ( ( rule__PackageCS__Group_4_0__0 ) ) | ( ';' ) )
+            int alt35=2;
+            int LA35_0 = input.LA(1);
 
-            if ( (LA28_0==99) ) {
-                alt28=1;
+            if ( (LA35_0==108) ) {
+                alt35=1;
             }
-            else if ( (LA28_0==53) ) {
-                alt28=2;
+            else if ( (LA35_0==53) ) {
+                alt35=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 28, 0, input);
+                    new NoViableAltException("", 35, 0, input);
 
                 throw nvae;
             }
-            switch (alt28) {
+            switch (alt35) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4117:1: ( ( rule__PackageCS__Group_4_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4185:1: ( ( rule__PackageCS__Group_4_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4117:1: ( ( rule__PackageCS__Group_4_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4118:1: ( rule__PackageCS__Group_4_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4185:1: ( ( rule__PackageCS__Group_4_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4186:1: ( rule__PackageCS__Group_4_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPackageCSAccess().getGroup_4_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4119:1: ( rule__PackageCS__Group_4_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4119:2: rule__PackageCS__Group_4_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4187:1: ( rule__PackageCS__Group_4_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4187:2: rule__PackageCS__Group_4_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PackageCS__Group_4_0__0_in_rule__PackageCS__Alternatives_49042);
+                    pushFollow(FollowSets000.FOLLOW_rule__PackageCS__Group_4_0__0_in_rule__PackageCS__Alternatives_49097);
                     rule__PackageCS__Group_4_0__0();
 
                     state._fsp--;
@@ -13603,15 +13573,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4123:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4191:6: ( ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4123:6: ( ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4124:1: ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4191:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4192:1: ';'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPackageCSAccess().getSemicolonKeyword_4_1()); 
                     }
-                    match(input,53,FollowSets000.FOLLOW_53_in_rule__PackageCS__Alternatives_49061); if (state.failed) return ;
+                    match(input,53,FollowSets000.FOLLOW_53_in_rule__PackageCS__Alternatives_49116); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getPackageCSAccess().getSemicolonKeyword_4_1()); 
                     }
@@ -13639,25 +13609,25 @@
 
 
     // $ANTLR start "rule__PackageCS__Alternatives_4_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4136:1: rule__PackageCS__Alternatives_4_0_1 : ( ( ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 ) ) | ( ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 ) ) | ( ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4204:1: rule__PackageCS__Alternatives_4_0_1 : ( ( ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 ) ) | ( ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 ) ) | ( ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 ) ) );
     public final void rule__PackageCS__Alternatives_4_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4140:1: ( ( ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 ) ) | ( ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 ) ) | ( ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 ) ) )
-            int alt29=3;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4208:1: ( ( ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 ) ) | ( ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 ) ) | ( ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 ) ) )
+            int alt36=3;
             switch ( input.LA(1) ) {
-            case 55:
-            case 56:
-            case 60:
+            case 64:
+            case 65:
+            case 69:
                 {
-                alt29=1;
+                alt36=1;
                 }
                 break;
             case 38:
                 {
-                alt29=2;
+                alt36=2;
                 }
                 break;
             case 17:
@@ -13666,31 +13636,31 @@
             case 27:
             case 41:
                 {
-                alt29=3;
+                alt36=3;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 29, 0, input);
+                    new NoViableAltException("", 36, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt29) {
+            switch (alt36) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4141:1: ( ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4209:1: ( ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4141:1: ( ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4142:1: ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4209:1: ( ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4210:1: ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPackageCSAccess().getOwnedAnnotationsAssignment_4_0_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4143:1: ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4143:2: rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4211:1: ( rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4211:2: rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0_in_rule__PackageCS__Alternatives_4_0_19095);
+                    pushFollow(FollowSets000.FOLLOW_rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0_in_rule__PackageCS__Alternatives_4_0_19150);
                     rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0();
 
                     state._fsp--;
@@ -13708,18 +13678,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4147:6: ( ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4215:6: ( ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4147:6: ( ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4148:1: ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4215:6: ( ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4216:1: ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPackageCSAccess().getOwnedPackagesAssignment_4_0_1_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4149:1: ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4149:2: rule__PackageCS__OwnedPackagesAssignment_4_0_1_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4217:1: ( rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4217:2: rule__PackageCS__OwnedPackagesAssignment_4_0_1_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PackageCS__OwnedPackagesAssignment_4_0_1_1_in_rule__PackageCS__Alternatives_4_0_19113);
+                    pushFollow(FollowSets000.FOLLOW_rule__PackageCS__OwnedPackagesAssignment_4_0_1_1_in_rule__PackageCS__Alternatives_4_0_19168);
                     rule__PackageCS__OwnedPackagesAssignment_4_0_1_1();
 
                     state._fsp--;
@@ -13737,18 +13707,18 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4153:6: ( ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4221:6: ( ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4153:6: ( ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4154:1: ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4221:6: ( ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4222:1: ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPackageCSAccess().getOwnedClassesAssignment_4_0_1_2()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4155:1: ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4155:2: rule__PackageCS__OwnedClassesAssignment_4_0_1_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4223:1: ( rule__PackageCS__OwnedClassesAssignment_4_0_1_2 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4223:2: rule__PackageCS__OwnedClassesAssignment_4_0_1_2
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PackageCS__OwnedClassesAssignment_4_0_1_2_in_rule__PackageCS__Alternatives_4_0_19131);
+                    pushFollow(FollowSets000.FOLLOW_rule__PackageCS__OwnedClassesAssignment_4_0_1_2_in_rule__PackageCS__Alternatives_4_0_19186);
                     rule__PackageCS__OwnedClassesAssignment_4_0_1_2();
 
                     state._fsp--;
@@ -13782,217 +13752,45 @@
     // $ANTLR end "rule__PackageCS__Alternatives_4_0_1"
 
 
-    // $ANTLR start "rule__ParameterCS__Alternatives_2_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4164:1: rule__ParameterCS__Alternatives_2_1_0 : ( ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_0 ) ) | ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_1 ) ) | ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_2 ) ) | ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_3 ) ) );
-    public final void rule__ParameterCS__Alternatives_2_1_0() throws RecognitionException {
+    // $ANTLR start "rule__ParameterCS__Alternatives_2_0_1_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4232:1: rule__ParameterCS__Alternatives_2_0_1_0 : ( ( ( rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0 ) ) | ( '!ordered' ) );
+    public final void rule__ParameterCS__Alternatives_2_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4168:1: ( ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_0 ) ) | ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_1 ) ) | ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_2 ) ) | ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_3 ) ) )
-            int alt30=4;
-            switch ( input.LA(1) ) {
-            case 37:
-                {
-                alt30=1;
-                }
-                break;
-            case 122:
-                {
-                alt30=2;
-                }
-                break;
-            case 50:
-                {
-                alt30=3;
-                }
-                break;
-            case 125:
-                {
-                alt30=4;
-                }
-                break;
-            default:
-                if (state.backtracking>0) {state.failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("", 30, 0, input);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4236:1: ( ( ( rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0 ) ) | ( '!ordered' ) )
+            int alt37=2;
+            int LA37_0 = input.LA(1);
 
-                throw nvae;
+            if ( (LA37_0==37) ) {
+                alt37=1;
             }
-
-            switch (alt30) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4169:1: ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_0 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4169:1: ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4170:1: ( rule__ParameterCS__QualifiersAssignment_2_1_0_0 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_0()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4171:1: ( rule__ParameterCS__QualifiersAssignment_2_1_0_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4171:2: rule__ParameterCS__QualifiersAssignment_2_1_0_0
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ParameterCS__QualifiersAssignment_2_1_0_0_in_rule__ParameterCS__Alternatives_2_1_09164);
-                    rule__ParameterCS__QualifiersAssignment_2_1_0_0();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_0()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4175:6: ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_1 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4175:6: ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4176:1: ( rule__ParameterCS__QualifiersAssignment_2_1_0_1 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_1()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4177:1: ( rule__ParameterCS__QualifiersAssignment_2_1_0_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4177:2: rule__ParameterCS__QualifiersAssignment_2_1_0_1
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ParameterCS__QualifiersAssignment_2_1_0_1_in_rule__ParameterCS__Alternatives_2_1_09182);
-                    rule__ParameterCS__QualifiersAssignment_2_1_0_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_1()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4181:6: ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_2 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4181:6: ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_2 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4182:1: ( rule__ParameterCS__QualifiersAssignment_2_1_0_2 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_2()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4183:1: ( rule__ParameterCS__QualifiersAssignment_2_1_0_2 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4183:2: rule__ParameterCS__QualifiersAssignment_2_1_0_2
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ParameterCS__QualifiersAssignment_2_1_0_2_in_rule__ParameterCS__Alternatives_2_1_09200);
-                    rule__ParameterCS__QualifiersAssignment_2_1_0_2();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_2()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4187:6: ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_3 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4187:6: ( ( rule__ParameterCS__QualifiersAssignment_2_1_0_3 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4188:1: ( rule__ParameterCS__QualifiersAssignment_2_1_0_3 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_3()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4189:1: ( rule__ParameterCS__QualifiersAssignment_2_1_0_3 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4189:2: rule__ParameterCS__QualifiersAssignment_2_1_0_3
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ParameterCS__QualifiersAssignment_2_1_0_3_in_rule__ParameterCS__Alternatives_2_1_09218);
-                    rule__ParameterCS__QualifiersAssignment_2_1_0_3();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getParameterCSAccess().getQualifiersAssignment_2_1_0_3()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ParameterCS__Alternatives_2_1_0"
-
-
-    // $ANTLR start "rule__ReferenceCS__Alternatives_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4198:1: rule__ReferenceCS__Alternatives_0 : ( ( ( rule__ReferenceCS__Group_0_0__0 ) ) | ( ( rule__ReferenceCS__Group_0_1__0 ) ) );
-    public final void rule__ReferenceCS__Alternatives_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4202:1: ( ( ( rule__ReferenceCS__Group_0_0__0 ) ) | ( ( rule__ReferenceCS__Group_0_1__0 ) ) )
-            int alt31=2;
-            int LA31_0 = input.LA(1);
-
-            if ( (LA31_0==46) ) {
-                alt31=1;
-            }
-            else if ( (LA31_0==24) ) {
-                alt31=2;
+            else if ( (LA37_0==56) ) {
+                alt37=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 31, 0, input);
+                    new NoViableAltException("", 37, 0, input);
 
                 throw nvae;
             }
-            switch (alt31) {
+            switch (alt37) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4203:1: ( ( rule__ReferenceCS__Group_0_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4237:1: ( ( rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4203:1: ( ( rule__ReferenceCS__Group_0_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4204:1: ( rule__ReferenceCS__Group_0_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4237:1: ( ( rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4238:1: ( rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0 )
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getGroup_0_0()); 
+                       before(grammarAccess.getParameterCSAccess().getIsOrderedAssignment_2_0_1_0_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4205:1: ( rule__ReferenceCS__Group_0_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4205:2: rule__ReferenceCS__Group_0_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4239:1: ( rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4239:2: rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_0_0__0_in_rule__ReferenceCS__Alternatives_09251);
-                    rule__ReferenceCS__Group_0_0__0();
+                    pushFollow(FollowSets000.FOLLOW_rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0_in_rule__ParameterCS__Alternatives_2_0_1_09219);
+                    rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -14000,7 +13798,7 @@
                     }
 
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getGroup_0_0()); 
+                       after(grammarAccess.getParameterCSAccess().getIsOrderedAssignment_2_0_1_0_0()); 
                     }
 
                     }
@@ -14009,27 +13807,17 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4209:6: ( ( rule__ReferenceCS__Group_0_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4243:6: ( '!ordered' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4209:6: ( ( rule__ReferenceCS__Group_0_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4210:1: ( rule__ReferenceCS__Group_0_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4243:6: ( '!ordered' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4244:1: '!ordered'
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getGroup_0_1()); 
+                       before(grammarAccess.getParameterCSAccess().getOrderedKeyword_2_0_1_0_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4211:1: ( rule__ReferenceCS__Group_0_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4211:2: rule__ReferenceCS__Group_0_1__0
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_0_1__0_in_rule__ReferenceCS__Alternatives_09269);
-                    rule__ReferenceCS__Group_0_1__0();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
+                    match(input,56,FollowSets000.FOLLOW_56_in_rule__ParameterCS__Alternatives_2_0_1_09238); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getGroup_0_1()); 
+                       after(grammarAccess.getParameterCSAccess().getOrderedKeyword_2_0_1_0_1()); 
                     }
 
                     }
@@ -14051,132 +13839,228 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__Alternatives_0"
+    // $ANTLR end "rule__ParameterCS__Alternatives_2_0_1_0"
+
+
+    // $ANTLR start "rule__ParameterCS__Alternatives_2_1_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4256:1: rule__ParameterCS__Alternatives_2_1_0_0 : ( ( ( rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0 ) ) | ( 'unique' ) );
+    public final void rule__ParameterCS__Alternatives_2_1_0_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4260:1: ( ( ( rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0 ) ) | ( 'unique' ) )
+            int alt38=2;
+            int LA38_0 = input.LA(1);
+
+            if ( (LA38_0==129) ) {
+                alt38=1;
+            }
+            else if ( (LA38_0==50) ) {
+                alt38=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 38, 0, input);
+
+                throw nvae;
+            }
+            switch (alt38) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4261:1: ( ( rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4261:1: ( ( rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4262:1: ( rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getParameterCSAccess().getIsNotUniqueAssignment_2_1_0_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4263:1: ( rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4263:2: rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0_in_rule__ParameterCS__Alternatives_2_1_0_09272);
+                    rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getParameterCSAccess().getIsNotUniqueAssignment_2_1_0_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4267:6: ( 'unique' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4267:6: ( 'unique' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4268:1: 'unique'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getParameterCSAccess().getUniqueKeyword_2_1_0_0_1()); 
+                    }
+                    match(input,50,FollowSets000.FOLLOW_50_in_rule__ParameterCS__Alternatives_2_1_0_09291); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getParameterCSAccess().getUniqueKeyword_2_1_0_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__Alternatives_2_1_0_0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Alternatives_6_0_1_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4280:1: rule__ReferenceCS__Alternatives_6_0_1_0 : ( ( ( rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0 ) ) | ( '!composes' ) );
+    public final void rule__ReferenceCS__Alternatives_6_0_1_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4284:1: ( ( ( rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0 ) ) | ( '!composes' ) )
+            int alt39=2;
+            int LA39_0 = input.LA(1);
+
+            if ( (LA39_0==22) ) {
+                alt39=1;
+            }
+            else if ( (LA39_0==62) ) {
+                alt39=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 39, 0, input);
+
+                throw nvae;
+            }
+            switch (alt39) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4285:1: ( ( rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4285:1: ( ( rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4286:1: ( rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsComposesAssignment_6_0_1_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4287:1: ( rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4287:2: rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0_in_rule__ReferenceCS__Alternatives_6_0_1_09325);
+                    rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsComposesAssignment_6_0_1_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4291:6: ( '!composes' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4291:6: ( '!composes' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4292:1: '!composes'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()); 
+                    }
+                    match(input,62,FollowSets000.FOLLOW_62_in_rule__ReferenceCS__Alternatives_6_0_1_09344); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Alternatives_6_0_1_0"
 
 
     // $ANTLR start "rule__ReferenceCS__Alternatives_6_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4220:1: rule__ReferenceCS__Alternatives_6_1_0 : ( ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_0 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_1 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_2 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_3 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_4 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_5 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_6 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_7 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_8 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_9 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_10 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_11 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_12 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_13 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_14 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_15 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_16 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_17 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4304:1: rule__ReferenceCS__Alternatives_6_1_0 : ( ( ( rule__ReferenceCS__IsDerivedAssignment_6_1_0_0 ) ) | ( '!derived' ) );
     public final void rule__ReferenceCS__Alternatives_6_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4224:1: ( ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_0 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_1 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_2 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_3 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_4 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_5 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_6 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_7 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_8 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_9 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_10 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_11 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_12 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_13 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_14 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_15 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_16 ) ) | ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_17 ) ) )
-            int alt32=18;
-            switch ( input.LA(1) ) {
-            case 22:
-                {
-                alt32=1;
-                }
-                break;
-            case 129:
-                {
-                alt32=2;
-                }
-                break;
-            case 26:
-                {
-                alt32=3;
-                }
-                break;
-            case 120:
-                {
-                alt32=4;
-                }
-                break;
-            case 37:
-                {
-                alt32=5;
-                }
-                break;
-            case 122:
-                {
-                alt32=6;
-                }
-                break;
-            case 43:
-                {
-                alt32=7;
-                }
-                break;
-            case 123:
-                {
-                alt32=8;
-                }
-                break;
-            case 45:
-                {
-                alt32=9;
-                }
-                break;
-            case 130:
-                {
-                alt32=10;
-                }
-                break;
-            case 49:
-                {
-                alt32=11;
-                }
-                break;
-            case 124:
-                {
-                alt32=12;
-                }
-                break;
-            case 50:
-                {
-                alt32=13;
-                }
-                break;
-            case 125:
-                {
-                alt32=14;
-                }
-                break;
-            case 51:
-                {
-                alt32=15;
-                }
-                break;
-            case 126:
-                {
-                alt32=16;
-                }
-                break;
-            case 52:
-                {
-                alt32=17;
-                }
-                break;
-            case 127:
-                {
-                alt32=18;
-                }
-                break;
-            default:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4308:1: ( ( ( rule__ReferenceCS__IsDerivedAssignment_6_1_0_0 ) ) | ( '!derived' ) )
+            int alt40=2;
+            int LA40_0 = input.LA(1);
+
+            if ( (LA40_0==26) ) {
+                alt40=1;
+            }
+            else if ( (LA40_0==54) ) {
+                alt40=2;
+            }
+            else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 32, 0, input);
+                    new NoViableAltException("", 40, 0, input);
 
                 throw nvae;
             }
-
-            switch (alt32) {
+            switch (alt40) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4225:1: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4309:1: ( ( rule__ReferenceCS__IsDerivedAssignment_6_1_0_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4225:1: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4226:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4309:1: ( ( rule__ReferenceCS__IsDerivedAssignment_6_1_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4310:1: ( rule__ReferenceCS__IsDerivedAssignment_6_1_0_0 )
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_0()); 
+                       before(grammarAccess.getReferenceCSAccess().getIsDerivedAssignment_6_1_0_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4227:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4227:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4311:1: ( rule__ReferenceCS__IsDerivedAssignment_6_1_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4311:2: rule__ReferenceCS__IsDerivedAssignment_6_1_0_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_0_in_rule__ReferenceCS__Alternatives_6_1_09302);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_0();
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__IsDerivedAssignment_6_1_0_0_in_rule__ReferenceCS__Alternatives_6_1_09378);
+                    rule__ReferenceCS__IsDerivedAssignment_6_1_0_0();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -14184,7 +14068,7 @@
                     }
 
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_0()); 
+                       after(grammarAccess.getReferenceCSAccess().getIsDerivedAssignment_6_1_0_0()); 
                     }
 
                     }
@@ -14193,491 +14077,17 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4231:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4315:6: ( '!derived' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4231:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4232:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4315:6: ( '!derived' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4316:1: '!derived'
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_1()); 
+                       before(grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4233:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4233:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_1
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_1_in_rule__ReferenceCS__Alternatives_6_1_09320);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
+                    match(input,54,FollowSets000.FOLLOW_54_in_rule__ReferenceCS__Alternatives_6_1_09397); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_1()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4237:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_2 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4237:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_2 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4238:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_2 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_2()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4239:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_2 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4239:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_2
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_2_in_rule__ReferenceCS__Alternatives_6_1_09338);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_2();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_2()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4243:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_3 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4243:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_3 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4244:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_3 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_3()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4245:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_3 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4245:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_3
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_3_in_rule__ReferenceCS__Alternatives_6_1_09356);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_3();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_3()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4249:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_4 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4249:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_4 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4250:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_4 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_4()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4251:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_4 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4251:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_4
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_4_in_rule__ReferenceCS__Alternatives_6_1_09374);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_4();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_4()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4255:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_5 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4255:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_5 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4256:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_5 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_5()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4257:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_5 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4257:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_5
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_5_in_rule__ReferenceCS__Alternatives_6_1_09392);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_5();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_5()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4261:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_6 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4261:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_6 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4262:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_6 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_6()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4263:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_6 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4263:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_6
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_6_in_rule__ReferenceCS__Alternatives_6_1_09410);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_6();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_6()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 8 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4267:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_7 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4267:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_7 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4268:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_7 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_7()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4269:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_7 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4269:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_7
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_7_in_rule__ReferenceCS__Alternatives_6_1_09428);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_7();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_7()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 9 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4273:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_8 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4273:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_8 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4274:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_8 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_8()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4275:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_8 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4275:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_8
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_8_in_rule__ReferenceCS__Alternatives_6_1_09446);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_8();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_8()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 10 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4279:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_9 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4279:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_9 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4280:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_9 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_9()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4281:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_9 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4281:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_9
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_9_in_rule__ReferenceCS__Alternatives_6_1_09464);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_9();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_9()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 11 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4285:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_10 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4285:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_10 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4286:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_10 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_10()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4287:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_10 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4287:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_10
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_10_in_rule__ReferenceCS__Alternatives_6_1_09482);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_10();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_10()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 12 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4291:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_11 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4291:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_11 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4292:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_11 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_11()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4293:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_11 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4293:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_11
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_11_in_rule__ReferenceCS__Alternatives_6_1_09500);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_11();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_11()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 13 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4297:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_12 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4297:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_12 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4298:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_12 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_12()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4299:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_12 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4299:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_12
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_12_in_rule__ReferenceCS__Alternatives_6_1_09518);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_12();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_12()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 14 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4303:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_13 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4303:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_13 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4304:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_13 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_13()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4305:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_13 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4305:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_13
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_13_in_rule__ReferenceCS__Alternatives_6_1_09536);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_13();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_13()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 15 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4309:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_14 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4309:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_14 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4310:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_14 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_14()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4311:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_14 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4311:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_14
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_14_in_rule__ReferenceCS__Alternatives_6_1_09554);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_14();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_14()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 16 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4315:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_15 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4315:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_15 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4316:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_15 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_15()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4317:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_15 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4317:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_15
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_15_in_rule__ReferenceCS__Alternatives_6_1_09572);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_15();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_15()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 17 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4321:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_16 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4321:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_16 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4322:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_16 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_16()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4323:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_16 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4323:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_16
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_16_in_rule__ReferenceCS__Alternatives_6_1_09590);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_16();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_16()); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 18 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4327:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_17 ) )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4327:6: ( ( rule__ReferenceCS__QualifiersAssignment_6_1_0_17 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4328:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_17 )
-                    {
-                    if ( state.backtracking==0 ) {
-                       before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_17()); 
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4329:1: ( rule__ReferenceCS__QualifiersAssignment_6_1_0_17 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4329:2: rule__ReferenceCS__QualifiersAssignment_6_1_0_17
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_17_in_rule__ReferenceCS__Alternatives_6_1_09608);
-                    rule__ReferenceCS__QualifiersAssignment_6_1_0_17();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-
-                    if ( state.backtracking==0 ) {
-                       after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_6_1_0_17()); 
+                       after(grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()); 
                     }
 
                     }
@@ -14702,44 +14112,674 @@
     // $ANTLR end "rule__ReferenceCS__Alternatives_6_1_0"
 
 
+    // $ANTLR start "rule__ReferenceCS__Alternatives_6_2_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4328:1: rule__ReferenceCS__Alternatives_6_2_0 : ( ( ( rule__ReferenceCS__IsOrderedAssignment_6_2_0_0 ) ) | ( '!ordered' ) );
+    public final void rule__ReferenceCS__Alternatives_6_2_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4332:1: ( ( ( rule__ReferenceCS__IsOrderedAssignment_6_2_0_0 ) ) | ( '!ordered' ) )
+            int alt41=2;
+            int LA41_0 = input.LA(1);
+
+            if ( (LA41_0==37) ) {
+                alt41=1;
+            }
+            else if ( (LA41_0==56) ) {
+                alt41=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 41, 0, input);
+
+                throw nvae;
+            }
+            switch (alt41) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4333:1: ( ( rule__ReferenceCS__IsOrderedAssignment_6_2_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4333:1: ( ( rule__ReferenceCS__IsOrderedAssignment_6_2_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4334:1: ( rule__ReferenceCS__IsOrderedAssignment_6_2_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsOrderedAssignment_6_2_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4335:1: ( rule__ReferenceCS__IsOrderedAssignment_6_2_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4335:2: rule__ReferenceCS__IsOrderedAssignment_6_2_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__IsOrderedAssignment_6_2_0_0_in_rule__ReferenceCS__Alternatives_6_2_09431);
+                    rule__ReferenceCS__IsOrderedAssignment_6_2_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsOrderedAssignment_6_2_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4339:6: ( '!ordered' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4339:6: ( '!ordered' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4340:1: '!ordered'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()); 
+                    }
+                    match(input,56,FollowSets000.FOLLOW_56_in_rule__ReferenceCS__Alternatives_6_2_09450); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Alternatives_6_2_0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Alternatives_6_3_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4352:1: rule__ReferenceCS__Alternatives_6_3_0 : ( ( ( rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0 ) ) | ( '!readonly' ) );
+    public final void rule__ReferenceCS__Alternatives_6_3_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4356:1: ( ( ( rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0 ) ) | ( '!readonly' ) )
+            int alt42=2;
+            int LA42_0 = input.LA(1);
+
+            if ( (LA42_0==43) ) {
+                alt42=1;
+            }
+            else if ( (LA42_0==57) ) {
+                alt42=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 42, 0, input);
+
+                throw nvae;
+            }
+            switch (alt42) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4357:1: ( ( rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4357:1: ( ( rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4358:1: ( rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsReadonlyAssignment_6_3_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4359:1: ( rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4359:2: rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0_in_rule__ReferenceCS__Alternatives_6_3_09484);
+                    rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsReadonlyAssignment_6_3_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4363:6: ( '!readonly' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4363:6: ( '!readonly' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4364:1: '!readonly'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()); 
+                    }
+                    match(input,57,FollowSets000.FOLLOW_57_in_rule__ReferenceCS__Alternatives_6_3_09503); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Alternatives_6_3_0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Alternatives_6_4_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4376:1: rule__ReferenceCS__Alternatives_6_4_0 : ( ( ( rule__ReferenceCS__IsResolveAssignment_6_4_0_0 ) ) | ( '!resolve' ) );
+    public final void rule__ReferenceCS__Alternatives_6_4_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4380:1: ( ( ( rule__ReferenceCS__IsResolveAssignment_6_4_0_0 ) ) | ( '!resolve' ) )
+            int alt43=2;
+            int LA43_0 = input.LA(1);
+
+            if ( (LA43_0==45) ) {
+                alt43=1;
+            }
+            else if ( (LA43_0==63) ) {
+                alt43=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 43, 0, input);
+
+                throw nvae;
+            }
+            switch (alt43) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4381:1: ( ( rule__ReferenceCS__IsResolveAssignment_6_4_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4381:1: ( ( rule__ReferenceCS__IsResolveAssignment_6_4_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4382:1: ( rule__ReferenceCS__IsResolveAssignment_6_4_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsResolveAssignment_6_4_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4383:1: ( rule__ReferenceCS__IsResolveAssignment_6_4_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4383:2: rule__ReferenceCS__IsResolveAssignment_6_4_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__IsResolveAssignment_6_4_0_0_in_rule__ReferenceCS__Alternatives_6_4_09537);
+                    rule__ReferenceCS__IsResolveAssignment_6_4_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsResolveAssignment_6_4_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4387:6: ( '!resolve' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4387:6: ( '!resolve' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4388:1: '!resolve'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()); 
+                    }
+                    match(input,63,FollowSets000.FOLLOW_63_in_rule__ReferenceCS__Alternatives_6_4_09556); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Alternatives_6_4_0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Alternatives_6_5_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4400:1: rule__ReferenceCS__Alternatives_6_5_0 : ( ( ( rule__ReferenceCS__IsTransientAssignment_6_5_0_0 ) ) | ( '!transient' ) );
+    public final void rule__ReferenceCS__Alternatives_6_5_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4404:1: ( ( ( rule__ReferenceCS__IsTransientAssignment_6_5_0_0 ) ) | ( '!transient' ) )
+            int alt44=2;
+            int LA44_0 = input.LA(1);
+
+            if ( (LA44_0==49) ) {
+                alt44=1;
+            }
+            else if ( (LA44_0==58) ) {
+                alt44=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 44, 0, input);
+
+                throw nvae;
+            }
+            switch (alt44) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4405:1: ( ( rule__ReferenceCS__IsTransientAssignment_6_5_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4405:1: ( ( rule__ReferenceCS__IsTransientAssignment_6_5_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4406:1: ( rule__ReferenceCS__IsTransientAssignment_6_5_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsTransientAssignment_6_5_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4407:1: ( rule__ReferenceCS__IsTransientAssignment_6_5_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4407:2: rule__ReferenceCS__IsTransientAssignment_6_5_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__IsTransientAssignment_6_5_0_0_in_rule__ReferenceCS__Alternatives_6_5_09590);
+                    rule__ReferenceCS__IsTransientAssignment_6_5_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsTransientAssignment_6_5_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4411:6: ( '!transient' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4411:6: ( '!transient' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4412:1: '!transient'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()); 
+                    }
+                    match(input,58,FollowSets000.FOLLOW_58_in_rule__ReferenceCS__Alternatives_6_5_09609); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Alternatives_6_5_0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Alternatives_6_6_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4424:1: rule__ReferenceCS__Alternatives_6_6_0 : ( ( ( rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0 ) ) | ( 'unique' ) );
+    public final void rule__ReferenceCS__Alternatives_6_6_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4428:1: ( ( ( rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0 ) ) | ( 'unique' ) )
+            int alt45=2;
+            int LA45_0 = input.LA(1);
+
+            if ( (LA45_0==129) ) {
+                alt45=1;
+            }
+            else if ( (LA45_0==50) ) {
+                alt45=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 45, 0, input);
+
+                throw nvae;
+            }
+            switch (alt45) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4429:1: ( ( rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4429:1: ( ( rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4430:1: ( rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsNotUniqueAssignment_6_6_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4431:1: ( rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4431:2: rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0_in_rule__ReferenceCS__Alternatives_6_6_09643);
+                    rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsNotUniqueAssignment_6_6_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4435:6: ( 'unique' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4435:6: ( 'unique' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4436:1: 'unique'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()); 
+                    }
+                    match(input,50,FollowSets000.FOLLOW_50_in_rule__ReferenceCS__Alternatives_6_6_09662); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Alternatives_6_6_0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Alternatives_6_7_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4448:1: rule__ReferenceCS__Alternatives_6_7_0 : ( ( ( rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0 ) ) | ( '!unsettable' ) );
+    public final void rule__ReferenceCS__Alternatives_6_7_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4452:1: ( ( ( rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0 ) ) | ( '!unsettable' ) )
+            int alt46=2;
+            int LA46_0 = input.LA(1);
+
+            if ( (LA46_0==51) ) {
+                alt46=1;
+            }
+            else if ( (LA46_0==59) ) {
+                alt46=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 46, 0, input);
+
+                throw nvae;
+            }
+            switch (alt46) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4453:1: ( ( rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4453:1: ( ( rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4454:1: ( rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsUnsettableAssignment_6_7_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4455:1: ( rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4455:2: rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0_in_rule__ReferenceCS__Alternatives_6_7_09696);
+                    rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsUnsettableAssignment_6_7_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4459:6: ( '!unsettable' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4459:6: ( '!unsettable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4460:1: '!unsettable'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()); 
+                    }
+                    match(input,59,FollowSets000.FOLLOW_59_in_rule__ReferenceCS__Alternatives_6_7_09715); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Alternatives_6_7_0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Alternatives_6_8_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4472:1: rule__ReferenceCS__Alternatives_6_8_0_0 : ( ( ( rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0 ) ) | ( '!volatile' ) );
+    public final void rule__ReferenceCS__Alternatives_6_8_0_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4476:1: ( ( ( rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0 ) ) | ( '!volatile' ) )
+            int alt47=2;
+            int LA47_0 = input.LA(1);
+
+            if ( (LA47_0==52) ) {
+                alt47=1;
+            }
+            else if ( (LA47_0==60) ) {
+                alt47=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 47, 0, input);
+
+                throw nvae;
+            }
+            switch (alt47) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4477:1: ( ( rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0 ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4477:1: ( ( rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4478:1: ( rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsVolatileAssignment_6_8_0_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4479:1: ( rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4479:2: rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0_in_rule__ReferenceCS__Alternatives_6_8_0_09749);
+                    rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsVolatileAssignment_6_8_0_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4483:6: ( '!volatile' )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4483:6: ( '!volatile' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4484:1: '!volatile'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()); 
+                    }
+                    match(input,60,FollowSets000.FOLLOW_60_in_rule__ReferenceCS__Alternatives_6_8_0_09768); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Alternatives_6_8_0_0"
+
+
     // $ANTLR start "rule__ReferenceCS__Alternatives_7"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4338:1: rule__ReferenceCS__Alternatives_7 : ( ( ( rule__ReferenceCS__Group_7_0__0 ) ) | ( ';' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4496:1: rule__ReferenceCS__Alternatives_7 : ( ( ( rule__ReferenceCS__Group_7_0__0 ) ) | ( ';' ) );
     public final void rule__ReferenceCS__Alternatives_7() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4342:1: ( ( ( rule__ReferenceCS__Group_7_0__0 ) ) | ( ';' ) )
-            int alt33=2;
-            int LA33_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4500:1: ( ( ( rule__ReferenceCS__Group_7_0__0 ) ) | ( ';' ) )
+            int alt48=2;
+            int LA48_0 = input.LA(1);
 
-            if ( (LA33_0==99) ) {
-                alt33=1;
+            if ( (LA48_0==108) ) {
+                alt48=1;
             }
-            else if ( (LA33_0==53) ) {
-                alt33=2;
+            else if ( (LA48_0==53) ) {
+                alt48=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 33, 0, input);
+                    new NoViableAltException("", 48, 0, input);
 
                 throw nvae;
             }
-            switch (alt33) {
+            switch (alt48) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4343:1: ( ( rule__ReferenceCS__Group_7_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4501:1: ( ( rule__ReferenceCS__Group_7_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4343:1: ( ( rule__ReferenceCS__Group_7_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4344:1: ( rule__ReferenceCS__Group_7_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4501:1: ( ( rule__ReferenceCS__Group_7_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4502:1: ( rule__ReferenceCS__Group_7_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getReferenceCSAccess().getGroup_7_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4345:1: ( rule__ReferenceCS__Group_7_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4345:2: rule__ReferenceCS__Group_7_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4503:1: ( rule__ReferenceCS__Group_7_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4503:2: rule__ReferenceCS__Group_7_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_7_0__0_in_rule__ReferenceCS__Alternatives_79641);
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_7_0__0_in_rule__ReferenceCS__Alternatives_79802);
                     rule__ReferenceCS__Group_7_0__0();
 
                     state._fsp--;
@@ -14757,15 +14797,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4349:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4507:6: ( ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4349:6: ( ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4350:1: ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4507:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4508:1: ';'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_1()); 
                     }
-                    match(input,53,FollowSets000.FOLLOW_53_in_rule__ReferenceCS__Alternatives_79660); if (state.failed) return ;
+                    match(input,53,FollowSets000.FOLLOW_53_in_rule__ReferenceCS__Alternatives_79821); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_1()); 
                     }
@@ -14793,59 +14833,59 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Alternatives_7_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4362:1: rule__ReferenceCS__Alternatives_7_0_1 : ( ( ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_1__0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_2__0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_3__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4520:1: rule__ReferenceCS__Alternatives_7_0_1 : ( ( ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_1__0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_2__0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_3__0 ) ) );
     public final void rule__ReferenceCS__Alternatives_7_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4366:1: ( ( ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_1__0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_2__0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_3__0 ) ) )
-            int alt34=4;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4524:1: ( ( ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_1__0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_2__0 ) ) | ( ( rule__ReferenceCS__Group_7_0_1_3__0 ) ) )
+            int alt49=4;
             switch ( input.LA(1) ) {
-            case 55:
-            case 56:
-            case 60:
+            case 64:
+            case 65:
+            case 69:
                 {
-                alt34=1;
+                alt49=1;
                 }
                 break;
             case 33:
                 {
-                alt34=2;
+                alt49=2;
                 }
                 break;
             case 25:
                 {
-                alt34=3;
+                alt49=3;
                 }
                 break;
             case 31:
                 {
-                alt34=4;
+                alt49=4;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 34, 0, input);
+                    new NoViableAltException("", 49, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt34) {
+            switch (alt49) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4367:1: ( ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4525:1: ( ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4367:1: ( ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4368:1: ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4525:1: ( ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4526:1: ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getReferenceCSAccess().getOwnedAnnotationsAssignment_7_0_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4369:1: ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4369:2: rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4527:1: ( rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4527:2: rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0_in_rule__ReferenceCS__Alternatives_7_0_19694);
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0_in_rule__ReferenceCS__Alternatives_7_0_19855);
                     rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0();
 
                     state._fsp--;
@@ -14863,18 +14903,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4373:6: ( ( rule__ReferenceCS__Group_7_0_1_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4531:6: ( ( rule__ReferenceCS__Group_7_0_1_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4373:6: ( ( rule__ReferenceCS__Group_7_0_1_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4374:1: ( rule__ReferenceCS__Group_7_0_1_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4531:6: ( ( rule__ReferenceCS__Group_7_0_1_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4532:1: ( rule__ReferenceCS__Group_7_0_1_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getReferenceCSAccess().getGroup_7_0_1_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4375:1: ( rule__ReferenceCS__Group_7_0_1_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4375:2: rule__ReferenceCS__Group_7_0_1_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4533:1: ( rule__ReferenceCS__Group_7_0_1_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4533:2: rule__ReferenceCS__Group_7_0_1_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__0_in_rule__ReferenceCS__Alternatives_7_0_19712);
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__0_in_rule__ReferenceCS__Alternatives_7_0_19873);
                     rule__ReferenceCS__Group_7_0_1_1__0();
 
                     state._fsp--;
@@ -14892,18 +14932,18 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4379:6: ( ( rule__ReferenceCS__Group_7_0_1_2__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4537:6: ( ( rule__ReferenceCS__Group_7_0_1_2__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4379:6: ( ( rule__ReferenceCS__Group_7_0_1_2__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4380:1: ( rule__ReferenceCS__Group_7_0_1_2__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4537:6: ( ( rule__ReferenceCS__Group_7_0_1_2__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4538:1: ( rule__ReferenceCS__Group_7_0_1_2__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getReferenceCSAccess().getGroup_7_0_1_2()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4381:1: ( rule__ReferenceCS__Group_7_0_1_2__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4381:2: rule__ReferenceCS__Group_7_0_1_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4539:1: ( rule__ReferenceCS__Group_7_0_1_2__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4539:2: rule__ReferenceCS__Group_7_0_1_2__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__0_in_rule__ReferenceCS__Alternatives_7_0_19730);
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__0_in_rule__ReferenceCS__Alternatives_7_0_19891);
                     rule__ReferenceCS__Group_7_0_1_2__0();
 
                     state._fsp--;
@@ -14921,18 +14961,18 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4385:6: ( ( rule__ReferenceCS__Group_7_0_1_3__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4543:6: ( ( rule__ReferenceCS__Group_7_0_1_3__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4385:6: ( ( rule__ReferenceCS__Group_7_0_1_3__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4386:1: ( rule__ReferenceCS__Group_7_0_1_3__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4543:6: ( ( rule__ReferenceCS__Group_7_0_1_3__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4544:1: ( rule__ReferenceCS__Group_7_0_1_3__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getReferenceCSAccess().getGroup_7_0_1_3()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4387:1: ( rule__ReferenceCS__Group_7_0_1_3__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4387:2: rule__ReferenceCS__Group_7_0_1_3__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4545:1: ( rule__ReferenceCS__Group_7_0_1_3__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4545:2: rule__ReferenceCS__Group_7_0_1_3__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__0_in_rule__ReferenceCS__Alternatives_7_0_19748);
+                    pushFollow(FollowSets000.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__0_in_rule__ReferenceCS__Alternatives_7_0_19909);
                     rule__ReferenceCS__Group_7_0_1_3__0();
 
                     state._fsp--;
@@ -14967,43 +15007,43 @@
 
 
     // $ANTLR start "rule__SpecificationCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4396:1: rule__SpecificationCS__Alternatives : ( ( ( rule__SpecificationCS__OwnedExpressionAssignment_0 ) ) | ( ( rule__SpecificationCS__ExprStringAssignment_1 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4554:1: rule__SpecificationCS__Alternatives : ( ( ( rule__SpecificationCS__OwnedExpressionAssignment_0 ) ) | ( ( rule__SpecificationCS__ExprStringAssignment_1 ) ) );
     public final void rule__SpecificationCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4400:1: ( ( ( rule__SpecificationCS__OwnedExpressionAssignment_0 ) ) | ( ( rule__SpecificationCS__ExprStringAssignment_1 ) ) )
-            int alt35=2;
-            int LA35_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4558:1: ( ( ( rule__SpecificationCS__OwnedExpressionAssignment_0 ) ) | ( ( rule__SpecificationCS__ExprStringAssignment_1 ) ) )
+            int alt50=2;
+            int LA50_0 = input.LA(1);
 
-            if ( ((LA35_0>=RULE_INT && LA35_0<=RULE_SINGLE_QUOTED_STRING)||(LA35_0>=RULE_SIMPLE_ID && LA35_0<=RULE_ESCAPED_ID)||(LA35_0>=17 && LA35_0<=52)||(LA35_0>=55 && LA35_0<=63)||(LA35_0>=80 && LA35_0<=93)||LA35_0==95||(LA35_0>=105 && LA35_0<=107)||LA35_0==112||(LA35_0>=117 && LA35_0<=118)||(LA35_0>=131 && LA35_0<=132)) ) {
-                alt35=1;
+            if ( ((LA50_0>=RULE_INT && LA50_0<=RULE_SINGLE_QUOTED_STRING)||(LA50_0>=RULE_SIMPLE_ID && LA50_0<=RULE_ESCAPED_ID)||(LA50_0>=17 && LA50_0<=52)||(LA50_0>=64 && LA50_0<=72)||(LA50_0>=89 && LA50_0<=102)||LA50_0==104||(LA50_0>=114 && LA50_0<=116)||LA50_0==121||(LA50_0>=126 && LA50_0<=127)||(LA50_0>=131 && LA50_0<=132)) ) {
+                alt50=1;
             }
-            else if ( (LA35_0==RULE_UNQUOTED_STRING) ) {
-                alt35=2;
+            else if ( (LA50_0==RULE_UNQUOTED_STRING) ) {
+                alt50=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 35, 0, input);
+                    new NoViableAltException("", 50, 0, input);
 
                 throw nvae;
             }
-            switch (alt35) {
+            switch (alt50) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4401:1: ( ( rule__SpecificationCS__OwnedExpressionAssignment_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4559:1: ( ( rule__SpecificationCS__OwnedExpressionAssignment_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4401:1: ( ( rule__SpecificationCS__OwnedExpressionAssignment_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4402:1: ( rule__SpecificationCS__OwnedExpressionAssignment_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4559:1: ( ( rule__SpecificationCS__OwnedExpressionAssignment_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4560:1: ( rule__SpecificationCS__OwnedExpressionAssignment_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSpecificationCSAccess().getOwnedExpressionAssignment_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4403:1: ( rule__SpecificationCS__OwnedExpressionAssignment_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4403:2: rule__SpecificationCS__OwnedExpressionAssignment_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4561:1: ( rule__SpecificationCS__OwnedExpressionAssignment_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4561:2: rule__SpecificationCS__OwnedExpressionAssignment_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__SpecificationCS__OwnedExpressionAssignment_0_in_rule__SpecificationCS__Alternatives9781);
+                    pushFollow(FollowSets000.FOLLOW_rule__SpecificationCS__OwnedExpressionAssignment_0_in_rule__SpecificationCS__Alternatives9942);
                     rule__SpecificationCS__OwnedExpressionAssignment_0();
 
                     state._fsp--;
@@ -15021,18 +15061,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4407:6: ( ( rule__SpecificationCS__ExprStringAssignment_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4565:6: ( ( rule__SpecificationCS__ExprStringAssignment_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4407:6: ( ( rule__SpecificationCS__ExprStringAssignment_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4408:1: ( rule__SpecificationCS__ExprStringAssignment_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4565:6: ( ( rule__SpecificationCS__ExprStringAssignment_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4566:1: ( rule__SpecificationCS__ExprStringAssignment_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSpecificationCSAccess().getExprStringAssignment_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4409:1: ( rule__SpecificationCS__ExprStringAssignment_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4409:2: rule__SpecificationCS__ExprStringAssignment_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4567:1: ( rule__SpecificationCS__ExprStringAssignment_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4567:2: rule__SpecificationCS__ExprStringAssignment_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__SpecificationCS__ExprStringAssignment_1_in_rule__SpecificationCS__Alternatives9799);
+                    pushFollow(FollowSets000.FOLLOW_rule__SpecificationCS__ExprStringAssignment_1_in_rule__SpecificationCS__Alternatives9960);
                     rule__SpecificationCS__ExprStringAssignment_1();
 
                     state._fsp--;
@@ -15067,43 +15107,43 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Alternatives_7"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4418:1: rule__StructuredClassCS__Alternatives_7 : ( ( ( rule__StructuredClassCS__Group_7_0__0 ) ) | ( ';' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4576:1: rule__StructuredClassCS__Alternatives_7 : ( ( ( rule__StructuredClassCS__Group_7_0__0 ) ) | ( ';' ) );
     public final void rule__StructuredClassCS__Alternatives_7() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4422:1: ( ( ( rule__StructuredClassCS__Group_7_0__0 ) ) | ( ';' ) )
-            int alt36=2;
-            int LA36_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4580:1: ( ( ( rule__StructuredClassCS__Group_7_0__0 ) ) | ( ';' ) )
+            int alt51=2;
+            int LA51_0 = input.LA(1);
 
-            if ( (LA36_0==99) ) {
-                alt36=1;
+            if ( (LA51_0==108) ) {
+                alt51=1;
             }
-            else if ( (LA36_0==53) ) {
-                alt36=2;
+            else if ( (LA51_0==53) ) {
+                alt51=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 36, 0, input);
+                    new NoViableAltException("", 51, 0, input);
 
                 throw nvae;
             }
-            switch (alt36) {
+            switch (alt51) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4423:1: ( ( rule__StructuredClassCS__Group_7_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4581:1: ( ( rule__StructuredClassCS__Group_7_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4423:1: ( ( rule__StructuredClassCS__Group_7_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4424:1: ( rule__StructuredClassCS__Group_7_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4581:1: ( ( rule__StructuredClassCS__Group_7_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4582:1: ( rule__StructuredClassCS__Group_7_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getStructuredClassCSAccess().getGroup_7_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4425:1: ( rule__StructuredClassCS__Group_7_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4425:2: rule__StructuredClassCS__Group_7_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4583:1: ( rule__StructuredClassCS__Group_7_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4583:2: rule__StructuredClassCS__Group_7_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__Group_7_0__0_in_rule__StructuredClassCS__Alternatives_79832);
+                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__Group_7_0__0_in_rule__StructuredClassCS__Alternatives_79993);
                     rule__StructuredClassCS__Group_7_0__0();
 
                     state._fsp--;
@@ -15121,15 +15161,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4429:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4587:6: ( ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4429:6: ( ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4430:1: ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4587:6: ( ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4588:1: ';'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getStructuredClassCSAccess().getSemicolonKeyword_7_1()); 
                     }
-                    match(input,53,FollowSets000.FOLLOW_53_in_rule__StructuredClassCS__Alternatives_79851); if (state.failed) return ;
+                    match(input,53,FollowSets000.FOLLOW_53_in_rule__StructuredClassCS__Alternatives_710012); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getStructuredClassCSAccess().getSemicolonKeyword_7_1()); 
                     }
@@ -15157,39 +15197,58 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Alternatives_7_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4442:1: rule__StructuredClassCS__Alternatives_7_0_1 : ( ( ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 ) ) | ( ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 ) ) | ( ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 ) ) | ( ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4600:1: rule__StructuredClassCS__Alternatives_7_0_1 : ( ( ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 ) ) | ( ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 ) ) | ( ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 ) ) | ( ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 ) ) );
     public final void rule__StructuredClassCS__Alternatives_7_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4446:1: ( ( ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 ) ) | ( ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 ) ) | ( ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 ) ) | ( ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 ) ) )
-            int alt37=4;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4604:1: ( ( ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 ) ) | ( ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 ) ) | ( ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 ) ) | ( ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 ) ) )
+            int alt52=4;
             switch ( input.LA(1) ) {
-            case 55:
-            case 56:
-            case 60:
+            case 64:
+            case 65:
+            case 69:
                 {
-                alt37=1;
+                alt52=1;
                 }
                 break;
             case 46:
                 {
                 switch ( input.LA(2) ) {
-                case 24:
+                case 46:
                     {
-                    int LA37_7 = input.LA(3);
+                    int LA52_7 = input.LA(3);
 
-                    if ( (LA37_7==18||LA37_7==42) ) {
-                        alt37=3;
+                    if ( (LA52_7==36) ) {
+                        alt52=2;
                     }
-                    else if ( (LA37_7==36) ) {
-                        alt37=2;
+                    else if ( (LA52_7==18||LA52_7==42) ) {
+                        alt52=3;
                     }
                     else {
                         if (state.backtracking>0) {state.failed=true; return ;}
                         NoViableAltException nvae =
-                            new NoViableAltException("", 37, 7, input);
+                            new NoViableAltException("", 52, 7, input);
+
+                        throw nvae;
+                    }
+                    }
+                    break;
+                case 24:
+                    {
+                    int LA52_8 = input.LA(3);
+
+                    if ( (LA52_8==36) ) {
+                        alt52=2;
+                    }
+                    else if ( (LA52_8==18||LA52_8==42) ) {
+                        alt52=3;
+                    }
+                    else {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 52, 8, input);
 
                         throw nvae;
                     }
@@ -15198,18 +15257,18 @@
                 case 18:
                 case 42:
                     {
-                    alt37=3;
+                    alt52=3;
                     }
                     break;
                 case 36:
                     {
-                    alt37=2;
+                    alt52=2;
                     }
                     break;
                 default:
                     if (state.backtracking>0) {state.failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("", 37, 2, input);
+                        new NoViableAltException("", 52, 2, input);
 
                     throw nvae;
                 }
@@ -15221,18 +15280,37 @@
                 switch ( input.LA(2) ) {
                 case 46:
                     {
-                    int LA37_8 = input.LA(3);
+                    int LA52_7 = input.LA(3);
 
-                    if ( (LA37_8==18||LA37_8==42) ) {
-                        alt37=3;
+                    if ( (LA52_7==36) ) {
+                        alt52=2;
                     }
-                    else if ( (LA37_8==36) ) {
-                        alt37=2;
+                    else if ( (LA52_7==18||LA52_7==42) ) {
+                        alt52=3;
                     }
                     else {
                         if (state.backtracking>0) {state.failed=true; return ;}
                         NoViableAltException nvae =
-                            new NoViableAltException("", 37, 8, input);
+                            new NoViableAltException("", 52, 7, input);
+
+                        throw nvae;
+                    }
+                    }
+                    break;
+                case 24:
+                    {
+                    int LA52_8 = input.LA(3);
+
+                    if ( (LA52_8==36) ) {
+                        alt52=2;
+                    }
+                    else if ( (LA52_8==18||LA52_8==42) ) {
+                        alt52=3;
+                    }
+                    else {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 52, 8, input);
 
                         throw nvae;
                     }
@@ -15241,18 +15319,18 @@
                 case 18:
                 case 42:
                     {
-                    alt37=3;
+                    alt52=3;
                     }
                     break;
                 case 36:
                     {
-                    alt37=2;
+                    alt52=2;
                     }
                     break;
                 default:
                     if (state.backtracking>0) {state.failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("", 37, 3, input);
+                        new NoViableAltException("", 52, 3, input);
 
                     throw nvae;
                 }
@@ -15261,43 +15339,43 @@
                 break;
             case 36:
                 {
-                alt37=2;
+                alt52=2;
                 }
                 break;
             case 18:
             case 42:
                 {
-                alt37=3;
+                alt52=3;
                 }
                 break;
             case 20:
-            case 57:
+            case 66:
                 {
-                alt37=4;
+                alt52=4;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 37, 0, input);
+                    new NoViableAltException("", 52, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt37) {
+            switch (alt52) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4447:1: ( ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4605:1: ( ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4447:1: ( ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4448:1: ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4605:1: ( ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4606:1: ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getStructuredClassCSAccess().getOwnedAnnotationsAssignment_7_0_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4449:1: ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4449:2: rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4607:1: ( rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4607:2: rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0_in_rule__StructuredClassCS__Alternatives_7_0_19885);
+                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0_in_rule__StructuredClassCS__Alternatives_7_0_110046);
                     rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0();
 
                     state._fsp--;
@@ -15315,18 +15393,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4453:6: ( ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4611:6: ( ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4453:6: ( ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4454:1: ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4611:6: ( ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4612:1: ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getStructuredClassCSAccess().getOwnedOperationsAssignment_7_0_1_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4455:1: ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4455:2: rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4613:1: ( rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4613:2: rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1_in_rule__StructuredClassCS__Alternatives_7_0_19903);
+                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1_in_rule__StructuredClassCS__Alternatives_7_0_110064);
                     rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1();
 
                     state._fsp--;
@@ -15344,18 +15422,18 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4459:6: ( ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4617:6: ( ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4459:6: ( ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4460:1: ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4617:6: ( ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4618:1: ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getStructuredClassCSAccess().getOwnedPropertiesAssignment_7_0_1_2()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4461:1: ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4461:2: rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4619:1: ( rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4619:2: rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2_in_rule__StructuredClassCS__Alternatives_7_0_19921);
+                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2_in_rule__StructuredClassCS__Alternatives_7_0_110082);
                     rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2();
 
                     state._fsp--;
@@ -15373,18 +15451,18 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4465:6: ( ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4623:6: ( ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4465:6: ( ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4466:1: ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4623:6: ( ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4624:1: ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getStructuredClassCSAccess().getOwnedConstraintsAssignment_7_0_1_3()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4467:1: ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4467:2: rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4625:1: ( rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4625:2: rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3_in_rule__StructuredClassCS__Alternatives_7_0_19939);
+                    pushFollow(FollowSets000.FOLLOW_rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3_in_rule__StructuredClassCS__Alternatives_7_0_110100);
                     rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3();
 
                     state._fsp--;
@@ -15419,51 +15497,70 @@
 
 
     // $ANTLR start "rule__StructuralFeatureCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4476:1: rule__StructuralFeatureCS__Alternatives : ( ( ruleAttributeCS ) | ( ruleReferenceCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4634:1: rule__StructuralFeatureCS__Alternatives : ( ( ruleAttributeCS ) | ( ruleReferenceCS ) );
     public final void rule__StructuralFeatureCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4480:1: ( ( ruleAttributeCS ) | ( ruleReferenceCS ) )
-            int alt38=2;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4638:1: ( ( ruleAttributeCS ) | ( ruleReferenceCS ) )
+            int alt53=2;
             switch ( input.LA(1) ) {
             case 46:
                 {
                 switch ( input.LA(2) ) {
-                case 24:
+                case 46:
                     {
-                    int LA38_5 = input.LA(3);
+                    int LA53_5 = input.LA(3);
 
-                    if ( (LA38_5==18) ) {
-                        alt38=1;
+                    if ( (LA53_5==42) ) {
+                        alt53=2;
                     }
-                    else if ( (LA38_5==42) ) {
-                        alt38=2;
+                    else if ( (LA53_5==18) ) {
+                        alt53=1;
                     }
                     else {
                         if (state.backtracking>0) {state.failed=true; return ;}
                         NoViableAltException nvae =
-                            new NoViableAltException("", 38, 5, input);
+                            new NoViableAltException("", 53, 5, input);
 
                         throw nvae;
                     }
                     }
                     break;
-                case 42:
+                case 24:
                     {
-                    alt38=2;
+                    int LA53_6 = input.LA(3);
+
+                    if ( (LA53_6==18) ) {
+                        alt53=1;
+                    }
+                    else if ( (LA53_6==42) ) {
+                        alt53=2;
+                    }
+                    else {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 53, 6, input);
+
+                        throw nvae;
+                    }
                     }
                     break;
                 case 18:
                     {
-                    alt38=1;
+                    alt53=1;
+                    }
+                    break;
+                case 42:
+                    {
+                    alt53=2;
                     }
                     break;
                 default:
                     if (state.backtracking>0) {state.failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("", 38, 1, input);
+                        new NoViableAltException("", 53, 1, input);
 
                     throw nvae;
                 }
@@ -15475,37 +15572,56 @@
                 switch ( input.LA(2) ) {
                 case 46:
                     {
-                    int LA38_6 = input.LA(3);
+                    int LA53_5 = input.LA(3);
 
-                    if ( (LA38_6==42) ) {
-                        alt38=2;
+                    if ( (LA53_5==42) ) {
+                        alt53=2;
                     }
-                    else if ( (LA38_6==18) ) {
-                        alt38=1;
+                    else if ( (LA53_5==18) ) {
+                        alt53=1;
                     }
                     else {
                         if (state.backtracking>0) {state.failed=true; return ;}
                         NoViableAltException nvae =
-                            new NoViableAltException("", 38, 6, input);
+                            new NoViableAltException("", 53, 5, input);
 
                         throw nvae;
                     }
                     }
                     break;
-                case 18:
+                case 24:
                     {
-                    alt38=1;
+                    int LA53_6 = input.LA(3);
+
+                    if ( (LA53_6==18) ) {
+                        alt53=1;
+                    }
+                    else if ( (LA53_6==42) ) {
+                        alt53=2;
+                    }
+                    else {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 53, 6, input);
+
+                        throw nvae;
+                    }
                     }
                     break;
                 case 42:
                     {
-                    alt38=2;
+                    alt53=2;
+                    }
+                    break;
+                case 18:
+                    {
+                    alt53=1;
                     }
                     break;
                 default:
                     if (state.backtracking>0) {state.failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("", 38, 2, input);
+                        new NoViableAltException("", 53, 2, input);
 
                     throw nvae;
                 }
@@ -15514,33 +15630,33 @@
                 break;
             case 18:
                 {
-                alt38=1;
+                alt53=1;
                 }
                 break;
             case 42:
                 {
-                alt38=2;
+                alt53=2;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 38, 0, input);
+                    new NoViableAltException("", 53, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt38) {
+            switch (alt53) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4481:1: ( ruleAttributeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4639:1: ( ruleAttributeCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4481:1: ( ruleAttributeCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4482:1: ruleAttributeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4639:1: ( ruleAttributeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4640:1: ruleAttributeCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getStructuralFeatureCSAccess().getAttributeCSParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleAttributeCS_in_rule__StructuralFeatureCS__Alternatives9972);
+                    pushFollow(FollowSets000.FOLLOW_ruleAttributeCS_in_rule__StructuralFeatureCS__Alternatives10133);
                     ruleAttributeCS();
 
                     state._fsp--;
@@ -15555,15 +15671,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4487:6: ( ruleReferenceCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4645:6: ( ruleReferenceCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4487:6: ( ruleReferenceCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4488:1: ruleReferenceCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4645:6: ( ruleReferenceCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4646:1: ruleReferenceCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getStructuralFeatureCSAccess().getReferenceCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleReferenceCS_in_rule__StructuralFeatureCS__Alternatives9989);
+                    pushFollow(FollowSets000.FOLLOW_ruleReferenceCS_in_rule__StructuralFeatureCS__Alternatives10150);
                     ruleReferenceCS();
 
                     state._fsp--;
@@ -15595,43 +15711,43 @@
 
 
     // $ANTLR start "rule__SysMLCS__Alternatives_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4498:1: rule__SysMLCS__Alternatives_2 : ( ( ( rule__SysMLCS__Group_2_0__0 ) ) | ( ( rule__SysMLCS__Group_2_1__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4656:1: rule__SysMLCS__Alternatives_2 : ( ( ( rule__SysMLCS__Group_2_0__0 ) ) | ( ( rule__SysMLCS__Group_2_1__0 ) ) );
     public final void rule__SysMLCS__Alternatives_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4502:1: ( ( ( rule__SysMLCS__Group_2_0__0 ) ) | ( ( rule__SysMLCS__Group_2_1__0 ) ) )
-            int alt39=2;
-            int LA39_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4660:1: ( ( ( rule__SysMLCS__Group_2_0__0 ) ) | ( ( rule__SysMLCS__Group_2_1__0 ) ) )
+            int alt54=2;
+            int LA54_0 = input.LA(1);
 
-            if ( (LA39_0==RULE_SINGLE_QUOTED_STRING||(LA39_0>=RULE_SIMPLE_ID && LA39_0<=RULE_ESCAPED_ID)||(LA39_0>=17 && LA39_0<=52)||(LA39_0>=55 && LA39_0<=60)) ) {
-                alt39=1;
+            if ( (LA54_0==RULE_SINGLE_QUOTED_STRING||(LA54_0>=RULE_SIMPLE_ID && LA54_0<=RULE_ESCAPED_ID)||(LA54_0>=17 && LA54_0<=52)||(LA54_0>=64 && LA54_0<=69)) ) {
+                alt54=1;
             }
-            else if ( (LA39_0==99) ) {
-                alt39=2;
+            else if ( (LA54_0==108) ) {
+                alt54=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 39, 0, input);
+                    new NoViableAltException("", 54, 0, input);
 
                 throw nvae;
             }
-            switch (alt39) {
+            switch (alt54) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4503:1: ( ( rule__SysMLCS__Group_2_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4661:1: ( ( rule__SysMLCS__Group_2_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4503:1: ( ( rule__SysMLCS__Group_2_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4504:1: ( rule__SysMLCS__Group_2_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4661:1: ( ( rule__SysMLCS__Group_2_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4662:1: ( rule__SysMLCS__Group_2_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSysMLCSAccess().getGroup_2_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4505:1: ( rule__SysMLCS__Group_2_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4505:2: rule__SysMLCS__Group_2_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4663:1: ( rule__SysMLCS__Group_2_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4663:2: rule__SysMLCS__Group_2_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__SysMLCS__Group_2_0__0_in_rule__SysMLCS__Alternatives_210021);
+                    pushFollow(FollowSets000.FOLLOW_rule__SysMLCS__Group_2_0__0_in_rule__SysMLCS__Alternatives_210182);
                     rule__SysMLCS__Group_2_0__0();
 
                     state._fsp--;
@@ -15649,18 +15765,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4509:6: ( ( rule__SysMLCS__Group_2_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4667:6: ( ( rule__SysMLCS__Group_2_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4509:6: ( ( rule__SysMLCS__Group_2_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4510:1: ( rule__SysMLCS__Group_2_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4667:6: ( ( rule__SysMLCS__Group_2_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4668:1: ( rule__SysMLCS__Group_2_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSysMLCSAccess().getGroup_2_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4511:1: ( rule__SysMLCS__Group_2_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4511:2: rule__SysMLCS__Group_2_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4669:1: ( rule__SysMLCS__Group_2_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4669:2: rule__SysMLCS__Group_2_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__SysMLCS__Group_2_1__0_in_rule__SysMLCS__Alternatives_210039);
+                    pushFollow(FollowSets000.FOLLOW_rule__SysMLCS__Group_2_1__0_in_rule__SysMLCS__Alternatives_210200);
                     rule__SysMLCS__Group_2_1__0();
 
                     state._fsp--;
@@ -15695,43 +15811,43 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4521:1: rule__TemplateBindingCS__Alternatives : ( ( ( rule__TemplateBindingCS__Group_0__0 ) ) | ( ( rule__TemplateBindingCS__Group_1__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4679:1: rule__TemplateBindingCS__Alternatives : ( ( ( rule__TemplateBindingCS__Group_0__0 ) ) | ( ( rule__TemplateBindingCS__Group_1__0 ) ) );
     public final void rule__TemplateBindingCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4525:1: ( ( ( rule__TemplateBindingCS__Group_0__0 ) ) | ( ( rule__TemplateBindingCS__Group_1__0 ) ) )
-            int alt40=2;
-            int LA40_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4683:1: ( ( ( rule__TemplateBindingCS__Group_0__0 ) ) | ( ( rule__TemplateBindingCS__Group_1__0 ) ) )
+            int alt55=2;
+            int LA55_0 = input.LA(1);
 
-            if ( (LA40_0==95) ) {
-                alt40=1;
+            if ( (LA55_0==104) ) {
+                alt55=1;
             }
-            else if ( (LA40_0==67) ) {
-                alt40=2;
+            else if ( (LA55_0==76) ) {
+                alt55=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 40, 0, input);
+                    new NoViableAltException("", 55, 0, input);
 
                 throw nvae;
             }
-            switch (alt40) {
+            switch (alt55) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4526:1: ( ( rule__TemplateBindingCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4684:1: ( ( rule__TemplateBindingCS__Group_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4526:1: ( ( rule__TemplateBindingCS__Group_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4527:1: ( rule__TemplateBindingCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4684:1: ( ( rule__TemplateBindingCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4685:1: ( rule__TemplateBindingCS__Group_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTemplateBindingCSAccess().getGroup_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4528:1: ( rule__TemplateBindingCS__Group_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4528:2: rule__TemplateBindingCS__Group_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4686:1: ( rule__TemplateBindingCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4686:2: rule__TemplateBindingCS__Group_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__TemplateBindingCS__Group_0__0_in_rule__TemplateBindingCS__Alternatives10073);
+                    pushFollow(FollowSets000.FOLLOW_rule__TemplateBindingCS__Group_0__0_in_rule__TemplateBindingCS__Alternatives10234);
                     rule__TemplateBindingCS__Group_0__0();
 
                     state._fsp--;
@@ -15749,18 +15865,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4532:6: ( ( rule__TemplateBindingCS__Group_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4690:6: ( ( rule__TemplateBindingCS__Group_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4532:6: ( ( rule__TemplateBindingCS__Group_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4533:1: ( rule__TemplateBindingCS__Group_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4690:6: ( ( rule__TemplateBindingCS__Group_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4691:1: ( rule__TemplateBindingCS__Group_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTemplateBindingCSAccess().getGroup_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4534:1: ( rule__TemplateBindingCS__Group_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4534:2: rule__TemplateBindingCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4692:1: ( rule__TemplateBindingCS__Group_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4692:2: rule__TemplateBindingCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__TemplateBindingCS__Group_1__0_in_rule__TemplateBindingCS__Alternatives10091);
+                    pushFollow(FollowSets000.FOLLOW_rule__TemplateBindingCS__Group_1__0_in_rule__TemplateBindingCS__Alternatives10252);
                     rule__TemplateBindingCS__Group_1__0();
 
                     state._fsp--;
@@ -15795,43 +15911,43 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4543:1: rule__TemplateSignatureCS__Alternatives : ( ( ( rule__TemplateSignatureCS__Group_0__0 ) ) | ( ( rule__TemplateSignatureCS__Group_1__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4701:1: rule__TemplateSignatureCS__Alternatives : ( ( ( rule__TemplateSignatureCS__Group_0__0 ) ) | ( ( rule__TemplateSignatureCS__Group_1__0 ) ) );
     public final void rule__TemplateSignatureCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4547:1: ( ( ( rule__TemplateSignatureCS__Group_0__0 ) ) | ( ( rule__TemplateSignatureCS__Group_1__0 ) ) )
-            int alt41=2;
-            int LA41_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4705:1: ( ( ( rule__TemplateSignatureCS__Group_0__0 ) ) | ( ( rule__TemplateSignatureCS__Group_1__0 ) ) )
+            int alt56=2;
+            int LA56_0 = input.LA(1);
 
-            if ( (LA41_0==95) ) {
-                alt41=1;
+            if ( (LA56_0==104) ) {
+                alt56=1;
             }
-            else if ( (LA41_0==67) ) {
-                alt41=2;
+            else if ( (LA56_0==76) ) {
+                alt56=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 41, 0, input);
+                    new NoViableAltException("", 56, 0, input);
 
                 throw nvae;
             }
-            switch (alt41) {
+            switch (alt56) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4548:1: ( ( rule__TemplateSignatureCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4706:1: ( ( rule__TemplateSignatureCS__Group_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4548:1: ( ( rule__TemplateSignatureCS__Group_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4549:1: ( rule__TemplateSignatureCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4706:1: ( ( rule__TemplateSignatureCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4707:1: ( rule__TemplateSignatureCS__Group_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTemplateSignatureCSAccess().getGroup_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4550:1: ( rule__TemplateSignatureCS__Group_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4550:2: rule__TemplateSignatureCS__Group_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4708:1: ( rule__TemplateSignatureCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4708:2: rule__TemplateSignatureCS__Group_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__TemplateSignatureCS__Group_0__0_in_rule__TemplateSignatureCS__Alternatives10124);
+                    pushFollow(FollowSets000.FOLLOW_rule__TemplateSignatureCS__Group_0__0_in_rule__TemplateSignatureCS__Alternatives10285);
                     rule__TemplateSignatureCS__Group_0__0();
 
                     state._fsp--;
@@ -15849,18 +15965,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4554:6: ( ( rule__TemplateSignatureCS__Group_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4712:6: ( ( rule__TemplateSignatureCS__Group_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4554:6: ( ( rule__TemplateSignatureCS__Group_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4555:1: ( rule__TemplateSignatureCS__Group_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4712:6: ( ( rule__TemplateSignatureCS__Group_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4713:1: ( rule__TemplateSignatureCS__Group_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTemplateSignatureCSAccess().getGroup_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4556:1: ( rule__TemplateSignatureCS__Group_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4556:2: rule__TemplateSignatureCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4714:1: ( rule__TemplateSignatureCS__Group_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4714:2: rule__TemplateSignatureCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__TemplateSignatureCS__Group_1__0_in_rule__TemplateSignatureCS__Alternatives10142);
+                    pushFollow(FollowSets000.FOLLOW_rule__TemplateSignatureCS__Group_1__0_in_rule__TemplateSignatureCS__Alternatives10303);
                     rule__TemplateSignatureCS__Group_1__0();
 
                     state._fsp--;
@@ -15895,40 +16011,40 @@
 
 
     // $ANTLR start "rule__TypedRefCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4565:1: rule__TypedRefCS__Alternatives : ( ( ruleTypeLiteralCS ) | ( ruleTypedTypeRefCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4723:1: rule__TypedRefCS__Alternatives : ( ( ruleTypeLiteralCS ) | ( ruleTypedTypeRefCS ) );
     public final void rule__TypedRefCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4569:1: ( ( ruleTypeLiteralCS ) | ( ruleTypedTypeRefCS ) )
-            int alt42=2;
-            int LA42_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4727:1: ( ( ruleTypeLiteralCS ) | ( ruleTypedTypeRefCS ) )
+            int alt57=2;
+            int LA57_0 = input.LA(1);
 
-            if ( ((LA42_0>=80 && LA42_0<=93)) ) {
-                alt42=1;
+            if ( ((LA57_0>=89 && LA57_0<=102)) ) {
+                alt57=1;
             }
-            else if ( ((LA42_0>=RULE_SIMPLE_ID && LA42_0<=RULE_ESCAPED_ID)||(LA42_0>=17 && LA42_0<=52)||(LA42_0>=55 && LA42_0<=60)) ) {
-                alt42=2;
+            else if ( ((LA57_0>=RULE_SIMPLE_ID && LA57_0<=RULE_ESCAPED_ID)||(LA57_0>=17 && LA57_0<=52)||(LA57_0>=64 && LA57_0<=69)) ) {
+                alt57=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 42, 0, input);
+                    new NoViableAltException("", 57, 0, input);
 
                 throw nvae;
             }
-            switch (alt42) {
+            switch (alt57) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4570:1: ( ruleTypeLiteralCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4728:1: ( ruleTypeLiteralCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4570:1: ( ruleTypeLiteralCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4571:1: ruleTypeLiteralCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4728:1: ( ruleTypeLiteralCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4729:1: ruleTypeLiteralCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypedRefCSAccess().getTypeLiteralCSParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_rule__TypedRefCS__Alternatives10175);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_rule__TypedRefCS__Alternatives10336);
                     ruleTypeLiteralCS();
 
                     state._fsp--;
@@ -15943,15 +16059,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4576:6: ( ruleTypedTypeRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4734:6: ( ruleTypedTypeRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4576:6: ( ruleTypedTypeRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4577:1: ruleTypedTypeRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4734:6: ( ruleTypedTypeRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4735:1: ruleTypedTypeRefCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypedRefCSAccess().getTypedTypeRefCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedTypeRefCS_in_rule__TypedRefCS__Alternatives10192);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedTypeRefCS_in_rule__TypedRefCS__Alternatives10353);
                     ruleTypedTypeRefCS();
 
                     state._fsp--;
@@ -15983,14 +16099,14 @@
 
 
     // $ANTLR start "rule__UnrestrictedName__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4587:1: rule__UnrestrictedName__Alternatives : ( ( ruleEnumerationLiteralName ) | ( 'annotation' ) | ( 'documentation' ) | ( 'invariant' ) | ( 'literal' ) | ( 'serializable' ) | ( 'sysml' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4745:1: rule__UnrestrictedName__Alternatives : ( ( ruleEnumerationLiteralName ) | ( 'annotation' ) | ( 'documentation' ) | ( 'invariant' ) | ( 'literal' ) | ( 'serializable' ) | ( 'sysml' ) );
     public final void rule__UnrestrictedName__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4591:1: ( ( ruleEnumerationLiteralName ) | ( 'annotation' ) | ( 'documentation' ) | ( 'invariant' ) | ( 'literal' ) | ( 'serializable' ) | ( 'sysml' ) )
-            int alt43=7;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4749:1: ( ( ruleEnumerationLiteralName ) | ( 'annotation' ) | ( 'documentation' ) | ( 'invariant' ) | ( 'literal' ) | ( 'serializable' ) | ( 'sysml' ) )
+            int alt58=7;
             switch ( input.LA(1) ) {
             case RULE_SIMPLE_ID:
             case RULE_ESCAPED_ID:
@@ -16031,58 +16147,58 @@
             case 51:
             case 52:
                 {
-                alt43=1;
+                alt58=1;
                 }
                 break;
-            case 55:
+            case 64:
                 {
-                alt43=2;
+                alt58=2;
                 }
                 break;
-            case 56:
+            case 65:
                 {
-                alt43=3;
+                alt58=3;
                 }
                 break;
-            case 57:
+            case 66:
                 {
-                alt43=4;
+                alt58=4;
                 }
                 break;
-            case 58:
+            case 67:
                 {
-                alt43=5;
+                alt58=5;
                 }
                 break;
-            case 59:
+            case 68:
                 {
-                alt43=6;
+                alt58=6;
                 }
                 break;
-            case 60:
+            case 69:
                 {
-                alt43=7;
+                alt58=7;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 43, 0, input);
+                    new NoViableAltException("", 58, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt43) {
+            switch (alt58) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4592:1: ( ruleEnumerationLiteralName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4750:1: ( ruleEnumerationLiteralName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4592:1: ( ruleEnumerationLiteralName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4593:1: ruleEnumerationLiteralName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4750:1: ( ruleEnumerationLiteralName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4751:1: ruleEnumerationLiteralName
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getUnrestrictedNameAccess().getEnumerationLiteralNameParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralName_in_rule__UnrestrictedName__Alternatives10224);
+                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralName_in_rule__UnrestrictedName__Alternatives10385);
                     ruleEnumerationLiteralName();
 
                     state._fsp--;
@@ -16097,15 +16213,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4598:6: ( 'annotation' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4756:6: ( 'annotation' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4598:6: ( 'annotation' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4599:1: 'annotation'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4756:6: ( 'annotation' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4757:1: 'annotation'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getUnrestrictedNameAccess().getAnnotationKeyword_1()); 
                     }
-                    match(input,55,FollowSets000.FOLLOW_55_in_rule__UnrestrictedName__Alternatives10242); if (state.failed) return ;
+                    match(input,64,FollowSets000.FOLLOW_64_in_rule__UnrestrictedName__Alternatives10403); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getUnrestrictedNameAccess().getAnnotationKeyword_1()); 
                     }
@@ -16116,15 +16232,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4606:6: ( 'documentation' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4764:6: ( 'documentation' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4606:6: ( 'documentation' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4607:1: 'documentation'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4764:6: ( 'documentation' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4765:1: 'documentation'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getUnrestrictedNameAccess().getDocumentationKeyword_2()); 
                     }
-                    match(input,56,FollowSets000.FOLLOW_56_in_rule__UnrestrictedName__Alternatives10262); if (state.failed) return ;
+                    match(input,65,FollowSets000.FOLLOW_65_in_rule__UnrestrictedName__Alternatives10423); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getUnrestrictedNameAccess().getDocumentationKeyword_2()); 
                     }
@@ -16135,15 +16251,15 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4614:6: ( 'invariant' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4772:6: ( 'invariant' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4614:6: ( 'invariant' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4615:1: 'invariant'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4772:6: ( 'invariant' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4773:1: 'invariant'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getUnrestrictedNameAccess().getInvariantKeyword_3()); 
                     }
-                    match(input,57,FollowSets000.FOLLOW_57_in_rule__UnrestrictedName__Alternatives10282); if (state.failed) return ;
+                    match(input,66,FollowSets000.FOLLOW_66_in_rule__UnrestrictedName__Alternatives10443); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getUnrestrictedNameAccess().getInvariantKeyword_3()); 
                     }
@@ -16154,15 +16270,15 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4622:6: ( 'literal' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4780:6: ( 'literal' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4622:6: ( 'literal' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4623:1: 'literal'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4780:6: ( 'literal' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4781:1: 'literal'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getUnrestrictedNameAccess().getLiteralKeyword_4()); 
                     }
-                    match(input,58,FollowSets000.FOLLOW_58_in_rule__UnrestrictedName__Alternatives10302); if (state.failed) return ;
+                    match(input,67,FollowSets000.FOLLOW_67_in_rule__UnrestrictedName__Alternatives10463); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getUnrestrictedNameAccess().getLiteralKeyword_4()); 
                     }
@@ -16173,15 +16289,15 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4630:6: ( 'serializable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4788:6: ( 'serializable' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4630:6: ( 'serializable' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4631:1: 'serializable'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4788:6: ( 'serializable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4789:1: 'serializable'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getUnrestrictedNameAccess().getSerializableKeyword_5()); 
                     }
-                    match(input,59,FollowSets000.FOLLOW_59_in_rule__UnrestrictedName__Alternatives10322); if (state.failed) return ;
+                    match(input,68,FollowSets000.FOLLOW_68_in_rule__UnrestrictedName__Alternatives10483); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getUnrestrictedNameAccess().getSerializableKeyword_5()); 
                     }
@@ -16192,15 +16308,15 @@
                     }
                     break;
                 case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4638:6: ( 'sysml' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4796:6: ( 'sysml' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4638:6: ( 'sysml' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4639:1: 'sysml'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4796:6: ( 'sysml' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4797:1: 'sysml'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getUnrestrictedNameAccess().getSysmlKeyword_6()); 
                     }
-                    match(input,60,FollowSets000.FOLLOW_60_in_rule__UnrestrictedName__Alternatives10342); if (state.failed) return ;
+                    match(input,69,FollowSets000.FOLLOW_69_in_rule__UnrestrictedName__Alternatives10503); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getUnrestrictedNameAccess().getSysmlKeyword_6()); 
                     }
@@ -16228,40 +16344,40 @@
 
 
     // $ANTLR start "rule__EssentialOCLUnaryOperatorName__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4652:1: rule__EssentialOCLUnaryOperatorName__Alternatives : ( ( '-' ) | ( 'not' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4810:1: rule__EssentialOCLUnaryOperatorName__Alternatives : ( ( '-' ) | ( 'not' ) );
     public final void rule__EssentialOCLUnaryOperatorName__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4656:1: ( ( '-' ) | ( 'not' ) )
-            int alt44=2;
-            int LA44_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4814:1: ( ( '-' ) | ( 'not' ) )
+            int alt59=2;
+            int LA59_0 = input.LA(1);
 
-            if ( (LA44_0==61) ) {
-                alt44=1;
+            if ( (LA59_0==70) ) {
+                alt59=1;
             }
-            else if ( (LA44_0==62) ) {
-                alt44=2;
+            else if ( (LA59_0==71) ) {
+                alt59=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 44, 0, input);
+                    new NoViableAltException("", 59, 0, input);
 
                 throw nvae;
             }
-            switch (alt44) {
+            switch (alt59) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4657:1: ( '-' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4815:1: ( '-' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4657:1: ( '-' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4658:1: '-'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4815:1: ( '-' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4816:1: '-'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLUnaryOperatorNameAccess().getHyphenMinusKeyword_0()); 
                     }
-                    match(input,61,FollowSets000.FOLLOW_61_in_rule__EssentialOCLUnaryOperatorName__Alternatives10378); if (state.failed) return ;
+                    match(input,70,FollowSets000.FOLLOW_70_in_rule__EssentialOCLUnaryOperatorName__Alternatives10539); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLUnaryOperatorNameAccess().getHyphenMinusKeyword_0()); 
                     }
@@ -16272,15 +16388,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4665:6: ( 'not' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4823:6: ( 'not' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4665:6: ( 'not' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4666:1: 'not'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4823:6: ( 'not' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4824:1: 'not'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLUnaryOperatorNameAccess().getNotKeyword_1()); 
                     }
-                    match(input,62,FollowSets000.FOLLOW_62_in_rule__EssentialOCLUnaryOperatorName__Alternatives10398); if (state.failed) return ;
+                    match(input,71,FollowSets000.FOLLOW_71_in_rule__EssentialOCLUnaryOperatorName__Alternatives10559); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLUnaryOperatorNameAccess().getNotKeyword_1()); 
                     }
@@ -16308,104 +16424,104 @@
 
 
     // $ANTLR start "rule__EssentialOCLInfixOperatorName__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4678:1: rule__EssentialOCLInfixOperatorName__Alternatives : ( ( '*' ) | ( '/' ) | ( '+' ) | ( '-' ) | ( '>' ) | ( '<' ) | ( '>=' ) | ( '<=' ) | ( '=' ) | ( '<>' ) | ( 'and' ) | ( 'or' ) | ( 'xor' ) | ( 'implies' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4836:1: rule__EssentialOCLInfixOperatorName__Alternatives : ( ( '*' ) | ( '/' ) | ( '+' ) | ( '-' ) | ( '>' ) | ( '<' ) | ( '>=' ) | ( '<=' ) | ( '=' ) | ( '<>' ) | ( 'and' ) | ( 'or' ) | ( 'xor' ) | ( 'implies' ) );
     public final void rule__EssentialOCLInfixOperatorName__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4682:1: ( ( '*' ) | ( '/' ) | ( '+' ) | ( '-' ) | ( '>' ) | ( '<' ) | ( '>=' ) | ( '<=' ) | ( '=' ) | ( '<>' ) | ( 'and' ) | ( 'or' ) | ( 'xor' ) | ( 'implies' ) )
-            int alt45=14;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4840:1: ( ( '*' ) | ( '/' ) | ( '+' ) | ( '-' ) | ( '>' ) | ( '<' ) | ( '>=' ) | ( '<=' ) | ( '=' ) | ( '<>' ) | ( 'and' ) | ( 'or' ) | ( 'xor' ) | ( 'implies' ) )
+            int alt60=14;
             switch ( input.LA(1) ) {
-            case 63:
-                {
-                alt45=1;
-                }
-                break;
-            case 64:
-                {
-                alt45=2;
-                }
-                break;
-            case 65:
-                {
-                alt45=3;
-                }
-                break;
-            case 61:
-                {
-                alt45=4;
-                }
-                break;
-            case 66:
-                {
-                alt45=5;
-                }
-                break;
-            case 67:
-                {
-                alt45=6;
-                }
-                break;
-            case 68:
-                {
-                alt45=7;
-                }
-                break;
-            case 69:
-                {
-                alt45=8;
-                }
-                break;
-            case 70:
-                {
-                alt45=9;
-                }
-                break;
-            case 71:
-                {
-                alt45=10;
-                }
-                break;
             case 72:
                 {
-                alt45=11;
+                alt60=1;
                 }
                 break;
             case 73:
                 {
-                alt45=12;
+                alt60=2;
                 }
                 break;
             case 74:
                 {
-                alt45=13;
+                alt60=3;
+                }
+                break;
+            case 70:
+                {
+                alt60=4;
                 }
                 break;
             case 75:
                 {
-                alt45=14;
+                alt60=5;
+                }
+                break;
+            case 76:
+                {
+                alt60=6;
+                }
+                break;
+            case 77:
+                {
+                alt60=7;
+                }
+                break;
+            case 78:
+                {
+                alt60=8;
+                }
+                break;
+            case 79:
+                {
+                alt60=9;
+                }
+                break;
+            case 80:
+                {
+                alt60=10;
+                }
+                break;
+            case 81:
+                {
+                alt60=11;
+                }
+                break;
+            case 82:
+                {
+                alt60=12;
+                }
+                break;
+            case 83:
+                {
+                alt60=13;
+                }
+                break;
+            case 84:
+                {
+                alt60=14;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 45, 0, input);
+                    new NoViableAltException("", 60, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt45) {
+            switch (alt60) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4683:1: ( '*' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4841:1: ( '*' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4683:1: ( '*' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4684:1: '*'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4841:1: ( '*' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4842:1: '*'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getAsteriskKeyword_0()); 
                     }
-                    match(input,63,FollowSets000.FOLLOW_63_in_rule__EssentialOCLInfixOperatorName__Alternatives10433); if (state.failed) return ;
+                    match(input,72,FollowSets000.FOLLOW_72_in_rule__EssentialOCLInfixOperatorName__Alternatives10594); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getAsteriskKeyword_0()); 
                     }
@@ -16416,15 +16532,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4691:6: ( '/' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4849:6: ( '/' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4691:6: ( '/' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4692:1: '/'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4849:6: ( '/' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4850:1: '/'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getSolidusKeyword_1()); 
                     }
-                    match(input,64,FollowSets000.FOLLOW_64_in_rule__EssentialOCLInfixOperatorName__Alternatives10453); if (state.failed) return ;
+                    match(input,73,FollowSets000.FOLLOW_73_in_rule__EssentialOCLInfixOperatorName__Alternatives10614); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getSolidusKeyword_1()); 
                     }
@@ -16435,15 +16551,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4699:6: ( '+' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4857:6: ( '+' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4699:6: ( '+' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4700:1: '+'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4857:6: ( '+' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4858:1: '+'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getPlusSignKeyword_2()); 
                     }
-                    match(input,65,FollowSets000.FOLLOW_65_in_rule__EssentialOCLInfixOperatorName__Alternatives10473); if (state.failed) return ;
+                    match(input,74,FollowSets000.FOLLOW_74_in_rule__EssentialOCLInfixOperatorName__Alternatives10634); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getPlusSignKeyword_2()); 
                     }
@@ -16454,15 +16570,15 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4707:6: ( '-' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4865:6: ( '-' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4707:6: ( '-' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4708:1: '-'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4865:6: ( '-' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4866:1: '-'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getHyphenMinusKeyword_3()); 
                     }
-                    match(input,61,FollowSets000.FOLLOW_61_in_rule__EssentialOCLInfixOperatorName__Alternatives10493); if (state.failed) return ;
+                    match(input,70,FollowSets000.FOLLOW_70_in_rule__EssentialOCLInfixOperatorName__Alternatives10654); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getHyphenMinusKeyword_3()); 
                     }
@@ -16473,15 +16589,15 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4715:6: ( '>' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4873:6: ( '>' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4715:6: ( '>' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4716:1: '>'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4873:6: ( '>' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4874:1: '>'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getGreaterThanSignKeyword_4()); 
                     }
-                    match(input,66,FollowSets000.FOLLOW_66_in_rule__EssentialOCLInfixOperatorName__Alternatives10513); if (state.failed) return ;
+                    match(input,75,FollowSets000.FOLLOW_75_in_rule__EssentialOCLInfixOperatorName__Alternatives10674); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getGreaterThanSignKeyword_4()); 
                     }
@@ -16492,15 +16608,15 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4723:6: ( '<' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4881:6: ( '<' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4723:6: ( '<' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4724:1: '<'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4881:6: ( '<' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4882:1: '<'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getLessThanSignKeyword_5()); 
                     }
-                    match(input,67,FollowSets000.FOLLOW_67_in_rule__EssentialOCLInfixOperatorName__Alternatives10533); if (state.failed) return ;
+                    match(input,76,FollowSets000.FOLLOW_76_in_rule__EssentialOCLInfixOperatorName__Alternatives10694); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getLessThanSignKeyword_5()); 
                     }
@@ -16511,15 +16627,15 @@
                     }
                     break;
                 case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4731:6: ( '>=' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4889:6: ( '>=' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4731:6: ( '>=' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4732:1: '>='
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4889:6: ( '>=' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4890:1: '>='
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getGreaterThanSignEqualsSignKeyword_6()); 
                     }
-                    match(input,68,FollowSets000.FOLLOW_68_in_rule__EssentialOCLInfixOperatorName__Alternatives10553); if (state.failed) return ;
+                    match(input,77,FollowSets000.FOLLOW_77_in_rule__EssentialOCLInfixOperatorName__Alternatives10714); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getGreaterThanSignEqualsSignKeyword_6()); 
                     }
@@ -16530,15 +16646,15 @@
                     }
                     break;
                 case 8 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4739:6: ( '<=' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4897:6: ( '<=' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4739:6: ( '<=' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4740:1: '<='
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4897:6: ( '<=' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4898:1: '<='
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getLessThanSignEqualsSignKeyword_7()); 
                     }
-                    match(input,69,FollowSets000.FOLLOW_69_in_rule__EssentialOCLInfixOperatorName__Alternatives10573); if (state.failed) return ;
+                    match(input,78,FollowSets000.FOLLOW_78_in_rule__EssentialOCLInfixOperatorName__Alternatives10734); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getLessThanSignEqualsSignKeyword_7()); 
                     }
@@ -16549,15 +16665,15 @@
                     }
                     break;
                 case 9 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4747:6: ( '=' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4905:6: ( '=' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4747:6: ( '=' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4748:1: '='
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4905:6: ( '=' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4906:1: '='
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getEqualsSignKeyword_8()); 
                     }
-                    match(input,70,FollowSets000.FOLLOW_70_in_rule__EssentialOCLInfixOperatorName__Alternatives10593); if (state.failed) return ;
+                    match(input,79,FollowSets000.FOLLOW_79_in_rule__EssentialOCLInfixOperatorName__Alternatives10754); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getEqualsSignKeyword_8()); 
                     }
@@ -16568,15 +16684,15 @@
                     }
                     break;
                 case 10 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4755:6: ( '<>' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4913:6: ( '<>' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4755:6: ( '<>' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4756:1: '<>'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4913:6: ( '<>' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4914:1: '<>'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getLessThanSignGreaterThanSignKeyword_9()); 
                     }
-                    match(input,71,FollowSets000.FOLLOW_71_in_rule__EssentialOCLInfixOperatorName__Alternatives10613); if (state.failed) return ;
+                    match(input,80,FollowSets000.FOLLOW_80_in_rule__EssentialOCLInfixOperatorName__Alternatives10774); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getLessThanSignGreaterThanSignKeyword_9()); 
                     }
@@ -16587,15 +16703,15 @@
                     }
                     break;
                 case 11 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4763:6: ( 'and' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4921:6: ( 'and' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4763:6: ( 'and' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4764:1: 'and'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4921:6: ( 'and' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4922:1: 'and'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getAndKeyword_10()); 
                     }
-                    match(input,72,FollowSets000.FOLLOW_72_in_rule__EssentialOCLInfixOperatorName__Alternatives10633); if (state.failed) return ;
+                    match(input,81,FollowSets000.FOLLOW_81_in_rule__EssentialOCLInfixOperatorName__Alternatives10794); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getAndKeyword_10()); 
                     }
@@ -16606,15 +16722,15 @@
                     }
                     break;
                 case 12 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4771:6: ( 'or' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4929:6: ( 'or' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4771:6: ( 'or' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4772:1: 'or'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4929:6: ( 'or' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4930:1: 'or'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getOrKeyword_11()); 
                     }
-                    match(input,73,FollowSets000.FOLLOW_73_in_rule__EssentialOCLInfixOperatorName__Alternatives10653); if (state.failed) return ;
+                    match(input,82,FollowSets000.FOLLOW_82_in_rule__EssentialOCLInfixOperatorName__Alternatives10814); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getOrKeyword_11()); 
                     }
@@ -16625,15 +16741,15 @@
                     }
                     break;
                 case 13 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4779:6: ( 'xor' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4937:6: ( 'xor' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4779:6: ( 'xor' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4780:1: 'xor'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4937:6: ( 'xor' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4938:1: 'xor'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getXorKeyword_12()); 
                     }
-                    match(input,74,FollowSets000.FOLLOW_74_in_rule__EssentialOCLInfixOperatorName__Alternatives10673); if (state.failed) return ;
+                    match(input,83,FollowSets000.FOLLOW_83_in_rule__EssentialOCLInfixOperatorName__Alternatives10834); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getXorKeyword_12()); 
                     }
@@ -16644,15 +16760,15 @@
                     }
                     break;
                 case 14 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4787:6: ( 'implies' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4945:6: ( 'implies' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4787:6: ( 'implies' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4788:1: 'implies'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4945:6: ( 'implies' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4946:1: 'implies'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getImpliesKeyword_13()); 
                     }
-                    match(input,75,FollowSets000.FOLLOW_75_in_rule__EssentialOCLInfixOperatorName__Alternatives10693); if (state.failed) return ;
+                    match(input,84,FollowSets000.FOLLOW_84_in_rule__EssentialOCLInfixOperatorName__Alternatives10854); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLInfixOperatorNameAccess().getImpliesKeyword_13()); 
                     }
@@ -16680,54 +16796,54 @@
 
 
     // $ANTLR start "rule__EssentialOCLNavigationOperatorName__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4800:1: rule__EssentialOCLNavigationOperatorName__Alternatives : ( ( '.' ) | ( '->' ) | ( '?.' ) | ( '?->' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4958:1: rule__EssentialOCLNavigationOperatorName__Alternatives : ( ( '.' ) | ( '->' ) | ( '?.' ) | ( '?->' ) );
     public final void rule__EssentialOCLNavigationOperatorName__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4804:1: ( ( '.' ) | ( '->' ) | ( '?.' ) | ( '?->' ) )
-            int alt46=4;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4962:1: ( ( '.' ) | ( '->' ) | ( '?.' ) | ( '?->' ) )
+            int alt61=4;
             switch ( input.LA(1) ) {
-            case 76:
+            case 85:
                 {
-                alt46=1;
+                alt61=1;
                 }
                 break;
-            case 77:
+            case 86:
                 {
-                alt46=2;
+                alt61=2;
                 }
                 break;
-            case 78:
+            case 87:
                 {
-                alt46=3;
+                alt61=3;
                 }
                 break;
-            case 79:
+            case 88:
                 {
-                alt46=4;
+                alt61=4;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 46, 0, input);
+                    new NoViableAltException("", 61, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt46) {
+            switch (alt61) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4805:1: ( '.' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4963:1: ( '.' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4805:1: ( '.' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4806:1: '.'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4963:1: ( '.' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4964:1: '.'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLNavigationOperatorNameAccess().getFullStopKeyword_0()); 
                     }
-                    match(input,76,FollowSets000.FOLLOW_76_in_rule__EssentialOCLNavigationOperatorName__Alternatives10728); if (state.failed) return ;
+                    match(input,85,FollowSets000.FOLLOW_85_in_rule__EssentialOCLNavigationOperatorName__Alternatives10889); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLNavigationOperatorNameAccess().getFullStopKeyword_0()); 
                     }
@@ -16738,15 +16854,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4813:6: ( '->' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4971:6: ( '->' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4813:6: ( '->' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4814:1: '->'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4971:6: ( '->' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4972:1: '->'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLNavigationOperatorNameAccess().getHyphenMinusGreaterThanSignKeyword_1()); 
                     }
-                    match(input,77,FollowSets000.FOLLOW_77_in_rule__EssentialOCLNavigationOperatorName__Alternatives10748); if (state.failed) return ;
+                    match(input,86,FollowSets000.FOLLOW_86_in_rule__EssentialOCLNavigationOperatorName__Alternatives10909); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLNavigationOperatorNameAccess().getHyphenMinusGreaterThanSignKeyword_1()); 
                     }
@@ -16757,15 +16873,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4821:6: ( '?.' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4979:6: ( '?.' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4821:6: ( '?.' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4822:1: '?.'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4979:6: ( '?.' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4980:1: '?.'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLNavigationOperatorNameAccess().getQuestionMarkFullStopKeyword_2()); 
                     }
-                    match(input,78,FollowSets000.FOLLOW_78_in_rule__EssentialOCLNavigationOperatorName__Alternatives10768); if (state.failed) return ;
+                    match(input,87,FollowSets000.FOLLOW_87_in_rule__EssentialOCLNavigationOperatorName__Alternatives10929); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLNavigationOperatorNameAccess().getQuestionMarkFullStopKeyword_2()); 
                     }
@@ -16776,15 +16892,15 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4829:6: ( '?->' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4987:6: ( '?->' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4829:6: ( '?->' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4830:1: '?->'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4987:6: ( '?->' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4988:1: '?->'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLNavigationOperatorNameAccess().getQuestionMarkHyphenMinusGreaterThanSignKeyword_3()); 
                     }
-                    match(input,79,FollowSets000.FOLLOW_79_in_rule__EssentialOCLNavigationOperatorName__Alternatives10788); if (state.failed) return ;
+                    match(input,88,FollowSets000.FOLLOW_88_in_rule__EssentialOCLNavigationOperatorName__Alternatives10949); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLNavigationOperatorNameAccess().getQuestionMarkHyphenMinusGreaterThanSignKeyword_3()); 
                     }
@@ -16812,40 +16928,40 @@
 
 
     // $ANTLR start "rule__BinaryOperatorName__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4842:1: rule__BinaryOperatorName__Alternatives : ( ( ruleInfixOperatorName ) | ( ruleNavigationOperatorName ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5000:1: rule__BinaryOperatorName__Alternatives : ( ( ruleInfixOperatorName ) | ( ruleNavigationOperatorName ) );
     public final void rule__BinaryOperatorName__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4846:1: ( ( ruleInfixOperatorName ) | ( ruleNavigationOperatorName ) )
-            int alt47=2;
-            int LA47_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5004:1: ( ( ruleInfixOperatorName ) | ( ruleNavigationOperatorName ) )
+            int alt62=2;
+            int LA62_0 = input.LA(1);
 
-            if ( (LA47_0==61||(LA47_0>=63 && LA47_0<=75)) ) {
-                alt47=1;
+            if ( (LA62_0==70||(LA62_0>=72 && LA62_0<=84)) ) {
+                alt62=1;
             }
-            else if ( ((LA47_0>=76 && LA47_0<=79)) ) {
-                alt47=2;
+            else if ( ((LA62_0>=85 && LA62_0<=88)) ) {
+                alt62=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 47, 0, input);
+                    new NoViableAltException("", 62, 0, input);
 
                 throw nvae;
             }
-            switch (alt47) {
+            switch (alt62) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4847:1: ( ruleInfixOperatorName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5005:1: ( ruleInfixOperatorName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4847:1: ( ruleInfixOperatorName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4848:1: ruleInfixOperatorName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5005:1: ( ruleInfixOperatorName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5006:1: ruleInfixOperatorName
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getBinaryOperatorNameAccess().getInfixOperatorNameParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleInfixOperatorName_in_rule__BinaryOperatorName__Alternatives10822);
+                    pushFollow(FollowSets000.FOLLOW_ruleInfixOperatorName_in_rule__BinaryOperatorName__Alternatives10983);
                     ruleInfixOperatorName();
 
                     state._fsp--;
@@ -16860,15 +16976,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4853:6: ( ruleNavigationOperatorName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5011:6: ( ruleNavigationOperatorName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4853:6: ( ruleNavigationOperatorName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4854:1: ruleNavigationOperatorName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5011:6: ( ruleNavigationOperatorName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5012:1: ruleNavigationOperatorName
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getBinaryOperatorNameAccess().getNavigationOperatorNameParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNavigationOperatorName_in_rule__BinaryOperatorName__Alternatives10839);
+                    pushFollow(FollowSets000.FOLLOW_ruleNavigationOperatorName_in_rule__BinaryOperatorName__Alternatives11000);
                     ruleNavigationOperatorName();
 
                     state._fsp--;
@@ -16900,14 +17016,14 @@
 
 
     // $ANTLR start "rule__EssentialOCLUnreservedName__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4864:1: rule__EssentialOCLUnreservedName__Alternatives : ( ( ruleUnrestrictedName ) | ( ruleCollectionTypeIdentifier ) | ( rulePrimitiveTypeIdentifier ) | ( 'Tuple' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5022:1: rule__EssentialOCLUnreservedName__Alternatives : ( ( ruleUnrestrictedName ) | ( ruleCollectionTypeIdentifier ) | ( rulePrimitiveTypeIdentifier ) | ( 'Tuple' ) );
     public final void rule__EssentialOCLUnreservedName__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4868:1: ( ( ruleUnrestrictedName ) | ( ruleCollectionTypeIdentifier ) | ( rulePrimitiveTypeIdentifier ) | ( 'Tuple' ) )
-            int alt48=4;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5026:1: ( ( ruleUnrestrictedName ) | ( ruleCollectionTypeIdentifier ) | ( rulePrimitiveTypeIdentifier ) | ( 'Tuple' ) )
+            int alt63=4;
             switch ( input.LA(1) ) {
             case RULE_SIMPLE_ID:
             case RULE_ESCAPED_ID:
@@ -16947,61 +17063,61 @@
             case 50:
             case 51:
             case 52:
-            case 55:
-            case 56:
-            case 57:
-            case 58:
-            case 59:
-            case 60:
+            case 64:
+            case 65:
+            case 66:
+            case 67:
+            case 68:
+            case 69:
                 {
-                alt48=1;
+                alt63=1;
                 }
                 break;
-            case 89:
+            case 98:
+            case 99:
+            case 100:
+            case 101:
+            case 102:
+                {
+                alt63=2;
+                }
+                break;
             case 90:
             case 91:
             case 92:
             case 93:
+            case 94:
+            case 95:
+            case 96:
+            case 97:
                 {
-                alt48=2;
+                alt63=3;
                 }
                 break;
-            case 81:
-            case 82:
-            case 83:
-            case 84:
-            case 85:
-            case 86:
-            case 87:
-            case 88:
+            case 89:
                 {
-                alt48=3;
-                }
-                break;
-            case 80:
-                {
-                alt48=4;
+                alt63=4;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 48, 0, input);
+                    new NoViableAltException("", 63, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt48) {
+            switch (alt63) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4869:1: ( ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5027:1: ( ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4869:1: ( ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4870:1: ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5027:1: ( ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5028:1: ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLUnreservedNameAccess().getUnrestrictedNameParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__EssentialOCLUnreservedName__Alternatives10871);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__EssentialOCLUnreservedName__Alternatives11032);
                     ruleUnrestrictedName();
 
                     state._fsp--;
@@ -17016,15 +17132,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4875:6: ( ruleCollectionTypeIdentifier )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5033:6: ( ruleCollectionTypeIdentifier )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4875:6: ( ruleCollectionTypeIdentifier )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4876:1: ruleCollectionTypeIdentifier
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5033:6: ( ruleCollectionTypeIdentifier )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5034:1: ruleCollectionTypeIdentifier
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLUnreservedNameAccess().getCollectionTypeIdentifierParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeIdentifier_in_rule__EssentialOCLUnreservedName__Alternatives10888);
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeIdentifier_in_rule__EssentialOCLUnreservedName__Alternatives11049);
                     ruleCollectionTypeIdentifier();
 
                     state._fsp--;
@@ -17039,15 +17155,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4881:6: ( rulePrimitiveTypeIdentifier )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5039:6: ( rulePrimitiveTypeIdentifier )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4881:6: ( rulePrimitiveTypeIdentifier )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4882:1: rulePrimitiveTypeIdentifier
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5039:6: ( rulePrimitiveTypeIdentifier )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5040:1: rulePrimitiveTypeIdentifier
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLUnreservedNameAccess().getPrimitiveTypeIdentifierParserRuleCall_2()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeIdentifier_in_rule__EssentialOCLUnreservedName__Alternatives10905);
+                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeIdentifier_in_rule__EssentialOCLUnreservedName__Alternatives11066);
                     rulePrimitiveTypeIdentifier();
 
                     state._fsp--;
@@ -17062,15 +17178,15 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4887:6: ( 'Tuple' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5045:6: ( 'Tuple' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4887:6: ( 'Tuple' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4888:1: 'Tuple'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5045:6: ( 'Tuple' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5046:1: 'Tuple'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getEssentialOCLUnreservedNameAccess().getTupleKeyword_3()); 
                     }
-                    match(input,80,FollowSets000.FOLLOW_80_in_rule__EssentialOCLUnreservedName__Alternatives10923); if (state.failed) return ;
+                    match(input,89,FollowSets000.FOLLOW_89_in_rule__EssentialOCLUnreservedName__Alternatives11084); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getEssentialOCLUnreservedNameAccess().getTupleKeyword_3()); 
                     }
@@ -17098,43 +17214,43 @@
 
 
     // $ANTLR start "rule__URIFirstPathElementCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4900:1: rule__URIFirstPathElementCS__Alternatives : ( ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 ) ) | ( ( rule__URIFirstPathElementCS__Group_1__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5058:1: rule__URIFirstPathElementCS__Alternatives : ( ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 ) ) | ( ( rule__URIFirstPathElementCS__Group_1__0 ) ) );
     public final void rule__URIFirstPathElementCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4904:1: ( ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 ) ) | ( ( rule__URIFirstPathElementCS__Group_1__0 ) ) )
-            int alt49=2;
-            int LA49_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5062:1: ( ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 ) ) | ( ( rule__URIFirstPathElementCS__Group_1__0 ) ) )
+            int alt64=2;
+            int LA64_0 = input.LA(1);
 
-            if ( ((LA49_0>=RULE_SIMPLE_ID && LA49_0<=RULE_ESCAPED_ID)||(LA49_0>=17 && LA49_0<=52)||(LA49_0>=55 && LA49_0<=60)) ) {
-                alt49=1;
+            if ( ((LA64_0>=RULE_SIMPLE_ID && LA64_0<=RULE_ESCAPED_ID)||(LA64_0>=17 && LA64_0<=52)||(LA64_0>=64 && LA64_0<=69)) ) {
+                alt64=1;
             }
-            else if ( (LA49_0==RULE_SINGLE_QUOTED_STRING) ) {
-                alt49=2;
+            else if ( (LA64_0==RULE_SINGLE_QUOTED_STRING) ) {
+                alt64=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 49, 0, input);
+                    new NoViableAltException("", 64, 0, input);
 
                 throw nvae;
             }
-            switch (alt49) {
+            switch (alt64) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4905:1: ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5063:1: ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4905:1: ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4906:1: ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5063:1: ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5064:1: ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getURIFirstPathElementCSAccess().getReferredElementAssignment_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4907:1: ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4907:2: rule__URIFirstPathElementCS__ReferredElementAssignment_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5065:1: ( rule__URIFirstPathElementCS__ReferredElementAssignment_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5065:2: rule__URIFirstPathElementCS__ReferredElementAssignment_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__URIFirstPathElementCS__ReferredElementAssignment_0_in_rule__URIFirstPathElementCS__Alternatives10957);
+                    pushFollow(FollowSets000.FOLLOW_rule__URIFirstPathElementCS__ReferredElementAssignment_0_in_rule__URIFirstPathElementCS__Alternatives11118);
                     rule__URIFirstPathElementCS__ReferredElementAssignment_0();
 
                     state._fsp--;
@@ -17152,18 +17268,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4911:6: ( ( rule__URIFirstPathElementCS__Group_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5069:6: ( ( rule__URIFirstPathElementCS__Group_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4911:6: ( ( rule__URIFirstPathElementCS__Group_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4912:1: ( rule__URIFirstPathElementCS__Group_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5069:6: ( ( rule__URIFirstPathElementCS__Group_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5070:1: ( rule__URIFirstPathElementCS__Group_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getURIFirstPathElementCSAccess().getGroup_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4913:1: ( rule__URIFirstPathElementCS__Group_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4913:2: rule__URIFirstPathElementCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5071:1: ( rule__URIFirstPathElementCS__Group_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5071:2: rule__URIFirstPathElementCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__URIFirstPathElementCS__Group_1__0_in_rule__URIFirstPathElementCS__Alternatives10975);
+                    pushFollow(FollowSets000.FOLLOW_rule__URIFirstPathElementCS__Group_1__0_in_rule__URIFirstPathElementCS__Alternatives11136);
                     rule__URIFirstPathElementCS__Group_1__0();
 
                     state._fsp--;
@@ -17198,74 +17314,74 @@
 
 
     // $ANTLR start "rule__PrimitiveTypeIdentifier__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4922:1: rule__PrimitiveTypeIdentifier__Alternatives : ( ( 'Boolean' ) | ( 'Integer' ) | ( 'Real' ) | ( 'String' ) | ( 'UnlimitedNatural' ) | ( 'OclAny' ) | ( 'OclInvalid' ) | ( 'OclVoid' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5080:1: rule__PrimitiveTypeIdentifier__Alternatives : ( ( 'Boolean' ) | ( 'Integer' ) | ( 'Real' ) | ( 'String' ) | ( 'UnlimitedNatural' ) | ( 'OclAny' ) | ( 'OclInvalid' ) | ( 'OclVoid' ) );
     public final void rule__PrimitiveTypeIdentifier__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4926:1: ( ( 'Boolean' ) | ( 'Integer' ) | ( 'Real' ) | ( 'String' ) | ( 'UnlimitedNatural' ) | ( 'OclAny' ) | ( 'OclInvalid' ) | ( 'OclVoid' ) )
-            int alt50=8;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5084:1: ( ( 'Boolean' ) | ( 'Integer' ) | ( 'Real' ) | ( 'String' ) | ( 'UnlimitedNatural' ) | ( 'OclAny' ) | ( 'OclInvalid' ) | ( 'OclVoid' ) )
+            int alt65=8;
             switch ( input.LA(1) ) {
-            case 81:
+            case 90:
                 {
-                alt50=1;
+                alt65=1;
                 }
                 break;
-            case 82:
+            case 91:
                 {
-                alt50=2;
+                alt65=2;
                 }
                 break;
-            case 83:
+            case 92:
                 {
-                alt50=3;
+                alt65=3;
                 }
                 break;
-            case 84:
+            case 93:
                 {
-                alt50=4;
+                alt65=4;
                 }
                 break;
-            case 85:
+            case 94:
                 {
-                alt50=5;
+                alt65=5;
                 }
                 break;
-            case 86:
+            case 95:
                 {
-                alt50=6;
+                alt65=6;
                 }
                 break;
-            case 87:
+            case 96:
                 {
-                alt50=7;
+                alt65=7;
                 }
                 break;
-            case 88:
+            case 97:
                 {
-                alt50=8;
+                alt65=8;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 50, 0, input);
+                    new NoViableAltException("", 65, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt50) {
+            switch (alt65) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4927:1: ( 'Boolean' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5085:1: ( 'Boolean' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4927:1: ( 'Boolean' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4928:1: 'Boolean'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5085:1: ( 'Boolean' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5086:1: 'Boolean'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveTypeIdentifierAccess().getBooleanKeyword_0()); 
                     }
-                    match(input,81,FollowSets000.FOLLOW_81_in_rule__PrimitiveTypeIdentifier__Alternatives11009); if (state.failed) return ;
+                    match(input,90,FollowSets000.FOLLOW_90_in_rule__PrimitiveTypeIdentifier__Alternatives11170); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getPrimitiveTypeIdentifierAccess().getBooleanKeyword_0()); 
                     }
@@ -17276,15 +17392,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4935:6: ( 'Integer' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5093:6: ( 'Integer' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4935:6: ( 'Integer' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4936:1: 'Integer'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5093:6: ( 'Integer' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5094:1: 'Integer'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveTypeIdentifierAccess().getIntegerKeyword_1()); 
                     }
-                    match(input,82,FollowSets000.FOLLOW_82_in_rule__PrimitiveTypeIdentifier__Alternatives11029); if (state.failed) return ;
+                    match(input,91,FollowSets000.FOLLOW_91_in_rule__PrimitiveTypeIdentifier__Alternatives11190); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getPrimitiveTypeIdentifierAccess().getIntegerKeyword_1()); 
                     }
@@ -17295,15 +17411,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4943:6: ( 'Real' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5101:6: ( 'Real' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4943:6: ( 'Real' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4944:1: 'Real'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5101:6: ( 'Real' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5102:1: 'Real'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveTypeIdentifierAccess().getRealKeyword_2()); 
                     }
-                    match(input,83,FollowSets000.FOLLOW_83_in_rule__PrimitiveTypeIdentifier__Alternatives11049); if (state.failed) return ;
+                    match(input,92,FollowSets000.FOLLOW_92_in_rule__PrimitiveTypeIdentifier__Alternatives11210); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getPrimitiveTypeIdentifierAccess().getRealKeyword_2()); 
                     }
@@ -17314,15 +17430,15 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4951:6: ( 'String' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5109:6: ( 'String' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4951:6: ( 'String' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4952:1: 'String'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5109:6: ( 'String' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5110:1: 'String'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveTypeIdentifierAccess().getStringKeyword_3()); 
                     }
-                    match(input,84,FollowSets000.FOLLOW_84_in_rule__PrimitiveTypeIdentifier__Alternatives11069); if (state.failed) return ;
+                    match(input,93,FollowSets000.FOLLOW_93_in_rule__PrimitiveTypeIdentifier__Alternatives11230); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getPrimitiveTypeIdentifierAccess().getStringKeyword_3()); 
                     }
@@ -17333,15 +17449,15 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4959:6: ( 'UnlimitedNatural' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5117:6: ( 'UnlimitedNatural' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4959:6: ( 'UnlimitedNatural' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4960:1: 'UnlimitedNatural'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5117:6: ( 'UnlimitedNatural' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5118:1: 'UnlimitedNatural'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveTypeIdentifierAccess().getUnlimitedNaturalKeyword_4()); 
                     }
-                    match(input,85,FollowSets000.FOLLOW_85_in_rule__PrimitiveTypeIdentifier__Alternatives11089); if (state.failed) return ;
+                    match(input,94,FollowSets000.FOLLOW_94_in_rule__PrimitiveTypeIdentifier__Alternatives11250); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getPrimitiveTypeIdentifierAccess().getUnlimitedNaturalKeyword_4()); 
                     }
@@ -17352,15 +17468,15 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4967:6: ( 'OclAny' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5125:6: ( 'OclAny' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4967:6: ( 'OclAny' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4968:1: 'OclAny'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5125:6: ( 'OclAny' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5126:1: 'OclAny'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveTypeIdentifierAccess().getOclAnyKeyword_5()); 
                     }
-                    match(input,86,FollowSets000.FOLLOW_86_in_rule__PrimitiveTypeIdentifier__Alternatives11109); if (state.failed) return ;
+                    match(input,95,FollowSets000.FOLLOW_95_in_rule__PrimitiveTypeIdentifier__Alternatives11270); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getPrimitiveTypeIdentifierAccess().getOclAnyKeyword_5()); 
                     }
@@ -17371,15 +17487,15 @@
                     }
                     break;
                 case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4975:6: ( 'OclInvalid' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5133:6: ( 'OclInvalid' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4975:6: ( 'OclInvalid' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4976:1: 'OclInvalid'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5133:6: ( 'OclInvalid' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5134:1: 'OclInvalid'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveTypeIdentifierAccess().getOclInvalidKeyword_6()); 
                     }
-                    match(input,87,FollowSets000.FOLLOW_87_in_rule__PrimitiveTypeIdentifier__Alternatives11129); if (state.failed) return ;
+                    match(input,96,FollowSets000.FOLLOW_96_in_rule__PrimitiveTypeIdentifier__Alternatives11290); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getPrimitiveTypeIdentifierAccess().getOclInvalidKeyword_6()); 
                     }
@@ -17390,15 +17506,15 @@
                     }
                     break;
                 case 8 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4983:6: ( 'OclVoid' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5141:6: ( 'OclVoid' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4983:6: ( 'OclVoid' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4984:1: 'OclVoid'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5141:6: ( 'OclVoid' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5142:1: 'OclVoid'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveTypeIdentifierAccess().getOclVoidKeyword_7()); 
                     }
-                    match(input,88,FollowSets000.FOLLOW_88_in_rule__PrimitiveTypeIdentifier__Alternatives11149); if (state.failed) return ;
+                    match(input,97,FollowSets000.FOLLOW_97_in_rule__PrimitiveTypeIdentifier__Alternatives11310); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getPrimitiveTypeIdentifierAccess().getOclVoidKeyword_7()); 
                     }
@@ -17426,59 +17542,59 @@
 
 
     // $ANTLR start "rule__CollectionTypeIdentifier__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:4996:1: rule__CollectionTypeIdentifier__Alternatives : ( ( 'Set' ) | ( 'Bag' ) | ( 'Sequence' ) | ( 'Collection' ) | ( 'OrderedSet' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5154:1: rule__CollectionTypeIdentifier__Alternatives : ( ( 'Set' ) | ( 'Bag' ) | ( 'Sequence' ) | ( 'Collection' ) | ( 'OrderedSet' ) );
     public final void rule__CollectionTypeIdentifier__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5000:1: ( ( 'Set' ) | ( 'Bag' ) | ( 'Sequence' ) | ( 'Collection' ) | ( 'OrderedSet' ) )
-            int alt51=5;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5158:1: ( ( 'Set' ) | ( 'Bag' ) | ( 'Sequence' ) | ( 'Collection' ) | ( 'OrderedSet' ) )
+            int alt66=5;
             switch ( input.LA(1) ) {
-            case 89:
+            case 98:
                 {
-                alt51=1;
+                alt66=1;
                 }
                 break;
-            case 90:
+            case 99:
                 {
-                alt51=2;
+                alt66=2;
                 }
                 break;
-            case 91:
+            case 100:
                 {
-                alt51=3;
+                alt66=3;
                 }
                 break;
-            case 92:
+            case 101:
                 {
-                alt51=4;
+                alt66=4;
                 }
                 break;
-            case 93:
+            case 102:
                 {
-                alt51=5;
+                alt66=5;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 51, 0, input);
+                    new NoViableAltException("", 66, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt51) {
+            switch (alt66) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5001:1: ( 'Set' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5159:1: ( 'Set' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5001:1: ( 'Set' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5002:1: 'Set'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5159:1: ( 'Set' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5160:1: 'Set'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCollectionTypeIdentifierAccess().getSetKeyword_0()); 
                     }
-                    match(input,89,FollowSets000.FOLLOW_89_in_rule__CollectionTypeIdentifier__Alternatives11184); if (state.failed) return ;
+                    match(input,98,FollowSets000.FOLLOW_98_in_rule__CollectionTypeIdentifier__Alternatives11345); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getCollectionTypeIdentifierAccess().getSetKeyword_0()); 
                     }
@@ -17489,15 +17605,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5009:6: ( 'Bag' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5167:6: ( 'Bag' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5009:6: ( 'Bag' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5010:1: 'Bag'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5167:6: ( 'Bag' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5168:1: 'Bag'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCollectionTypeIdentifierAccess().getBagKeyword_1()); 
                     }
-                    match(input,90,FollowSets000.FOLLOW_90_in_rule__CollectionTypeIdentifier__Alternatives11204); if (state.failed) return ;
+                    match(input,99,FollowSets000.FOLLOW_99_in_rule__CollectionTypeIdentifier__Alternatives11365); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getCollectionTypeIdentifierAccess().getBagKeyword_1()); 
                     }
@@ -17508,15 +17624,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5017:6: ( 'Sequence' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5175:6: ( 'Sequence' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5017:6: ( 'Sequence' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5018:1: 'Sequence'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5175:6: ( 'Sequence' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5176:1: 'Sequence'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCollectionTypeIdentifierAccess().getSequenceKeyword_2()); 
                     }
-                    match(input,91,FollowSets000.FOLLOW_91_in_rule__CollectionTypeIdentifier__Alternatives11224); if (state.failed) return ;
+                    match(input,100,FollowSets000.FOLLOW_100_in_rule__CollectionTypeIdentifier__Alternatives11385); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getCollectionTypeIdentifierAccess().getSequenceKeyword_2()); 
                     }
@@ -17527,15 +17643,15 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5025:6: ( 'Collection' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5183:6: ( 'Collection' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5025:6: ( 'Collection' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5026:1: 'Collection'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5183:6: ( 'Collection' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5184:1: 'Collection'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCollectionTypeIdentifierAccess().getCollectionKeyword_3()); 
                     }
-                    match(input,92,FollowSets000.FOLLOW_92_in_rule__CollectionTypeIdentifier__Alternatives11244); if (state.failed) return ;
+                    match(input,101,FollowSets000.FOLLOW_101_in_rule__CollectionTypeIdentifier__Alternatives11405); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getCollectionTypeIdentifierAccess().getCollectionKeyword_3()); 
                     }
@@ -17546,15 +17662,15 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5033:6: ( 'OrderedSet' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5191:6: ( 'OrderedSet' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5033:6: ( 'OrderedSet' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5034:1: 'OrderedSet'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5191:6: ( 'OrderedSet' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5192:1: 'OrderedSet'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCollectionTypeIdentifierAccess().getOrderedSetKeyword_4()); 
                     }
-                    match(input,93,FollowSets000.FOLLOW_93_in_rule__CollectionTypeIdentifier__Alternatives11264); if (state.failed) return ;
+                    match(input,102,FollowSets000.FOLLOW_102_in_rule__CollectionTypeIdentifier__Alternatives11425); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getCollectionTypeIdentifierAccess().getOrderedSetKeyword_4()); 
                     }
@@ -17582,29 +17698,29 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5046:1: rule__CollectionLiteralPartCS__Alternatives : ( ( ( rule__CollectionLiteralPartCS__Group_0__0 ) ) | ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5204:1: rule__CollectionLiteralPartCS__Alternatives : ( ( ( rule__CollectionLiteralPartCS__Group_0__0 ) ) | ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) ) );
     public final void rule__CollectionLiteralPartCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5050:1: ( ( ( rule__CollectionLiteralPartCS__Group_0__0 ) ) | ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) ) )
-            int alt52=2;
-            alt52 = dfa52.predict(input);
-            switch (alt52) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5208:1: ( ( ( rule__CollectionLiteralPartCS__Group_0__0 ) ) | ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) ) )
+            int alt67=2;
+            alt67 = dfa67.predict(input);
+            switch (alt67) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5051:1: ( ( rule__CollectionLiteralPartCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5209:1: ( ( rule__CollectionLiteralPartCS__Group_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5051:1: ( ( rule__CollectionLiteralPartCS__Group_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5052:1: ( rule__CollectionLiteralPartCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5209:1: ( ( rule__CollectionLiteralPartCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5210:1: ( rule__CollectionLiteralPartCS__Group_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCollectionLiteralPartCSAccess().getGroup_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5053:1: ( rule__CollectionLiteralPartCS__Group_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5053:2: rule__CollectionLiteralPartCS__Group_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5211:1: ( rule__CollectionLiteralPartCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5211:2: rule__CollectionLiteralPartCS__Group_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__CollectionLiteralPartCS__Group_0__0_in_rule__CollectionLiteralPartCS__Alternatives11298);
+                    pushFollow(FollowSets000.FOLLOW_rule__CollectionLiteralPartCS__Group_0__0_in_rule__CollectionLiteralPartCS__Alternatives11459);
                     rule__CollectionLiteralPartCS__Group_0__0();
 
                     state._fsp--;
@@ -17622,18 +17738,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5057:6: ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5215:6: ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5057:6: ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5058:1: ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5215:6: ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5216:1: ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCollectionLiteralPartCSAccess().getOwnedExpressionAssignment_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5059:1: ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5059:2: rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5217:1: ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5217:2: rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1_in_rule__CollectionLiteralPartCS__Alternatives11316);
+                    pushFollow(FollowSets000.FOLLOW_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1_in_rule__CollectionLiteralPartCS__Alternatives11477);
                     rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1();
 
                     state._fsp--;
@@ -17668,26 +17784,26 @@
 
 
     // $ANTLR start "rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5068:1: rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 : ( ( ruleExpCS ) | ( rulePatternExpCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5226:1: rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 : ( ( ruleExpCS ) | ( rulePatternExpCS ) );
     public final void rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5072:1: ( ( ruleExpCS ) | ( rulePatternExpCS ) )
-            int alt53=2;
-            alt53 = dfa53.predict(input);
-            switch (alt53) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5230:1: ( ( ruleExpCS ) | ( rulePatternExpCS ) )
+            int alt68=2;
+            alt68 = dfa68.predict(input);
+            switch (alt68) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5073:1: ( ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5231:1: ( ruleExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5073:1: ( ruleExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5074:1: ruleExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5231:1: ( ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5232:1: ruleExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getConstructorPartCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_0_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_011349);
+                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_011510);
                     ruleExpCS();
 
                     state._fsp--;
@@ -17702,15 +17818,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5079:6: ( rulePatternExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5237:6: ( rulePatternExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5079:6: ( rulePatternExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5080:1: rulePatternExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5237:6: ( rulePatternExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5238:1: rulePatternExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getConstructorPartCSAccess().getOwnedInitExpressionPatternExpCSParserRuleCall_2_0_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_011366);
+                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_011527);
                     rulePatternExpCS();
 
                     state._fsp--;
@@ -17742,65 +17858,65 @@
 
 
     // $ANTLR start "rule__PrimitiveLiteralExpCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5090:1: rule__PrimitiveLiteralExpCS__Alternatives : ( ( ruleNumberLiteralExpCS ) | ( ruleStringLiteralExpCS ) | ( ruleBooleanLiteralExpCS ) | ( ruleUnlimitedNaturalLiteralExpCS ) | ( ruleInvalidLiteralExpCS ) | ( ruleNullLiteralExpCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5248:1: rule__PrimitiveLiteralExpCS__Alternatives : ( ( ruleNumberLiteralExpCS ) | ( ruleStringLiteralExpCS ) | ( ruleBooleanLiteralExpCS ) | ( ruleUnlimitedNaturalLiteralExpCS ) | ( ruleInvalidLiteralExpCS ) | ( ruleNullLiteralExpCS ) );
     public final void rule__PrimitiveLiteralExpCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5094:1: ( ( ruleNumberLiteralExpCS ) | ( ruleStringLiteralExpCS ) | ( ruleBooleanLiteralExpCS ) | ( ruleUnlimitedNaturalLiteralExpCS ) | ( ruleInvalidLiteralExpCS ) | ( ruleNullLiteralExpCS ) )
-            int alt54=6;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5252:1: ( ( ruleNumberLiteralExpCS ) | ( ruleStringLiteralExpCS ) | ( ruleBooleanLiteralExpCS ) | ( ruleUnlimitedNaturalLiteralExpCS ) | ( ruleInvalidLiteralExpCS ) | ( ruleNullLiteralExpCS ) )
+            int alt69=6;
             switch ( input.LA(1) ) {
             case RULE_INT:
                 {
-                alt54=1;
+                alt69=1;
                 }
                 break;
             case RULE_SINGLE_QUOTED_STRING:
                 {
-                alt54=2;
+                alt69=2;
                 }
                 break;
             case 131:
             case 132:
                 {
-                alt54=3;
+                alt69=3;
                 }
                 break;
-            case 63:
+            case 72:
                 {
-                alt54=4;
+                alt69=4;
                 }
                 break;
-            case 106:
+            case 115:
                 {
-                alt54=5;
+                alt69=5;
                 }
                 break;
-            case 107:
+            case 116:
                 {
-                alt54=6;
+                alt69=6;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 54, 0, input);
+                    new NoViableAltException("", 69, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt54) {
+            switch (alt69) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5095:1: ( ruleNumberLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5253:1: ( ruleNumberLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5095:1: ( ruleNumberLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5096:1: ruleNumberLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5253:1: ( ruleNumberLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5254:1: ruleNumberLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveLiteralExpCSAccess().getNumberLiteralExpCSParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNumberLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11398);
+                    pushFollow(FollowSets000.FOLLOW_ruleNumberLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11559);
                     ruleNumberLiteralExpCS();
 
                     state._fsp--;
@@ -17815,15 +17931,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5101:6: ( ruleStringLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5259:6: ( ruleStringLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5101:6: ( ruleStringLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5102:1: ruleStringLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5259:6: ( ruleStringLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5260:1: ruleStringLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveLiteralExpCSAccess().getStringLiteralExpCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleStringLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11415);
+                    pushFollow(FollowSets000.FOLLOW_ruleStringLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11576);
                     ruleStringLiteralExpCS();
 
                     state._fsp--;
@@ -17838,15 +17954,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5107:6: ( ruleBooleanLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5265:6: ( ruleBooleanLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5107:6: ( ruleBooleanLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5108:1: ruleBooleanLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5265:6: ( ruleBooleanLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5266:1: ruleBooleanLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_2()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleBooleanLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11432);
+                    pushFollow(FollowSets000.FOLLOW_ruleBooleanLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11593);
                     ruleBooleanLiteralExpCS();
 
                     state._fsp--;
@@ -17861,15 +17977,15 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5113:6: ( ruleUnlimitedNaturalLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5271:6: ( ruleUnlimitedNaturalLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5113:6: ( ruleUnlimitedNaturalLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5114:1: ruleUnlimitedNaturalLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5271:6: ( ruleUnlimitedNaturalLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5272:1: ruleUnlimitedNaturalLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveLiteralExpCSAccess().getUnlimitedNaturalLiteralExpCSParserRuleCall_3()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11449);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11610);
                     ruleUnlimitedNaturalLiteralExpCS();
 
                     state._fsp--;
@@ -17884,15 +18000,15 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5119:6: ( ruleInvalidLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5277:6: ( ruleInvalidLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5119:6: ( ruleInvalidLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5120:1: ruleInvalidLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5277:6: ( ruleInvalidLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5278:1: ruleInvalidLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveLiteralExpCSAccess().getInvalidLiteralExpCSParserRuleCall_4()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleInvalidLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11466);
+                    pushFollow(FollowSets000.FOLLOW_ruleInvalidLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11627);
                     ruleInvalidLiteralExpCS();
 
                     state._fsp--;
@@ -17907,15 +18023,15 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5125:6: ( ruleNullLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5283:6: ( ruleNullLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5125:6: ( ruleNullLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5126:1: ruleNullLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5283:6: ( ruleNullLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5284:1: ruleNullLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimitiveLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_5()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNullLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11483);
+                    pushFollow(FollowSets000.FOLLOW_ruleNullLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11644);
                     ruleNullLiteralExpCS();
 
                     state._fsp--;
@@ -17947,43 +18063,43 @@
 
 
     // $ANTLR start "rule__BooleanLiteralExpCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5136:1: rule__BooleanLiteralExpCS__Alternatives : ( ( ( rule__BooleanLiteralExpCS__SymbolAssignment_0 ) ) | ( ( rule__BooleanLiteralExpCS__SymbolAssignment_1 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5294:1: rule__BooleanLiteralExpCS__Alternatives : ( ( ( rule__BooleanLiteralExpCS__SymbolAssignment_0 ) ) | ( ( rule__BooleanLiteralExpCS__SymbolAssignment_1 ) ) );
     public final void rule__BooleanLiteralExpCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5140:1: ( ( ( rule__BooleanLiteralExpCS__SymbolAssignment_0 ) ) | ( ( rule__BooleanLiteralExpCS__SymbolAssignment_1 ) ) )
-            int alt55=2;
-            int LA55_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5298:1: ( ( ( rule__BooleanLiteralExpCS__SymbolAssignment_0 ) ) | ( ( rule__BooleanLiteralExpCS__SymbolAssignment_1 ) ) )
+            int alt70=2;
+            int LA70_0 = input.LA(1);
 
-            if ( (LA55_0==131) ) {
-                alt55=1;
+            if ( (LA70_0==131) ) {
+                alt70=1;
             }
-            else if ( (LA55_0==132) ) {
-                alt55=2;
+            else if ( (LA70_0==132) ) {
+                alt70=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 55, 0, input);
+                    new NoViableAltException("", 70, 0, input);
 
                 throw nvae;
             }
-            switch (alt55) {
+            switch (alt70) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5141:1: ( ( rule__BooleanLiteralExpCS__SymbolAssignment_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5299:1: ( ( rule__BooleanLiteralExpCS__SymbolAssignment_0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5141:1: ( ( rule__BooleanLiteralExpCS__SymbolAssignment_0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5142:1: ( rule__BooleanLiteralExpCS__SymbolAssignment_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5299:1: ( ( rule__BooleanLiteralExpCS__SymbolAssignment_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5300:1: ( rule__BooleanLiteralExpCS__SymbolAssignment_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getBooleanLiteralExpCSAccess().getSymbolAssignment_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5143:1: ( rule__BooleanLiteralExpCS__SymbolAssignment_0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5143:2: rule__BooleanLiteralExpCS__SymbolAssignment_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5301:1: ( rule__BooleanLiteralExpCS__SymbolAssignment_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5301:2: rule__BooleanLiteralExpCS__SymbolAssignment_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__BooleanLiteralExpCS__SymbolAssignment_0_in_rule__BooleanLiteralExpCS__Alternatives11515);
+                    pushFollow(FollowSets000.FOLLOW_rule__BooleanLiteralExpCS__SymbolAssignment_0_in_rule__BooleanLiteralExpCS__Alternatives11676);
                     rule__BooleanLiteralExpCS__SymbolAssignment_0();
 
                     state._fsp--;
@@ -18001,18 +18117,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5147:6: ( ( rule__BooleanLiteralExpCS__SymbolAssignment_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5305:6: ( ( rule__BooleanLiteralExpCS__SymbolAssignment_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5147:6: ( ( rule__BooleanLiteralExpCS__SymbolAssignment_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5148:1: ( rule__BooleanLiteralExpCS__SymbolAssignment_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5305:6: ( ( rule__BooleanLiteralExpCS__SymbolAssignment_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5306:1: ( rule__BooleanLiteralExpCS__SymbolAssignment_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getBooleanLiteralExpCSAccess().getSymbolAssignment_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5149:1: ( rule__BooleanLiteralExpCS__SymbolAssignment_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5149:2: rule__BooleanLiteralExpCS__SymbolAssignment_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5307:1: ( rule__BooleanLiteralExpCS__SymbolAssignment_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5307:2: rule__BooleanLiteralExpCS__SymbolAssignment_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__BooleanLiteralExpCS__SymbolAssignment_1_in_rule__BooleanLiteralExpCS__Alternatives11533);
+                    pushFollow(FollowSets000.FOLLOW_rule__BooleanLiteralExpCS__SymbolAssignment_1_in_rule__BooleanLiteralExpCS__Alternatives11694);
                     rule__BooleanLiteralExpCS__SymbolAssignment_1();
 
                     state._fsp--;
@@ -18047,60 +18163,60 @@
 
 
     // $ANTLR start "rule__TypeLiteralCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5158:1: rule__TypeLiteralCS__Alternatives : ( ( rulePrimitiveTypeCS ) | ( ruleCollectionTypeCS ) | ( ruleTupleTypeCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5316:1: rule__TypeLiteralCS__Alternatives : ( ( rulePrimitiveTypeCS ) | ( ruleCollectionTypeCS ) | ( ruleTupleTypeCS ) );
     public final void rule__TypeLiteralCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5162:1: ( ( rulePrimitiveTypeCS ) | ( ruleCollectionTypeCS ) | ( ruleTupleTypeCS ) )
-            int alt56=3;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5320:1: ( ( rulePrimitiveTypeCS ) | ( ruleCollectionTypeCS ) | ( ruleTupleTypeCS ) )
+            int alt71=3;
             switch ( input.LA(1) ) {
-            case 81:
-            case 82:
-            case 83:
-            case 84:
-            case 85:
-            case 86:
-            case 87:
-            case 88:
-                {
-                alt56=1;
-                }
-                break;
-            case 89:
             case 90:
             case 91:
             case 92:
             case 93:
+            case 94:
+            case 95:
+            case 96:
+            case 97:
                 {
-                alt56=2;
+                alt71=1;
                 }
                 break;
-            case 80:
+            case 98:
+            case 99:
+            case 100:
+            case 101:
+            case 102:
                 {
-                alt56=3;
+                alt71=2;
+                }
+                break;
+            case 89:
+                {
+                alt71=3;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 56, 0, input);
+                    new NoViableAltException("", 71, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt56) {
+            switch (alt71) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5163:1: ( rulePrimitiveTypeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5321:1: ( rulePrimitiveTypeCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5163:1: ( rulePrimitiveTypeCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5164:1: rulePrimitiveTypeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5321:1: ( rulePrimitiveTypeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5322:1: rulePrimitiveTypeCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeLiteralCSAccess().getPrimitiveTypeCSParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeCS_in_rule__TypeLiteralCS__Alternatives11566);
+                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeCS_in_rule__TypeLiteralCS__Alternatives11727);
                     rulePrimitiveTypeCS();
 
                     state._fsp--;
@@ -18115,15 +18231,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5169:6: ( ruleCollectionTypeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5327:6: ( ruleCollectionTypeCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5169:6: ( ruleCollectionTypeCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5170:1: ruleCollectionTypeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5327:6: ( ruleCollectionTypeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5328:1: ruleCollectionTypeCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeLiteralCSAccess().getCollectionTypeCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_rule__TypeLiteralCS__Alternatives11583);
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_rule__TypeLiteralCS__Alternatives11744);
                     ruleCollectionTypeCS();
 
                     state._fsp--;
@@ -18138,15 +18254,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5175:6: ( ruleTupleTypeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5333:6: ( ruleTupleTypeCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5175:6: ( ruleTupleTypeCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5176:1: ruleTupleTypeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5333:6: ( ruleTupleTypeCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5334:1: ruleTupleTypeCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeLiteralCSAccess().getTupleTypeCSParserRuleCall_2()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTupleTypeCS_in_rule__TypeLiteralCS__Alternatives11600);
+                    pushFollow(FollowSets000.FOLLOW_ruleTupleTypeCS_in_rule__TypeLiteralCS__Alternatives11761);
                     ruleTupleTypeCS();
 
                     state._fsp--;
@@ -18178,26 +18294,26 @@
 
 
     // $ANTLR start "rule__TypeExpCS__Alternatives_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5186:1: rule__TypeExpCS__Alternatives_0 : ( ( ruleTypeNameExpCS ) | ( ruleTypeLiteralCS ) | ( ruleCollectionPatternCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5344:1: rule__TypeExpCS__Alternatives_0 : ( ( ruleTypeNameExpCS ) | ( ruleTypeLiteralCS ) | ( ruleCollectionPatternCS ) );
     public final void rule__TypeExpCS__Alternatives_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5190:1: ( ( ruleTypeNameExpCS ) | ( ruleTypeLiteralCS ) | ( ruleCollectionPatternCS ) )
-            int alt57=3;
-            alt57 = dfa57.predict(input);
-            switch (alt57) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5348:1: ( ( ruleTypeNameExpCS ) | ( ruleTypeLiteralCS ) | ( ruleCollectionPatternCS ) )
+            int alt72=3;
+            alt72 = dfa72.predict(input);
+            switch (alt72) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5191:1: ( ruleTypeNameExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5349:1: ( ruleTypeNameExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5191:1: ( ruleTypeNameExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5192:1: ruleTypeNameExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5349:1: ( ruleTypeNameExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5350:1: ruleTypeNameExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeExpCSAccess().getTypeNameExpCSParserRuleCall_0_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeNameExpCS_in_rule__TypeExpCS__Alternatives_011632);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeNameExpCS_in_rule__TypeExpCS__Alternatives_011793);
                     ruleTypeNameExpCS();
 
                     state._fsp--;
@@ -18212,15 +18328,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5197:6: ( ruleTypeLiteralCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5355:6: ( ruleTypeLiteralCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5197:6: ( ruleTypeLiteralCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5198:1: ruleTypeLiteralCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5355:6: ( ruleTypeLiteralCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5356:1: ruleTypeLiteralCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeExpCSAccess().getTypeLiteralCSParserRuleCall_0_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_rule__TypeExpCS__Alternatives_011649);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_rule__TypeExpCS__Alternatives_011810);
                     ruleTypeLiteralCS();
 
                     state._fsp--;
@@ -18235,15 +18351,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5203:6: ( ruleCollectionPatternCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5361:6: ( ruleCollectionPatternCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5203:6: ( ruleCollectionPatternCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5204:1: ruleCollectionPatternCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5361:6: ( ruleCollectionPatternCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5362:1: ruleCollectionPatternCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeExpCSAccess().getCollectionPatternCSParserRuleCall_0_2()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCollectionPatternCS_in_rule__TypeExpCS__Alternatives_011666);
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionPatternCS_in_rule__TypeExpCS__Alternatives_011827);
                     ruleCollectionPatternCS();
 
                     state._fsp--;
@@ -18275,29 +18391,29 @@
 
 
     // $ANTLR start "rule__ExpCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5214:1: rule__ExpCS__Alternatives : ( ( ( rule__ExpCS__Group_0__0 ) ) | ( rulePrefixedLetExpCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5372:1: rule__ExpCS__Alternatives : ( ( ( rule__ExpCS__Group_0__0 ) ) | ( rulePrefixedLetExpCS ) );
     public final void rule__ExpCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5218:1: ( ( ( rule__ExpCS__Group_0__0 ) ) | ( rulePrefixedLetExpCS ) )
-            int alt58=2;
-            alt58 = dfa58.predict(input);
-            switch (alt58) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5376:1: ( ( ( rule__ExpCS__Group_0__0 ) ) | ( rulePrefixedLetExpCS ) )
+            int alt73=2;
+            alt73 = dfa73.predict(input);
+            switch (alt73) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5219:1: ( ( rule__ExpCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5377:1: ( ( rule__ExpCS__Group_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5219:1: ( ( rule__ExpCS__Group_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5220:1: ( rule__ExpCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5377:1: ( ( rule__ExpCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5378:1: ( rule__ExpCS__Group_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getExpCSAccess().getGroup_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5221:1: ( rule__ExpCS__Group_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5221:2: rule__ExpCS__Group_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5379:1: ( rule__ExpCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5379:2: rule__ExpCS__Group_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ExpCS__Group_0__0_in_rule__ExpCS__Alternatives11698);
+                    pushFollow(FollowSets000.FOLLOW_rule__ExpCS__Group_0__0_in_rule__ExpCS__Alternatives11859);
                     rule__ExpCS__Group_0__0();
 
                     state._fsp--;
@@ -18315,15 +18431,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5225:6: ( rulePrefixedLetExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5383:6: ( rulePrefixedLetExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5225:6: ( rulePrefixedLetExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5226:1: rulePrefixedLetExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5383:6: ( rulePrefixedLetExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5384:1: rulePrefixedLetExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getExpCSAccess().getPrefixedLetExpCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrefixedLetExpCS_in_rule__ExpCS__Alternatives11716);
+                    pushFollow(FollowSets000.FOLLOW_rulePrefixedLetExpCS_in_rule__ExpCS__Alternatives11877);
                     rulePrefixedLetExpCS();
 
                     state._fsp--;
@@ -18355,43 +18471,43 @@
 
 
     // $ANTLR start "rule__PrefixedLetExpCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5236:1: rule__PrefixedLetExpCS__Alternatives : ( ( ( rule__PrefixedLetExpCS__Group_0__0 ) ) | ( ruleLetExpCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5394:1: rule__PrefixedLetExpCS__Alternatives : ( ( ( rule__PrefixedLetExpCS__Group_0__0 ) ) | ( ruleLetExpCS ) );
     public final void rule__PrefixedLetExpCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5240:1: ( ( ( rule__PrefixedLetExpCS__Group_0__0 ) ) | ( ruleLetExpCS ) )
-            int alt59=2;
-            int LA59_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5398:1: ( ( ( rule__PrefixedLetExpCS__Group_0__0 ) ) | ( ruleLetExpCS ) )
+            int alt74=2;
+            int LA74_0 = input.LA(1);
 
-            if ( ((LA59_0>=61 && LA59_0<=62)) ) {
-                alt59=1;
+            if ( ((LA74_0>=70 && LA74_0<=71)) ) {
+                alt74=1;
             }
-            else if ( (LA59_0==117) ) {
-                alt59=2;
+            else if ( (LA74_0==126) ) {
+                alt74=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 59, 0, input);
+                    new NoViableAltException("", 74, 0, input);
 
                 throw nvae;
             }
-            switch (alt59) {
+            switch (alt74) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5241:1: ( ( rule__PrefixedLetExpCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5399:1: ( ( rule__PrefixedLetExpCS__Group_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5241:1: ( ( rule__PrefixedLetExpCS__Group_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5242:1: ( rule__PrefixedLetExpCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5399:1: ( ( rule__PrefixedLetExpCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5400:1: ( rule__PrefixedLetExpCS__Group_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrefixedLetExpCSAccess().getGroup_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5243:1: ( rule__PrefixedLetExpCS__Group_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5243:2: rule__PrefixedLetExpCS__Group_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5401:1: ( rule__PrefixedLetExpCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5401:2: rule__PrefixedLetExpCS__Group_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PrefixedLetExpCS__Group_0__0_in_rule__PrefixedLetExpCS__Alternatives11748);
+                    pushFollow(FollowSets000.FOLLOW_rule__PrefixedLetExpCS__Group_0__0_in_rule__PrefixedLetExpCS__Alternatives11909);
                     rule__PrefixedLetExpCS__Group_0__0();
 
                     state._fsp--;
@@ -18409,15 +18525,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5247:6: ( ruleLetExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5405:6: ( ruleLetExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5247:6: ( ruleLetExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5248:1: ruleLetExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5405:6: ( ruleLetExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5406:1: ruleLetExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrefixedLetExpCSAccess().getLetExpCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleLetExpCS_in_rule__PrefixedLetExpCS__Alternatives11766);
+                    pushFollow(FollowSets000.FOLLOW_ruleLetExpCS_in_rule__PrefixedLetExpCS__Alternatives11927);
                     ruleLetExpCS();
 
                     state._fsp--;
@@ -18449,43 +18565,43 @@
 
 
     // $ANTLR start "rule__PrefixedPrimaryExpCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5258:1: rule__PrefixedPrimaryExpCS__Alternatives : ( ( ( rule__PrefixedPrimaryExpCS__Group_0__0 ) ) | ( rulePrimaryExpCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5416:1: rule__PrefixedPrimaryExpCS__Alternatives : ( ( ( rule__PrefixedPrimaryExpCS__Group_0__0 ) ) | ( rulePrimaryExpCS ) );
     public final void rule__PrefixedPrimaryExpCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5262:1: ( ( ( rule__PrefixedPrimaryExpCS__Group_0__0 ) ) | ( rulePrimaryExpCS ) )
-            int alt60=2;
-            int LA60_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5420:1: ( ( ( rule__PrefixedPrimaryExpCS__Group_0__0 ) ) | ( rulePrimaryExpCS ) )
+            int alt75=2;
+            int LA75_0 = input.LA(1);
 
-            if ( ((LA60_0>=61 && LA60_0<=62)) ) {
-                alt60=1;
+            if ( ((LA75_0>=70 && LA75_0<=71)) ) {
+                alt75=1;
             }
-            else if ( ((LA60_0>=RULE_INT && LA60_0<=RULE_SINGLE_QUOTED_STRING)||(LA60_0>=RULE_SIMPLE_ID && LA60_0<=RULE_ESCAPED_ID)||(LA60_0>=17 && LA60_0<=52)||(LA60_0>=55 && LA60_0<=60)||LA60_0==63||(LA60_0>=80 && LA60_0<=93)||LA60_0==95||(LA60_0>=105 && LA60_0<=107)||LA60_0==112||LA60_0==118||(LA60_0>=131 && LA60_0<=132)) ) {
-                alt60=2;
+            else if ( ((LA75_0>=RULE_INT && LA75_0<=RULE_SINGLE_QUOTED_STRING)||(LA75_0>=RULE_SIMPLE_ID && LA75_0<=RULE_ESCAPED_ID)||(LA75_0>=17 && LA75_0<=52)||(LA75_0>=64 && LA75_0<=69)||LA75_0==72||(LA75_0>=89 && LA75_0<=102)||LA75_0==104||(LA75_0>=114 && LA75_0<=116)||LA75_0==121||LA75_0==127||(LA75_0>=131 && LA75_0<=132)) ) {
+                alt75=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 60, 0, input);
+                    new NoViableAltException("", 75, 0, input);
 
                 throw nvae;
             }
-            switch (alt60) {
+            switch (alt75) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5263:1: ( ( rule__PrefixedPrimaryExpCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5421:1: ( ( rule__PrefixedPrimaryExpCS__Group_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5263:1: ( ( rule__PrefixedPrimaryExpCS__Group_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5264:1: ( rule__PrefixedPrimaryExpCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5421:1: ( ( rule__PrefixedPrimaryExpCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5422:1: ( rule__PrefixedPrimaryExpCS__Group_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrefixedPrimaryExpCSAccess().getGroup_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5265:1: ( rule__PrefixedPrimaryExpCS__Group_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5265:2: rule__PrefixedPrimaryExpCS__Group_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5423:1: ( rule__PrefixedPrimaryExpCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5423:2: rule__PrefixedPrimaryExpCS__Group_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__0_in_rule__PrefixedPrimaryExpCS__Alternatives11798);
+                    pushFollow(FollowSets000.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__0_in_rule__PrefixedPrimaryExpCS__Alternatives11959);
                     rule__PrefixedPrimaryExpCS__Group_0__0();
 
                     state._fsp--;
@@ -18503,15 +18619,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5269:6: ( rulePrimaryExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5427:6: ( rulePrimaryExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5269:6: ( rulePrimaryExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5270:1: rulePrimaryExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5427:6: ( rulePrimaryExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5428:1: rulePrimaryExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrefixedPrimaryExpCSAccess().getPrimaryExpCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrimaryExpCS_in_rule__PrefixedPrimaryExpCS__Alternatives11816);
+                    pushFollow(FollowSets000.FOLLOW_rulePrimaryExpCS_in_rule__PrefixedPrimaryExpCS__Alternatives11977);
                     rulePrimaryExpCS();
 
                     state._fsp--;
@@ -18543,26 +18659,26 @@
 
 
     // $ANTLR start "rule__PrimaryExpCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5280:1: rule__PrimaryExpCS__Alternatives : ( ( ruleNestedExpCS ) | ( ruleIfExpCS ) | ( ruleSelfExpCS ) | ( rulePrimitiveLiteralExpCS ) | ( ruleTupleLiteralExpCS ) | ( ruleCollectionLiteralExpCS ) | ( ruleLambdaLiteralExpCS ) | ( ruleTypeLiteralExpCS ) | ( ruleNameExpCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5438:1: rule__PrimaryExpCS__Alternatives : ( ( ruleNestedExpCS ) | ( ruleIfExpCS ) | ( ruleSelfExpCS ) | ( rulePrimitiveLiteralExpCS ) | ( ruleTupleLiteralExpCS ) | ( ruleCollectionLiteralExpCS ) | ( ruleLambdaLiteralExpCS ) | ( ruleTypeLiteralExpCS ) | ( ruleNameExpCS ) );
     public final void rule__PrimaryExpCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5284:1: ( ( ruleNestedExpCS ) | ( ruleIfExpCS ) | ( ruleSelfExpCS ) | ( rulePrimitiveLiteralExpCS ) | ( ruleTupleLiteralExpCS ) | ( ruleCollectionLiteralExpCS ) | ( ruleLambdaLiteralExpCS ) | ( ruleTypeLiteralExpCS ) | ( ruleNameExpCS ) )
-            int alt61=9;
-            alt61 = dfa61.predict(input);
-            switch (alt61) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5442:1: ( ( ruleNestedExpCS ) | ( ruleIfExpCS ) | ( ruleSelfExpCS ) | ( rulePrimitiveLiteralExpCS ) | ( ruleTupleLiteralExpCS ) | ( ruleCollectionLiteralExpCS ) | ( ruleLambdaLiteralExpCS ) | ( ruleTypeLiteralExpCS ) | ( ruleNameExpCS ) )
+            int alt76=9;
+            alt76 = dfa76.predict(input);
+            switch (alt76) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5285:1: ( ruleNestedExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5443:1: ( ruleNestedExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5285:1: ( ruleNestedExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5286:1: ruleNestedExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5443:1: ( ruleNestedExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5444:1: ruleNestedExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimaryExpCSAccess().getNestedExpCSParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNestedExpCS_in_rule__PrimaryExpCS__Alternatives11848);
+                    pushFollow(FollowSets000.FOLLOW_ruleNestedExpCS_in_rule__PrimaryExpCS__Alternatives12009);
                     ruleNestedExpCS();
 
                     state._fsp--;
@@ -18577,15 +18693,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5291:6: ( ruleIfExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5449:6: ( ruleIfExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5291:6: ( ruleIfExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5292:1: ruleIfExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5449:6: ( ruleIfExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5450:1: ruleIfExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimaryExpCSAccess().getIfExpCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleIfExpCS_in_rule__PrimaryExpCS__Alternatives11865);
+                    pushFollow(FollowSets000.FOLLOW_ruleIfExpCS_in_rule__PrimaryExpCS__Alternatives12026);
                     ruleIfExpCS();
 
                     state._fsp--;
@@ -18600,15 +18716,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5297:6: ( ruleSelfExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5455:6: ( ruleSelfExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5297:6: ( ruleSelfExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5298:1: ruleSelfExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5455:6: ( ruleSelfExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5456:1: ruleSelfExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_2()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleSelfExpCS_in_rule__PrimaryExpCS__Alternatives11882);
+                    pushFollow(FollowSets000.FOLLOW_ruleSelfExpCS_in_rule__PrimaryExpCS__Alternatives12043);
                     ruleSelfExpCS();
 
                     state._fsp--;
@@ -18623,15 +18739,15 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5303:6: ( rulePrimitiveLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5461:6: ( rulePrimitiveLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5303:6: ( rulePrimitiveLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5304:1: rulePrimitiveLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5461:6: ( rulePrimitiveLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5462:1: rulePrimitiveLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimaryExpCSAccess().getPrimitiveLiteralExpCSParserRuleCall_3()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11899);
+                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12060);
                     rulePrimitiveLiteralExpCS();
 
                     state._fsp--;
@@ -18646,15 +18762,15 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5309:6: ( ruleTupleLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5467:6: ( ruleTupleLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5309:6: ( ruleTupleLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5310:1: ruleTupleLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5467:6: ( ruleTupleLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5468:1: ruleTupleLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimaryExpCSAccess().getTupleLiteralExpCSParserRuleCall_4()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11916);
+                    pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12077);
                     ruleTupleLiteralExpCS();
 
                     state._fsp--;
@@ -18669,15 +18785,15 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5315:6: ( ruleCollectionLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5473:6: ( ruleCollectionLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5315:6: ( ruleCollectionLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5316:1: ruleCollectionLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5473:6: ( ruleCollectionLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5474:1: ruleCollectionLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimaryExpCSAccess().getCollectionLiteralExpCSParserRuleCall_5()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11933);
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12094);
                     ruleCollectionLiteralExpCS();
 
                     state._fsp--;
@@ -18692,15 +18808,15 @@
                     }
                     break;
                 case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5321:6: ( ruleLambdaLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5479:6: ( ruleLambdaLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5321:6: ( ruleLambdaLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5322:1: ruleLambdaLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5479:6: ( ruleLambdaLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5480:1: ruleLambdaLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimaryExpCSAccess().getLambdaLiteralExpCSParserRuleCall_6()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleLambdaLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11950);
+                    pushFollow(FollowSets000.FOLLOW_ruleLambdaLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12111);
                     ruleLambdaLiteralExpCS();
 
                     state._fsp--;
@@ -18715,15 +18831,15 @@
                     }
                     break;
                 case 8 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5327:6: ( ruleTypeLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5485:6: ( ruleTypeLiteralExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5327:6: ( ruleTypeLiteralExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5328:1: ruleTypeLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5485:6: ( ruleTypeLiteralExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5486:1: ruleTypeLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimaryExpCSAccess().getTypeLiteralExpCSParserRuleCall_7()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11967);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12128);
                     ruleTypeLiteralExpCS();
 
                     state._fsp--;
@@ -18738,15 +18854,15 @@
                     }
                     break;
                 case 9 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5333:6: ( ruleNameExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5491:6: ( ruleNameExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5333:6: ( ruleNameExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5334:1: ruleNameExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5491:6: ( ruleNameExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5492:1: ruleNameExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_8()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNameExpCS_in_rule__PrimaryExpCS__Alternatives11984);
+                    pushFollow(FollowSets000.FOLLOW_ruleNameExpCS_in_rule__PrimaryExpCS__Alternatives12145);
                     ruleNameExpCS();
 
                     state._fsp--;
@@ -18778,51 +18894,51 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Alternatives_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5344:1: rule__CurlyBracketedClauseCS__Alternatives_2 : ( ( ( rule__CurlyBracketedClauseCS__Group_2_0__0 )? ) | ( ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5502:1: rule__CurlyBracketedClauseCS__Alternatives_2 : ( ( ( rule__CurlyBracketedClauseCS__Group_2_0__0 )? ) | ( ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 ) ) );
     public final void rule__CurlyBracketedClauseCS__Alternatives_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5348:1: ( ( ( rule__CurlyBracketedClauseCS__Group_2_0__0 )? ) | ( ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 ) ) )
-            int alt63=2;
-            int LA63_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5506:1: ( ( ( rule__CurlyBracketedClauseCS__Group_2_0__0 )? ) | ( ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 ) ) )
+            int alt78=2;
+            int LA78_0 = input.LA(1);
 
-            if ( ((LA63_0>=RULE_SIMPLE_ID && LA63_0<=RULE_ESCAPED_ID)||(LA63_0>=17 && LA63_0<=52)||(LA63_0>=55 && LA63_0<=60)||LA63_0==100) ) {
-                alt63=1;
+            if ( ((LA78_0>=RULE_SIMPLE_ID && LA78_0<=RULE_ESCAPED_ID)||(LA78_0>=17 && LA78_0<=52)||(LA78_0>=64 && LA78_0<=69)||LA78_0==109) ) {
+                alt78=1;
             }
-            else if ( (LA63_0==RULE_SINGLE_QUOTED_STRING) ) {
-                alt63=2;
+            else if ( (LA78_0==RULE_SINGLE_QUOTED_STRING) ) {
+                alt78=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 63, 0, input);
+                    new NoViableAltException("", 78, 0, input);
 
                 throw nvae;
             }
-            switch (alt63) {
+            switch (alt78) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5349:1: ( ( rule__CurlyBracketedClauseCS__Group_2_0__0 )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5507:1: ( ( rule__CurlyBracketedClauseCS__Group_2_0__0 )? )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5349:1: ( ( rule__CurlyBracketedClauseCS__Group_2_0__0 )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5350:1: ( rule__CurlyBracketedClauseCS__Group_2_0__0 )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5507:1: ( ( rule__CurlyBracketedClauseCS__Group_2_0__0 )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5508:1: ( rule__CurlyBracketedClauseCS__Group_2_0__0 )?
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCurlyBracketedClauseCSAccess().getGroup_2_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5351:1: ( rule__CurlyBracketedClauseCS__Group_2_0__0 )?
-                    int alt62=2;
-                    int LA62_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5509:1: ( rule__CurlyBracketedClauseCS__Group_2_0__0 )?
+                    int alt77=2;
+                    int LA77_0 = input.LA(1);
 
-                    if ( ((LA62_0>=RULE_SIMPLE_ID && LA62_0<=RULE_ESCAPED_ID)||(LA62_0>=17 && LA62_0<=52)||(LA62_0>=55 && LA62_0<=60)) ) {
-                        alt62=1;
+                    if ( ((LA77_0>=RULE_SIMPLE_ID && LA77_0<=RULE_ESCAPED_ID)||(LA77_0>=17 && LA77_0<=52)||(LA77_0>=64 && LA77_0<=69)) ) {
+                        alt77=1;
                     }
-                    switch (alt62) {
+                    switch (alt77) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5351:2: rule__CurlyBracketedClauseCS__Group_2_0__0
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5509:2: rule__CurlyBracketedClauseCS__Group_2_0__0
                             {
-                            pushFollow(FollowSets000.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__0_in_rule__CurlyBracketedClauseCS__Alternatives_212016);
+                            pushFollow(FollowSets000.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__0_in_rule__CurlyBracketedClauseCS__Alternatives_212177);
                             rule__CurlyBracketedClauseCS__Group_2_0__0();
 
                             state._fsp--;
@@ -18843,18 +18959,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5355:6: ( ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5513:6: ( ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5355:6: ( ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5356:1: ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5513:6: ( ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5514:1: ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCurlyBracketedClauseCSAccess().getValueAssignment_2_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5357:1: ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5357:2: rule__CurlyBracketedClauseCS__ValueAssignment_2_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5515:1: ( rule__CurlyBracketedClauseCS__ValueAssignment_2_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5515:2: rule__CurlyBracketedClauseCS__ValueAssignment_2_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__CurlyBracketedClauseCS__ValueAssignment_2_1_in_rule__CurlyBracketedClauseCS__Alternatives_212035);
+                    pushFollow(FollowSets000.FOLLOW_rule__CurlyBracketedClauseCS__ValueAssignment_2_1_in_rule__CurlyBracketedClauseCS__Alternatives_212196);
                     rule__CurlyBracketedClauseCS__ValueAssignment_2_1();
 
                     state._fsp--;
@@ -18889,43 +19005,43 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5366:1: rule__NavigatingArgCS__Alternatives : ( ( ( rule__NavigatingArgCS__Group_0__0 ) ) | ( ( rule__NavigatingArgCS__Group_1__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5524:1: rule__NavigatingArgCS__Alternatives : ( ( ( rule__NavigatingArgCS__Group_0__0 ) ) | ( ( rule__NavigatingArgCS__Group_1__0 ) ) );
     public final void rule__NavigatingArgCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5370:1: ( ( ( rule__NavigatingArgCS__Group_0__0 ) ) | ( ( rule__NavigatingArgCS__Group_1__0 ) ) )
-            int alt64=2;
-            int LA64_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5528:1: ( ( ( rule__NavigatingArgCS__Group_0__0 ) ) | ( ( rule__NavigatingArgCS__Group_1__0 ) ) )
+            int alt79=2;
+            int LA79_0 = input.LA(1);
 
-            if ( ((LA64_0>=RULE_INT && LA64_0<=RULE_SINGLE_QUOTED_STRING)||(LA64_0>=RULE_SIMPLE_ID && LA64_0<=RULE_ESCAPED_ID)||(LA64_0>=17 && LA64_0<=52)||(LA64_0>=55 && LA64_0<=63)||(LA64_0>=80 && LA64_0<=93)||LA64_0==95||(LA64_0>=105 && LA64_0<=107)||LA64_0==112||(LA64_0>=117 && LA64_0<=118)||(LA64_0>=131 && LA64_0<=132)) ) {
-                alt64=1;
+            if ( ((LA79_0>=RULE_INT && LA79_0<=RULE_SINGLE_QUOTED_STRING)||(LA79_0>=RULE_SIMPLE_ID && LA79_0<=RULE_ESCAPED_ID)||(LA79_0>=17 && LA79_0<=52)||(LA79_0>=64 && LA79_0<=72)||(LA79_0>=89 && LA79_0<=102)||LA79_0==104||(LA79_0>=114 && LA79_0<=116)||LA79_0==121||(LA79_0>=126 && LA79_0<=127)||(LA79_0>=131 && LA79_0<=132)) ) {
+                alt79=1;
             }
-            else if ( (LA64_0==97) ) {
-                alt64=2;
+            else if ( (LA79_0==106) ) {
+                alt79=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 64, 0, input);
+                    new NoViableAltException("", 79, 0, input);
 
                 throw nvae;
             }
-            switch (alt64) {
+            switch (alt79) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5371:1: ( ( rule__NavigatingArgCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5529:1: ( ( rule__NavigatingArgCS__Group_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5371:1: ( ( rule__NavigatingArgCS__Group_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5372:1: ( rule__NavigatingArgCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5529:1: ( ( rule__NavigatingArgCS__Group_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5530:1: ( rule__NavigatingArgCS__Group_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getNavigatingArgCSAccess().getGroup_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5373:1: ( rule__NavigatingArgCS__Group_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5373:2: rule__NavigatingArgCS__Group_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5531:1: ( rule__NavigatingArgCS__Group_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5531:2: rule__NavigatingArgCS__Group_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingArgCS__Group_0__0_in_rule__NavigatingArgCS__Alternatives12068);
+                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingArgCS__Group_0__0_in_rule__NavigatingArgCS__Alternatives12229);
                     rule__NavigatingArgCS__Group_0__0();
 
                     state._fsp--;
@@ -18943,18 +19059,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5377:6: ( ( rule__NavigatingArgCS__Group_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5535:6: ( ( rule__NavigatingArgCS__Group_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5377:6: ( ( rule__NavigatingArgCS__Group_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5378:1: ( rule__NavigatingArgCS__Group_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5535:6: ( ( rule__NavigatingArgCS__Group_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5536:1: ( rule__NavigatingArgCS__Group_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getNavigatingArgCSAccess().getGroup_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5379:1: ( rule__NavigatingArgCS__Group_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5379:2: rule__NavigatingArgCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5537:1: ( rule__NavigatingArgCS__Group_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5537:2: rule__NavigatingArgCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingArgCS__Group_1__0_in_rule__NavigatingArgCS__Alternatives12086);
+                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingArgCS__Group_1__0_in_rule__NavigatingArgCS__Alternatives12247);
                     rule__NavigatingArgCS__Group_1__0();
 
                     state._fsp--;
@@ -18989,43 +19105,43 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Alternatives_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5388:1: rule__NavigatingArgCS__Alternatives_0_1 : ( ( ( rule__NavigatingArgCS__Group_0_1_0__0 ) ) | ( ( rule__NavigatingArgCS__Group_0_1_1__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5546:1: rule__NavigatingArgCS__Alternatives_0_1 : ( ( ( rule__NavigatingArgCS__Group_0_1_0__0 ) ) | ( ( rule__NavigatingArgCS__Group_0_1_1__0 ) ) );
     public final void rule__NavigatingArgCS__Alternatives_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5392:1: ( ( ( rule__NavigatingArgCS__Group_0_1_0__0 ) ) | ( ( rule__NavigatingArgCS__Group_0_1_1__0 ) ) )
-            int alt65=2;
-            int LA65_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5550:1: ( ( ( rule__NavigatingArgCS__Group_0_1_0__0 ) ) | ( ( rule__NavigatingArgCS__Group_0_1_1__0 ) ) )
+            int alt80=2;
+            int LA80_0 = input.LA(1);
 
-            if ( (LA65_0==97) ) {
-                alt65=1;
+            if ( (LA80_0==106) ) {
+                alt80=1;
             }
-            else if ( (LA65_0==111) ) {
-                alt65=2;
+            else if ( (LA80_0==120) ) {
+                alt80=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 65, 0, input);
+                    new NoViableAltException("", 80, 0, input);
 
                 throw nvae;
             }
-            switch (alt65) {
+            switch (alt80) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5393:1: ( ( rule__NavigatingArgCS__Group_0_1_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5551:1: ( ( rule__NavigatingArgCS__Group_0_1_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5393:1: ( ( rule__NavigatingArgCS__Group_0_1_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5394:1: ( rule__NavigatingArgCS__Group_0_1_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5551:1: ( ( rule__NavigatingArgCS__Group_0_1_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5552:1: ( rule__NavigatingArgCS__Group_0_1_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getNavigatingArgCSAccess().getGroup_0_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5395:1: ( rule__NavigatingArgCS__Group_0_1_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5395:2: rule__NavigatingArgCS__Group_0_1_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5553:1: ( rule__NavigatingArgCS__Group_0_1_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5553:2: rule__NavigatingArgCS__Group_0_1_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__0_in_rule__NavigatingArgCS__Alternatives_0_112119);
+                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__0_in_rule__NavigatingArgCS__Alternatives_0_112280);
                     rule__NavigatingArgCS__Group_0_1_0__0();
 
                     state._fsp--;
@@ -19043,18 +19159,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5399:6: ( ( rule__NavigatingArgCS__Group_0_1_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5557:6: ( ( rule__NavigatingArgCS__Group_0_1_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5399:6: ( ( rule__NavigatingArgCS__Group_0_1_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5400:1: ( rule__NavigatingArgCS__Group_0_1_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5557:6: ( ( rule__NavigatingArgCS__Group_0_1_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5558:1: ( rule__NavigatingArgCS__Group_0_1_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getNavigatingArgCSAccess().getGroup_0_1_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5401:1: ( rule__NavigatingArgCS__Group_0_1_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5401:2: rule__NavigatingArgCS__Group_0_1_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5559:1: ( rule__NavigatingArgCS__Group_0_1_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5559:2: rule__NavigatingArgCS__Group_0_1_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingArgCS__Group_0_1_1__0_in_rule__NavigatingArgCS__Alternatives_0_112137);
+                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingArgCS__Group_0_1_1__0_in_rule__NavigatingArgCS__Alternatives_0_112298);
                     rule__NavigatingArgCS__Group_0_1_1__0();
 
                     state._fsp--;
@@ -19089,43 +19205,43 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Alternatives_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5410:1: rule__NavigatingCommaArgCS__Alternatives_2 : ( ( ( rule__NavigatingCommaArgCS__Group_2_0__0 ) ) | ( ( rule__NavigatingCommaArgCS__Group_2_1__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5568:1: rule__NavigatingCommaArgCS__Alternatives_2 : ( ( ( rule__NavigatingCommaArgCS__Group_2_0__0 ) ) | ( ( rule__NavigatingCommaArgCS__Group_2_1__0 ) ) );
     public final void rule__NavigatingCommaArgCS__Alternatives_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5414:1: ( ( ( rule__NavigatingCommaArgCS__Group_2_0__0 ) ) | ( ( rule__NavigatingCommaArgCS__Group_2_1__0 ) ) )
-            int alt66=2;
-            int LA66_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5572:1: ( ( ( rule__NavigatingCommaArgCS__Group_2_0__0 ) ) | ( ( rule__NavigatingCommaArgCS__Group_2_1__0 ) ) )
+            int alt81=2;
+            int LA81_0 = input.LA(1);
 
-            if ( (LA66_0==97) ) {
-                alt66=1;
+            if ( (LA81_0==106) ) {
+                alt81=1;
             }
-            else if ( (LA66_0==111) ) {
-                alt66=2;
+            else if ( (LA81_0==120) ) {
+                alt81=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 66, 0, input);
+                    new NoViableAltException("", 81, 0, input);
 
                 throw nvae;
             }
-            switch (alt66) {
+            switch (alt81) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5415:1: ( ( rule__NavigatingCommaArgCS__Group_2_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5573:1: ( ( rule__NavigatingCommaArgCS__Group_2_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5415:1: ( ( rule__NavigatingCommaArgCS__Group_2_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5416:1: ( rule__NavigatingCommaArgCS__Group_2_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5573:1: ( ( rule__NavigatingCommaArgCS__Group_2_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5574:1: ( rule__NavigatingCommaArgCS__Group_2_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getNavigatingCommaArgCSAccess().getGroup_2_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5417:1: ( rule__NavigatingCommaArgCS__Group_2_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5417:2: rule__NavigatingCommaArgCS__Group_2_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5575:1: ( rule__NavigatingCommaArgCS__Group_2_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5575:2: rule__NavigatingCommaArgCS__Group_2_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__0_in_rule__NavigatingCommaArgCS__Alternatives_212170);
+                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__0_in_rule__NavigatingCommaArgCS__Alternatives_212331);
                     rule__NavigatingCommaArgCS__Group_2_0__0();
 
                     state._fsp--;
@@ -19143,18 +19259,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5421:6: ( ( rule__NavigatingCommaArgCS__Group_2_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5579:6: ( ( rule__NavigatingCommaArgCS__Group_2_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5421:6: ( ( rule__NavigatingCommaArgCS__Group_2_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5422:1: ( rule__NavigatingCommaArgCS__Group_2_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5579:6: ( ( rule__NavigatingCommaArgCS__Group_2_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5580:1: ( rule__NavigatingCommaArgCS__Group_2_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getNavigatingCommaArgCSAccess().getGroup_2_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5423:1: ( rule__NavigatingCommaArgCS__Group_2_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5423:2: rule__NavigatingCommaArgCS__Group_2_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5581:1: ( rule__NavigatingCommaArgCS__Group_2_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5581:2: rule__NavigatingCommaArgCS__Group_2_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__0_in_rule__NavigatingCommaArgCS__Alternatives_212188);
+                    pushFollow(FollowSets000.FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__0_in_rule__NavigatingCommaArgCS__Alternatives_212349);
                     rule__NavigatingCommaArgCS__Group_2_1__0();
 
                     state._fsp--;
@@ -19189,26 +19305,26 @@
 
 
     // $ANTLR start "rule__IfExpCS__OwnedConditionAlternatives_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5432:1: rule__IfExpCS__OwnedConditionAlternatives_1_0 : ( ( ruleExpCS ) | ( rulePatternExpCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5590:1: rule__IfExpCS__OwnedConditionAlternatives_1_0 : ( ( ruleExpCS ) | ( rulePatternExpCS ) );
     public final void rule__IfExpCS__OwnedConditionAlternatives_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5436:1: ( ( ruleExpCS ) | ( rulePatternExpCS ) )
-            int alt67=2;
-            alt67 = dfa67.predict(input);
-            switch (alt67) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5594:1: ( ( ruleExpCS ) | ( rulePatternExpCS ) )
+            int alt82=2;
+            alt82 = dfa82.predict(input);
+            switch (alt82) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5437:1: ( ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5595:1: ( ruleExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5437:1: ( ruleExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5438:1: ruleExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5595:1: ( ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5596:1: ruleExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getIfExpCSAccess().getOwnedConditionExpCSParserRuleCall_1_0_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedConditionAlternatives_1_012221);
+                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedConditionAlternatives_1_012382);
                     ruleExpCS();
 
                     state._fsp--;
@@ -19223,15 +19339,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5443:6: ( rulePatternExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5601:6: ( rulePatternExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5443:6: ( rulePatternExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5444:1: rulePatternExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5601:6: ( rulePatternExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5602:1: rulePatternExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getIfExpCSAccess().getOwnedConditionPatternExpCSParserRuleCall_1_0_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_rule__IfExpCS__OwnedConditionAlternatives_1_012238);
+                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_rule__IfExpCS__OwnedConditionAlternatives_1_012399);
                     rulePatternExpCS();
 
                     state._fsp--;
@@ -19263,40 +19379,40 @@
 
 
     // $ANTLR start "rule__MultiplicityCS__Alternatives_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5454:1: rule__MultiplicityCS__Alternatives_1 : ( ( ruleMultiplicityBoundsCS ) | ( ruleMultiplicityStringCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5612:1: rule__MultiplicityCS__Alternatives_1 : ( ( ruleMultiplicityBoundsCS ) | ( ruleMultiplicityStringCS ) );
     public final void rule__MultiplicityCS__Alternatives_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5458:1: ( ( ruleMultiplicityBoundsCS ) | ( ruleMultiplicityStringCS ) )
-            int alt68=2;
-            int LA68_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5616:1: ( ( ruleMultiplicityBoundsCS ) | ( ruleMultiplicityStringCS ) )
+            int alt83=2;
+            int LA83_0 = input.LA(1);
 
-            if ( (LA68_0==RULE_INT) ) {
-                alt68=1;
+            if ( (LA83_0==RULE_INT) ) {
+                alt83=1;
             }
-            else if ( (LA68_0==63||LA68_0==65||LA68_0==94) ) {
-                alt68=2;
+            else if ( (LA83_0==72||LA83_0==74||LA83_0==103) ) {
+                alt83=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 68, 0, input);
+                    new NoViableAltException("", 83, 0, input);
 
                 throw nvae;
             }
-            switch (alt68) {
+            switch (alt83) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5459:1: ( ruleMultiplicityBoundsCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5617:1: ( ruleMultiplicityBoundsCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5459:1: ( ruleMultiplicityBoundsCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5460:1: ruleMultiplicityBoundsCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5617:1: ( ruleMultiplicityBoundsCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5618:1: ruleMultiplicityBoundsCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getMultiplicityCSAccess().getMultiplicityBoundsCSParserRuleCall_1_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityBoundsCS_in_rule__MultiplicityCS__Alternatives_112270);
+                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityBoundsCS_in_rule__MultiplicityCS__Alternatives_112431);
                     ruleMultiplicityBoundsCS();
 
                     state._fsp--;
@@ -19311,15 +19427,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5465:6: ( ruleMultiplicityStringCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5623:6: ( ruleMultiplicityStringCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5465:6: ( ruleMultiplicityStringCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5466:1: ruleMultiplicityStringCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5623:6: ( ruleMultiplicityStringCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5624:1: ruleMultiplicityStringCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getMultiplicityCSAccess().getMultiplicityStringCSParserRuleCall_1_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityStringCS_in_rule__MultiplicityCS__Alternatives_112287);
+                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityStringCS_in_rule__MultiplicityCS__Alternatives_112448);
                     ruleMultiplicityStringCS();
 
                     state._fsp--;
@@ -19351,49 +19467,49 @@
 
 
     // $ANTLR start "rule__MultiplicityStringCS__StringBoundsAlternatives_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5476:1: rule__MultiplicityStringCS__StringBoundsAlternatives_0 : ( ( '*' ) | ( '+' ) | ( '?' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5634:1: rule__MultiplicityStringCS__StringBoundsAlternatives_0 : ( ( '*' ) | ( '+' ) | ( '?' ) );
     public final void rule__MultiplicityStringCS__StringBoundsAlternatives_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5480:1: ( ( '*' ) | ( '+' ) | ( '?' ) )
-            int alt69=3;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5638:1: ( ( '*' ) | ( '+' ) | ( '?' ) )
+            int alt84=3;
             switch ( input.LA(1) ) {
-            case 63:
+            case 72:
                 {
-                alt69=1;
+                alt84=1;
                 }
                 break;
-            case 65:
+            case 74:
                 {
-                alt69=2;
+                alt84=2;
                 }
                 break;
-            case 94:
+            case 103:
                 {
-                alt69=3;
+                alt84=3;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 69, 0, input);
+                    new NoViableAltException("", 84, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt69) {
+            switch (alt84) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5481:1: ( '*' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5639:1: ( '*' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5481:1: ( '*' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5482:1: '*'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5639:1: ( '*' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5640:1: '*'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getMultiplicityStringCSAccess().getStringBoundsAsteriskKeyword_0_0()); 
                     }
-                    match(input,63,FollowSets000.FOLLOW_63_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012320); if (state.failed) return ;
+                    match(input,72,FollowSets000.FOLLOW_72_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012481); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getMultiplicityStringCSAccess().getStringBoundsAsteriskKeyword_0_0()); 
                     }
@@ -19404,15 +19520,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5489:6: ( '+' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5647:6: ( '+' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5489:6: ( '+' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5490:1: '+'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5647:6: ( '+' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5648:1: '+'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getMultiplicityStringCSAccess().getStringBoundsPlusSignKeyword_0_1()); 
                     }
-                    match(input,65,FollowSets000.FOLLOW_65_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012340); if (state.failed) return ;
+                    match(input,74,FollowSets000.FOLLOW_74_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012501); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getMultiplicityStringCSAccess().getStringBoundsPlusSignKeyword_0_1()); 
                     }
@@ -19423,15 +19539,15 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5497:6: ( '?' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5655:6: ( '?' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5497:6: ( '?' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5498:1: '?'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5655:6: ( '?' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5656:1: '?'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getMultiplicityStringCSAccess().getStringBoundsQuestionMarkKeyword_0_2()); 
                     }
-                    match(input,94,FollowSets000.FOLLOW_94_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012360); if (state.failed) return ;
+                    match(input,103,FollowSets000.FOLLOW_103_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012521); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getMultiplicityStringCSAccess().getStringBoundsQuestionMarkKeyword_0_2()); 
                     }
@@ -19459,43 +19575,43 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Alternatives_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5510:1: rule__TypeParameterCS__Alternatives_1 : ( ( ( rule__TypeParameterCS__Group_1_0__0 ) ) | ( ( rule__TypeParameterCS__Group_1_1__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5668:1: rule__TypeParameterCS__Alternatives_1 : ( ( ( rule__TypeParameterCS__Group_1_0__0 ) ) | ( ( rule__TypeParameterCS__Group_1_1__0 ) ) );
     public final void rule__TypeParameterCS__Alternatives_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5514:1: ( ( ( rule__TypeParameterCS__Group_1_0__0 ) ) | ( ( rule__TypeParameterCS__Group_1_1__0 ) ) )
-            int alt70=2;
-            int LA70_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5672:1: ( ( ( rule__TypeParameterCS__Group_1_0__0 ) ) | ( ( rule__TypeParameterCS__Group_1_1__0 ) ) )
+            int alt85=2;
+            int LA85_0 = input.LA(1);
 
-            if ( (LA70_0==28) ) {
-                alt70=1;
+            if ( (LA85_0==28) ) {
+                alt85=1;
             }
-            else if ( (LA70_0==47) ) {
-                alt70=2;
+            else if ( (LA85_0==47) ) {
+                alt85=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 70, 0, input);
+                    new NoViableAltException("", 85, 0, input);
 
                 throw nvae;
             }
-            switch (alt70) {
+            switch (alt85) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5515:1: ( ( rule__TypeParameterCS__Group_1_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5673:1: ( ( rule__TypeParameterCS__Group_1_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5515:1: ( ( rule__TypeParameterCS__Group_1_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5516:1: ( rule__TypeParameterCS__Group_1_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5673:1: ( ( rule__TypeParameterCS__Group_1_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5674:1: ( rule__TypeParameterCS__Group_1_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeParameterCSAccess().getGroup_1_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5517:1: ( rule__TypeParameterCS__Group_1_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5517:2: rule__TypeParameterCS__Group_1_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5675:1: ( rule__TypeParameterCS__Group_1_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5675:2: rule__TypeParameterCS__Group_1_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__TypeParameterCS__Group_1_0__0_in_rule__TypeParameterCS__Alternatives_112394);
+                    pushFollow(FollowSets000.FOLLOW_rule__TypeParameterCS__Group_1_0__0_in_rule__TypeParameterCS__Alternatives_112555);
                     rule__TypeParameterCS__Group_1_0__0();
 
                     state._fsp--;
@@ -19513,18 +19629,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5521:6: ( ( rule__TypeParameterCS__Group_1_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5679:6: ( ( rule__TypeParameterCS__Group_1_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5521:6: ( ( rule__TypeParameterCS__Group_1_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5522:1: ( rule__TypeParameterCS__Group_1_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5679:6: ( ( rule__TypeParameterCS__Group_1_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5680:1: ( rule__TypeParameterCS__Group_1_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeParameterCSAccess().getGroup_1_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5523:1: ( rule__TypeParameterCS__Group_1_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5523:2: rule__TypeParameterCS__Group_1_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5681:1: ( rule__TypeParameterCS__Group_1_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5681:2: rule__TypeParameterCS__Group_1_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__TypeParameterCS__Group_1_1__0_in_rule__TypeParameterCS__Alternatives_112412);
+                    pushFollow(FollowSets000.FOLLOW_rule__TypeParameterCS__Group_1_1__0_in_rule__TypeParameterCS__Alternatives_112573);
                     rule__TypeParameterCS__Group_1_1__0();
 
                     state._fsp--;
@@ -19559,40 +19675,40 @@
 
 
     // $ANTLR start "rule__TypeRefCS__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5532:1: rule__TypeRefCS__Alternatives : ( ( ruleTypedRefCS ) | ( ruleWildcardTypeRefCS ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5690:1: rule__TypeRefCS__Alternatives : ( ( ruleTypedRefCS ) | ( ruleWildcardTypeRefCS ) );
     public final void rule__TypeRefCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5536:1: ( ( ruleTypedRefCS ) | ( ruleWildcardTypeRefCS ) )
-            int alt71=2;
-            int LA71_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5694:1: ( ( ruleTypedRefCS ) | ( ruleWildcardTypeRefCS ) )
+            int alt86=2;
+            int LA86_0 = input.LA(1);
 
-            if ( ((LA71_0>=RULE_SIMPLE_ID && LA71_0<=RULE_ESCAPED_ID)||(LA71_0>=17 && LA71_0<=52)||(LA71_0>=55 && LA71_0<=60)||(LA71_0>=80 && LA71_0<=93)) ) {
-                alt71=1;
+            if ( ((LA86_0>=RULE_SIMPLE_ID && LA86_0<=RULE_ESCAPED_ID)||(LA86_0>=17 && LA86_0<=52)||(LA86_0>=64 && LA86_0<=69)||(LA86_0>=89 && LA86_0<=102)) ) {
+                alt86=1;
             }
-            else if ( (LA71_0==94) ) {
-                alt71=2;
+            else if ( (LA86_0==103) ) {
+                alt86=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 71, 0, input);
+                    new NoViableAltException("", 86, 0, input);
 
                 throw nvae;
             }
-            switch (alt71) {
+            switch (alt86) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5537:1: ( ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5695:1: ( ruleTypedRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5537:1: ( ruleTypedRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5538:1: ruleTypedRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5695:1: ( ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5696:1: ruleTypedRefCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeRefCSAccess().getTypedRefCSParserRuleCall_0()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_rule__TypeRefCS__Alternatives12445);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_rule__TypeRefCS__Alternatives12606);
                     ruleTypedRefCS();
 
                     state._fsp--;
@@ -19607,15 +19723,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5543:6: ( ruleWildcardTypeRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5701:6: ( ruleWildcardTypeRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5543:6: ( ruleWildcardTypeRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5544:1: ruleWildcardTypeRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5701:6: ( ruleWildcardTypeRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5702:1: ruleWildcardTypeRefCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getTypeRefCSAccess().getWildcardTypeRefCSParserRuleCall_1()); 
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleWildcardTypeRefCS_in_rule__TypeRefCS__Alternatives12462);
+                    pushFollow(FollowSets000.FOLLOW_ruleWildcardTypeRefCS_in_rule__TypeRefCS__Alternatives12623);
                     ruleWildcardTypeRefCS();
 
                     state._fsp--;
@@ -19647,43 +19763,43 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Alternatives_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5554:1: rule__WildcardTypeRefCS__Alternatives_2 : ( ( ( rule__WildcardTypeRefCS__Group_2_0__0 ) ) | ( ( rule__WildcardTypeRefCS__Group_2_1__0 ) ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5712:1: rule__WildcardTypeRefCS__Alternatives_2 : ( ( ( rule__WildcardTypeRefCS__Group_2_0__0 ) ) | ( ( rule__WildcardTypeRefCS__Group_2_1__0 ) ) );
     public final void rule__WildcardTypeRefCS__Alternatives_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5558:1: ( ( ( rule__WildcardTypeRefCS__Group_2_0__0 ) ) | ( ( rule__WildcardTypeRefCS__Group_2_1__0 ) ) )
-            int alt72=2;
-            int LA72_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5716:1: ( ( ( rule__WildcardTypeRefCS__Group_2_0__0 ) ) | ( ( rule__WildcardTypeRefCS__Group_2_1__0 ) ) )
+            int alt87=2;
+            int LA87_0 = input.LA(1);
 
-            if ( (LA72_0==28) ) {
-                alt72=1;
+            if ( (LA87_0==28) ) {
+                alt87=1;
             }
-            else if ( (LA72_0==47) ) {
-                alt72=2;
+            else if ( (LA87_0==47) ) {
+                alt87=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 72, 0, input);
+                    new NoViableAltException("", 87, 0, input);
 
                 throw nvae;
             }
-            switch (alt72) {
+            switch (alt87) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5559:1: ( ( rule__WildcardTypeRefCS__Group_2_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5717:1: ( ( rule__WildcardTypeRefCS__Group_2_0__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5559:1: ( ( rule__WildcardTypeRefCS__Group_2_0__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5560:1: ( rule__WildcardTypeRefCS__Group_2_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5717:1: ( ( rule__WildcardTypeRefCS__Group_2_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5718:1: ( rule__WildcardTypeRefCS__Group_2_0__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getWildcardTypeRefCSAccess().getGroup_2_0()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5561:1: ( rule__WildcardTypeRefCS__Group_2_0__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5561:2: rule__WildcardTypeRefCS__Group_2_0__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5719:1: ( rule__WildcardTypeRefCS__Group_2_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5719:2: rule__WildcardTypeRefCS__Group_2_0__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__WildcardTypeRefCS__Group_2_0__0_in_rule__WildcardTypeRefCS__Alternatives_212494);
+                    pushFollow(FollowSets000.FOLLOW_rule__WildcardTypeRefCS__Group_2_0__0_in_rule__WildcardTypeRefCS__Alternatives_212655);
                     rule__WildcardTypeRefCS__Group_2_0__0();
 
                     state._fsp--;
@@ -19701,18 +19817,18 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5565:6: ( ( rule__WildcardTypeRefCS__Group_2_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5723:6: ( ( rule__WildcardTypeRefCS__Group_2_1__0 ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5565:6: ( ( rule__WildcardTypeRefCS__Group_2_1__0 ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5566:1: ( rule__WildcardTypeRefCS__Group_2_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5723:6: ( ( rule__WildcardTypeRefCS__Group_2_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5724:1: ( rule__WildcardTypeRefCS__Group_2_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getWildcardTypeRefCSAccess().getGroup_2_1()); 
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5567:1: ( rule__WildcardTypeRefCS__Group_2_1__0 )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5567:2: rule__WildcardTypeRefCS__Group_2_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5725:1: ( rule__WildcardTypeRefCS__Group_2_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5725:2: rule__WildcardTypeRefCS__Group_2_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__WildcardTypeRefCS__Group_2_1__0_in_rule__WildcardTypeRefCS__Alternatives_212512);
+                    pushFollow(FollowSets000.FOLLOW_rule__WildcardTypeRefCS__Group_2_1__0_in_rule__WildcardTypeRefCS__Alternatives_212673);
                     rule__WildcardTypeRefCS__Group_2_1__0();
 
                     state._fsp--;
@@ -19747,40 +19863,40 @@
 
 
     // $ANTLR start "rule__ID__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5576:1: rule__ID__Alternatives : ( ( RULE_SIMPLE_ID ) | ( RULE_ESCAPED_ID ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5734:1: rule__ID__Alternatives : ( ( RULE_SIMPLE_ID ) | ( RULE_ESCAPED_ID ) );
     public final void rule__ID__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5580:1: ( ( RULE_SIMPLE_ID ) | ( RULE_ESCAPED_ID ) )
-            int alt73=2;
-            int LA73_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5738:1: ( ( RULE_SIMPLE_ID ) | ( RULE_ESCAPED_ID ) )
+            int alt88=2;
+            int LA88_0 = input.LA(1);
 
-            if ( (LA73_0==RULE_SIMPLE_ID) ) {
-                alt73=1;
+            if ( (LA88_0==RULE_SIMPLE_ID) ) {
+                alt88=1;
             }
-            else if ( (LA73_0==RULE_ESCAPED_ID) ) {
-                alt73=2;
+            else if ( (LA88_0==RULE_ESCAPED_ID) ) {
+                alt88=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 73, 0, input);
+                    new NoViableAltException("", 88, 0, input);
 
                 throw nvae;
             }
-            switch (alt73) {
+            switch (alt88) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5581:1: ( RULE_SIMPLE_ID )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5739:1: ( RULE_SIMPLE_ID )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5581:1: ( RULE_SIMPLE_ID )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5582:1: RULE_SIMPLE_ID
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5739:1: ( RULE_SIMPLE_ID )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5740:1: RULE_SIMPLE_ID
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getIDAccess().getSIMPLE_IDTerminalRuleCall_0()); 
                     }
-                    match(input,RULE_SIMPLE_ID,FollowSets000.FOLLOW_RULE_SIMPLE_ID_in_rule__ID__Alternatives12545); if (state.failed) return ;
+                    match(input,RULE_SIMPLE_ID,FollowSets000.FOLLOW_RULE_SIMPLE_ID_in_rule__ID__Alternatives12706); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getIDAccess().getSIMPLE_IDTerminalRuleCall_0()); 
                     }
@@ -19791,15 +19907,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5587:6: ( RULE_ESCAPED_ID )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5745:6: ( RULE_ESCAPED_ID )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5587:6: ( RULE_ESCAPED_ID )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5588:1: RULE_ESCAPED_ID
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5745:6: ( RULE_ESCAPED_ID )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5746:1: RULE_ESCAPED_ID
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getIDAccess().getESCAPED_IDTerminalRuleCall_1()); 
                     }
-                    match(input,RULE_ESCAPED_ID,FollowSets000.FOLLOW_RULE_ESCAPED_ID_in_rule__ID__Alternatives12562); if (state.failed) return ;
+                    match(input,RULE_ESCAPED_ID,FollowSets000.FOLLOW_RULE_ESCAPED_ID_in_rule__ID__Alternatives12723); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getIDAccess().getESCAPED_IDTerminalRuleCall_1()); 
                     }
@@ -19827,40 +19943,40 @@
 
 
     // $ANTLR start "rule__UPPER__Alternatives"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5598:1: rule__UPPER__Alternatives : ( ( RULE_INT ) | ( '*' ) );
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5756:1: rule__UPPER__Alternatives : ( ( RULE_INT ) | ( '*' ) );
     public final void rule__UPPER__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5602:1: ( ( RULE_INT ) | ( '*' ) )
-            int alt74=2;
-            int LA74_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5760:1: ( ( RULE_INT ) | ( '*' ) )
+            int alt89=2;
+            int LA89_0 = input.LA(1);
 
-            if ( (LA74_0==RULE_INT) ) {
-                alt74=1;
+            if ( (LA89_0==RULE_INT) ) {
+                alt89=1;
             }
-            else if ( (LA74_0==63) ) {
-                alt74=2;
+            else if ( (LA89_0==72) ) {
+                alt89=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 74, 0, input);
+                    new NoViableAltException("", 89, 0, input);
 
                 throw nvae;
             }
-            switch (alt74) {
+            switch (alt89) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5603:1: ( RULE_INT )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5761:1: ( RULE_INT )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5603:1: ( RULE_INT )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5604:1: RULE_INT
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5761:1: ( RULE_INT )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5762:1: RULE_INT
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getUPPERAccess().getINTTerminalRuleCall_0()); 
                     }
-                    match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_rule__UPPER__Alternatives12594); if (state.failed) return ;
+                    match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_rule__UPPER__Alternatives12755); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getUPPERAccess().getINTTerminalRuleCall_0()); 
                     }
@@ -19871,15 +19987,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5609:6: ( '*' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5767:6: ( '*' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5609:6: ( '*' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5610:1: '*'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5767:6: ( '*' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5768:1: '*'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getUPPERAccess().getAsteriskKeyword_1()); 
                     }
-                    match(input,63,FollowSets000.FOLLOW_63_in_rule__UPPER__Alternatives12612); if (state.failed) return ;
+                    match(input,72,FollowSets000.FOLLOW_72_in_rule__UPPER__Alternatives12773); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getUPPERAccess().getAsteriskKeyword_1()); 
                     }
@@ -19907,21 +20023,21 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5624:1: rule__TopLevelCS__Group__0 : rule__TopLevelCS__Group__0__Impl rule__TopLevelCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5782:1: rule__TopLevelCS__Group__0 : rule__TopLevelCS__Group__0__Impl rule__TopLevelCS__Group__1 ;
     public final void rule__TopLevelCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5628:1: ( rule__TopLevelCS__Group__0__Impl rule__TopLevelCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5629:2: rule__TopLevelCS__Group__0__Impl rule__TopLevelCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5786:1: ( rule__TopLevelCS__Group__0__Impl rule__TopLevelCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5787:2: rule__TopLevelCS__Group__0__Impl rule__TopLevelCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__0__Impl_in_rule__TopLevelCS__Group__012644);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__0__Impl_in_rule__TopLevelCS__Group__012805);
             rule__TopLevelCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__1_in_rule__TopLevelCS__Group__012647);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__1_in_rule__TopLevelCS__Group__012808);
             rule__TopLevelCS__Group__1();
 
             state._fsp--;
@@ -19945,23 +20061,23 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5636:1: rule__TopLevelCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5794:1: rule__TopLevelCS__Group__0__Impl : ( () ) ;
     public final void rule__TopLevelCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5640:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5641:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5798:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5799:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5641:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5642:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5799:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5800:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getTopLevelCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5643:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5645:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5801:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5803:1: 
             {
             }
 
@@ -19986,21 +20102,21 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5655:1: rule__TopLevelCS__Group__1 : rule__TopLevelCS__Group__1__Impl rule__TopLevelCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5813:1: rule__TopLevelCS__Group__1 : rule__TopLevelCS__Group__1__Impl rule__TopLevelCS__Group__2 ;
     public final void rule__TopLevelCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5659:1: ( rule__TopLevelCS__Group__1__Impl rule__TopLevelCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5660:2: rule__TopLevelCS__Group__1__Impl rule__TopLevelCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5817:1: ( rule__TopLevelCS__Group__1__Impl rule__TopLevelCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5818:2: rule__TopLevelCS__Group__1__Impl rule__TopLevelCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__1__Impl_in_rule__TopLevelCS__Group__112705);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__1__Impl_in_rule__TopLevelCS__Group__112866);
             rule__TopLevelCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__2_in_rule__TopLevelCS__Group__112708);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__2_in_rule__TopLevelCS__Group__112869);
             rule__TopLevelCS__Group__2();
 
             state._fsp--;
@@ -20024,33 +20140,33 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5667:1: rule__TopLevelCS__Group__1__Impl : ( ( rule__TopLevelCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5825:1: rule__TopLevelCS__Group__1__Impl : ( ( rule__TopLevelCS__Group_1__0 )? ) ;
     public final void rule__TopLevelCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5671:1: ( ( ( rule__TopLevelCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5672:1: ( ( rule__TopLevelCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5829:1: ( ( ( rule__TopLevelCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5830:1: ( ( rule__TopLevelCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5672:1: ( ( rule__TopLevelCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5673:1: ( rule__TopLevelCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5830:1: ( ( rule__TopLevelCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5831:1: ( rule__TopLevelCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5674:1: ( rule__TopLevelCS__Group_1__0 )?
-            int alt75=2;
-            int LA75_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5832:1: ( rule__TopLevelCS__Group_1__0 )?
+            int alt90=2;
+            int LA90_0 = input.LA(1);
 
-            if ( (LA75_0==35) ) {
-                alt75=1;
+            if ( (LA90_0==35) ) {
+                alt90=1;
             }
-            switch (alt75) {
+            switch (alt90) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5674:2: rule__TopLevelCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5832:2: rule__TopLevelCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group_1__0_in_rule__TopLevelCS__Group__1__Impl12735);
+                    pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group_1__0_in_rule__TopLevelCS__Group__1__Impl12896);
                     rule__TopLevelCS__Group_1__0();
 
                     state._fsp--;
@@ -20086,21 +20202,21 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5684:1: rule__TopLevelCS__Group__2 : rule__TopLevelCS__Group__2__Impl rule__TopLevelCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5842:1: rule__TopLevelCS__Group__2 : rule__TopLevelCS__Group__2__Impl rule__TopLevelCS__Group__3 ;
     public final void rule__TopLevelCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5688:1: ( rule__TopLevelCS__Group__2__Impl rule__TopLevelCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5689:2: rule__TopLevelCS__Group__2__Impl rule__TopLevelCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5846:1: ( rule__TopLevelCS__Group__2__Impl rule__TopLevelCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5847:2: rule__TopLevelCS__Group__2__Impl rule__TopLevelCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__2__Impl_in_rule__TopLevelCS__Group__212766);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__2__Impl_in_rule__TopLevelCS__Group__212927);
             rule__TopLevelCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__3_in_rule__TopLevelCS__Group__212769);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__3_in_rule__TopLevelCS__Group__212930);
             rule__TopLevelCS__Group__3();
 
             state._fsp--;
@@ -20124,37 +20240,37 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5696:1: rule__TopLevelCS__Group__2__Impl : ( ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5854:1: rule__TopLevelCS__Group__2__Impl : ( ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )* ) ;
     public final void rule__TopLevelCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5700:1: ( ( ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5701:1: ( ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5858:1: ( ( ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5859:1: ( ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5701:1: ( ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5702:1: ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5859:1: ( ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5860:1: ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getOwnedLibrariesAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5703:1: ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )*
-            loop76:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5861:1: ( rule__TopLevelCS__OwnedLibrariesAssignment_2 )*
+            loop91:
             do {
-                int alt76=2;
-                int LA76_0 = input.LA(1);
+                int alt91=2;
+                int LA91_0 = input.LA(1);
 
-                if ( (LA76_0==34) ) {
-                    alt76=1;
+                if ( (LA91_0==34) ) {
+                    alt91=1;
                 }
 
 
-                switch (alt76) {
+                switch (alt91) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5703:2: rule__TopLevelCS__OwnedLibrariesAssignment_2
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5861:2: rule__TopLevelCS__OwnedLibrariesAssignment_2
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__OwnedLibrariesAssignment_2_in_rule__TopLevelCS__Group__2__Impl12796);
+            	    pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__OwnedLibrariesAssignment_2_in_rule__TopLevelCS__Group__2__Impl12957);
             	    rule__TopLevelCS__OwnedLibrariesAssignment_2();
 
             	    state._fsp--;
@@ -20164,7 +20280,7 @@
             	    break;
 
             	default :
-            	    break loop76;
+            	    break loop91;
                 }
             } while (true);
 
@@ -20193,21 +20309,21 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5713:1: rule__TopLevelCS__Group__3 : rule__TopLevelCS__Group__3__Impl rule__TopLevelCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5871:1: rule__TopLevelCS__Group__3 : rule__TopLevelCS__Group__3__Impl rule__TopLevelCS__Group__4 ;
     public final void rule__TopLevelCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5717:1: ( rule__TopLevelCS__Group__3__Impl rule__TopLevelCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5718:2: rule__TopLevelCS__Group__3__Impl rule__TopLevelCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5875:1: ( rule__TopLevelCS__Group__3__Impl rule__TopLevelCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5876:2: rule__TopLevelCS__Group__3__Impl rule__TopLevelCS__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__3__Impl_in_rule__TopLevelCS__Group__312827);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__3__Impl_in_rule__TopLevelCS__Group__312988);
             rule__TopLevelCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__4_in_rule__TopLevelCS__Group__312830);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__4_in_rule__TopLevelCS__Group__312991);
             rule__TopLevelCS__Group__4();
 
             state._fsp--;
@@ -20231,37 +20347,37 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5725:1: rule__TopLevelCS__Group__3__Impl : ( ( rule__TopLevelCS__OwnedImportsAssignment_3 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5883:1: rule__TopLevelCS__Group__3__Impl : ( ( rule__TopLevelCS__OwnedImportsAssignment_3 )* ) ;
     public final void rule__TopLevelCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5729:1: ( ( ( rule__TopLevelCS__OwnedImportsAssignment_3 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5730:1: ( ( rule__TopLevelCS__OwnedImportsAssignment_3 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5887:1: ( ( ( rule__TopLevelCS__OwnedImportsAssignment_3 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5888:1: ( ( rule__TopLevelCS__OwnedImportsAssignment_3 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5730:1: ( ( rule__TopLevelCS__OwnedImportsAssignment_3 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5731:1: ( rule__TopLevelCS__OwnedImportsAssignment_3 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5888:1: ( ( rule__TopLevelCS__OwnedImportsAssignment_3 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5889:1: ( rule__TopLevelCS__OwnedImportsAssignment_3 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getOwnedImportsAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5732:1: ( rule__TopLevelCS__OwnedImportsAssignment_3 )*
-            loop77:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5890:1: ( rule__TopLevelCS__OwnedImportsAssignment_3 )*
+            loop92:
             do {
-                int alt77=2;
-                int LA77_0 = input.LA(1);
+                int alt92=2;
+                int LA92_0 = input.LA(1);
 
-                if ( (LA77_0==30) ) {
-                    alt77=1;
+                if ( (LA92_0==30) ) {
+                    alt92=1;
                 }
 
 
-                switch (alt77) {
+                switch (alt92) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5732:2: rule__TopLevelCS__OwnedImportsAssignment_3
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5890:2: rule__TopLevelCS__OwnedImportsAssignment_3
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__OwnedImportsAssignment_3_in_rule__TopLevelCS__Group__3__Impl12857);
+            	    pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__OwnedImportsAssignment_3_in_rule__TopLevelCS__Group__3__Impl13018);
             	    rule__TopLevelCS__OwnedImportsAssignment_3();
 
             	    state._fsp--;
@@ -20271,7 +20387,7 @@
             	    break;
 
             	default :
-            	    break loop77;
+            	    break loop92;
                 }
             } while (true);
 
@@ -20300,16 +20416,16 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5742:1: rule__TopLevelCS__Group__4 : rule__TopLevelCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5900:1: rule__TopLevelCS__Group__4 : rule__TopLevelCS__Group__4__Impl ;
     public final void rule__TopLevelCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5746:1: ( rule__TopLevelCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5747:2: rule__TopLevelCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5904:1: ( rule__TopLevelCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5905:2: rule__TopLevelCS__Group__4__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__4__Impl_in_rule__TopLevelCS__Group__412888);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group__4__Impl_in_rule__TopLevelCS__Group__413049);
             rule__TopLevelCS__Group__4__Impl();
 
             state._fsp--;
@@ -20333,37 +20449,37 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5753:1: rule__TopLevelCS__Group__4__Impl : ( ( rule__TopLevelCS__OwnedPackagesAssignment_4 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5911:1: rule__TopLevelCS__Group__4__Impl : ( ( rule__TopLevelCS__OwnedPackagesAssignment_4 )* ) ;
     public final void rule__TopLevelCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5757:1: ( ( ( rule__TopLevelCS__OwnedPackagesAssignment_4 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5758:1: ( ( rule__TopLevelCS__OwnedPackagesAssignment_4 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5915:1: ( ( ( rule__TopLevelCS__OwnedPackagesAssignment_4 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5916:1: ( ( rule__TopLevelCS__OwnedPackagesAssignment_4 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5758:1: ( ( rule__TopLevelCS__OwnedPackagesAssignment_4 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5759:1: ( rule__TopLevelCS__OwnedPackagesAssignment_4 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5916:1: ( ( rule__TopLevelCS__OwnedPackagesAssignment_4 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5917:1: ( rule__TopLevelCS__OwnedPackagesAssignment_4 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getOwnedPackagesAssignment_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5760:1: ( rule__TopLevelCS__OwnedPackagesAssignment_4 )*
-            loop78:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5918:1: ( rule__TopLevelCS__OwnedPackagesAssignment_4 )*
+            loop93:
             do {
-                int alt78=2;
-                int LA78_0 = input.LA(1);
+                int alt93=2;
+                int LA93_0 = input.LA(1);
 
-                if ( (LA78_0==38) ) {
-                    alt78=1;
+                if ( (LA93_0==38) ) {
+                    alt93=1;
                 }
 
 
-                switch (alt78) {
+                switch (alt93) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5760:2: rule__TopLevelCS__OwnedPackagesAssignment_4
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5918:2: rule__TopLevelCS__OwnedPackagesAssignment_4
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__OwnedPackagesAssignment_4_in_rule__TopLevelCS__Group__4__Impl12915);
+            	    pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__OwnedPackagesAssignment_4_in_rule__TopLevelCS__Group__4__Impl13076);
             	    rule__TopLevelCS__OwnedPackagesAssignment_4();
 
             	    state._fsp--;
@@ -20373,7 +20489,7 @@
             	    break;
 
             	default :
-            	    break loop78;
+            	    break loop93;
                 }
             } while (true);
 
@@ -20402,21 +20518,21 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5780:1: rule__TopLevelCS__Group_1__0 : rule__TopLevelCS__Group_1__0__Impl rule__TopLevelCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5938:1: rule__TopLevelCS__Group_1__0 : rule__TopLevelCS__Group_1__0__Impl rule__TopLevelCS__Group_1__1 ;
     public final void rule__TopLevelCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5784:1: ( rule__TopLevelCS__Group_1__0__Impl rule__TopLevelCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5785:2: rule__TopLevelCS__Group_1__0__Impl rule__TopLevelCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5942:1: ( rule__TopLevelCS__Group_1__0__Impl rule__TopLevelCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5943:2: rule__TopLevelCS__Group_1__0__Impl rule__TopLevelCS__Group_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group_1__0__Impl_in_rule__TopLevelCS__Group_1__012956);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group_1__0__Impl_in_rule__TopLevelCS__Group_1__013117);
             rule__TopLevelCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group_1__1_in_rule__TopLevelCS__Group_1__012959);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group_1__1_in_rule__TopLevelCS__Group_1__013120);
             rule__TopLevelCS__Group_1__1();
 
             state._fsp--;
@@ -20440,22 +20556,22 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5792:1: rule__TopLevelCS__Group_1__0__Impl : ( 'module' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5950:1: rule__TopLevelCS__Group_1__0__Impl : ( 'module' ) ;
     public final void rule__TopLevelCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5796:1: ( ( 'module' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5797:1: ( 'module' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5954:1: ( ( 'module' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5955:1: ( 'module' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5797:1: ( 'module' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5798:1: 'module'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5955:1: ( 'module' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5956:1: 'module'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getModuleKeyword_1_0()); 
             }
-            match(input,35,FollowSets000.FOLLOW_35_in_rule__TopLevelCS__Group_1__0__Impl12987); if (state.failed) return ;
+            match(input,35,FollowSets000.FOLLOW_35_in_rule__TopLevelCS__Group_1__0__Impl13148); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTopLevelCSAccess().getModuleKeyword_1_0()); 
             }
@@ -20481,16 +20597,16 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5811:1: rule__TopLevelCS__Group_1__1 : rule__TopLevelCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5969:1: rule__TopLevelCS__Group_1__1 : rule__TopLevelCS__Group_1__1__Impl ;
     public final void rule__TopLevelCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5815:1: ( rule__TopLevelCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5816:2: rule__TopLevelCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5973:1: ( rule__TopLevelCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5974:2: rule__TopLevelCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group_1__1__Impl_in_rule__TopLevelCS__Group_1__113018);
+            pushFollow(FollowSets000.FOLLOW_rule__TopLevelCS__Group_1__1__Impl_in_rule__TopLevelCS__Group_1__113179);
             rule__TopLevelCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -20514,22 +20630,22 @@
 
 
     // $ANTLR start "rule__TopLevelCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5822:1: rule__TopLevelCS__Group_1__1__Impl : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5980:1: rule__TopLevelCS__Group_1__1__Impl : ( ruleUnrestrictedName ) ;
     public final void rule__TopLevelCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5826:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5827:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5984:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5985:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5827:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5828:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5985:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5986:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getUnrestrictedNameParserRuleCall_1_1()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__TopLevelCS__Group_1__1__Impl13045);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__TopLevelCS__Group_1__1__Impl13206);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -20559,21 +20675,21 @@
 
 
     // $ANTLR start "rule__SIGNED__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5843:1: rule__SIGNED__Group__0 : rule__SIGNED__Group__0__Impl rule__SIGNED__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6001:1: rule__SIGNED__Group__0 : rule__SIGNED__Group__0__Impl rule__SIGNED__Group__1 ;
     public final void rule__SIGNED__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5847:1: ( rule__SIGNED__Group__0__Impl rule__SIGNED__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5848:2: rule__SIGNED__Group__0__Impl rule__SIGNED__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6005:1: ( rule__SIGNED__Group__0__Impl rule__SIGNED__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6006:2: rule__SIGNED__Group__0__Impl rule__SIGNED__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__SIGNED__Group__0__Impl_in_rule__SIGNED__Group__013078);
+            pushFollow(FollowSets000.FOLLOW_rule__SIGNED__Group__0__Impl_in_rule__SIGNED__Group__013239);
             rule__SIGNED__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__SIGNED__Group__1_in_rule__SIGNED__Group__013081);
+            pushFollow(FollowSets000.FOLLOW_rule__SIGNED__Group__1_in_rule__SIGNED__Group__013242);
             rule__SIGNED__Group__1();
 
             state._fsp--;
@@ -20597,33 +20713,33 @@
 
 
     // $ANTLR start "rule__SIGNED__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5855:1: rule__SIGNED__Group__0__Impl : ( ( '-' )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6013:1: rule__SIGNED__Group__0__Impl : ( ( '-' )? ) ;
     public final void rule__SIGNED__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5859:1: ( ( ( '-' )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5860:1: ( ( '-' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6017:1: ( ( ( '-' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6018:1: ( ( '-' )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5860:1: ( ( '-' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5861:1: ( '-' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6018:1: ( ( '-' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6019:1: ( '-' )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSIGNEDAccess().getHyphenMinusKeyword_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5862:1: ( '-' )?
-            int alt79=2;
-            int LA79_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6020:1: ( '-' )?
+            int alt94=2;
+            int LA94_0 = input.LA(1);
 
-            if ( (LA79_0==61) ) {
-                alt79=1;
+            if ( (LA94_0==70) ) {
+                alt94=1;
             }
-            switch (alt79) {
+            switch (alt94) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5863:2: '-'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6021:2: '-'
                     {
-                    match(input,61,FollowSets000.FOLLOW_61_in_rule__SIGNED__Group__0__Impl13110); if (state.failed) return ;
+                    match(input,70,FollowSets000.FOLLOW_70_in_rule__SIGNED__Group__0__Impl13271); if (state.failed) return ;
 
                     }
                     break;
@@ -20655,16 +20771,16 @@
 
 
     // $ANTLR start "rule__SIGNED__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5874:1: rule__SIGNED__Group__1 : rule__SIGNED__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6032:1: rule__SIGNED__Group__1 : rule__SIGNED__Group__1__Impl ;
     public final void rule__SIGNED__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5878:1: ( rule__SIGNED__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5879:2: rule__SIGNED__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6036:1: ( rule__SIGNED__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6037:2: rule__SIGNED__Group__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__SIGNED__Group__1__Impl_in_rule__SIGNED__Group__113143);
+            pushFollow(FollowSets000.FOLLOW_rule__SIGNED__Group__1__Impl_in_rule__SIGNED__Group__113304);
             rule__SIGNED__Group__1__Impl();
 
             state._fsp--;
@@ -20688,22 +20804,22 @@
 
 
     // $ANTLR start "rule__SIGNED__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5885:1: rule__SIGNED__Group__1__Impl : ( RULE_INT ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6043:1: rule__SIGNED__Group__1__Impl : ( RULE_INT ) ;
     public final void rule__SIGNED__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5889:1: ( ( RULE_INT ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5890:1: ( RULE_INT )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6047:1: ( ( RULE_INT ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6048:1: ( RULE_INT )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5890:1: ( RULE_INT )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5891:1: RULE_INT
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6048:1: ( RULE_INT )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6049:1: RULE_INT
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSIGNEDAccess().getINTTerminalRuleCall_1()); 
             }
-            match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_rule__SIGNED__Group__1__Impl13170); if (state.failed) return ;
+            match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_rule__SIGNED__Group__1__Impl13331); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSIGNEDAccess().getINTTerminalRuleCall_1()); 
             }
@@ -20729,21 +20845,21 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5906:1: rule__InvariantConstraintCS__Group__0 : rule__InvariantConstraintCS__Group__0__Impl rule__InvariantConstraintCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6064:1: rule__InvariantConstraintCS__Group__0 : rule__InvariantConstraintCS__Group__0__Impl rule__InvariantConstraintCS__Group__1 ;
     public final void rule__InvariantConstraintCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5910:1: ( rule__InvariantConstraintCS__Group__0__Impl rule__InvariantConstraintCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5911:2: rule__InvariantConstraintCS__Group__0__Impl rule__InvariantConstraintCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6068:1: ( rule__InvariantConstraintCS__Group__0__Impl rule__InvariantConstraintCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6069:2: rule__InvariantConstraintCS__Group__0__Impl rule__InvariantConstraintCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__0__Impl_in_rule__InvariantConstraintCS__Group__013203);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__0__Impl_in_rule__InvariantConstraintCS__Group__013364);
             rule__InvariantConstraintCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__1_in_rule__InvariantConstraintCS__Group__013206);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__1_in_rule__InvariantConstraintCS__Group__013367);
             rule__InvariantConstraintCS__Group__1();
 
             state._fsp--;
@@ -20767,33 +20883,33 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5918:1: rule__InvariantConstraintCS__Group__0__Impl : ( ( rule__InvariantConstraintCS__IsCallableAssignment_0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6076:1: rule__InvariantConstraintCS__Group__0__Impl : ( ( rule__InvariantConstraintCS__IsCallableAssignment_0 )? ) ;
     public final void rule__InvariantConstraintCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5922:1: ( ( ( rule__InvariantConstraintCS__IsCallableAssignment_0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5923:1: ( ( rule__InvariantConstraintCS__IsCallableAssignment_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6080:1: ( ( ( rule__InvariantConstraintCS__IsCallableAssignment_0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6081:1: ( ( rule__InvariantConstraintCS__IsCallableAssignment_0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5923:1: ( ( rule__InvariantConstraintCS__IsCallableAssignment_0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5924:1: ( rule__InvariantConstraintCS__IsCallableAssignment_0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6081:1: ( ( rule__InvariantConstraintCS__IsCallableAssignment_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6082:1: ( rule__InvariantConstraintCS__IsCallableAssignment_0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getIsCallableAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5925:1: ( rule__InvariantConstraintCS__IsCallableAssignment_0 )?
-            int alt80=2;
-            int LA80_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6083:1: ( rule__InvariantConstraintCS__IsCallableAssignment_0 )?
+            int alt95=2;
+            int LA95_0 = input.LA(1);
 
-            if ( (LA80_0==20) ) {
-                alt80=1;
+            if ( (LA95_0==20) ) {
+                alt95=1;
             }
-            switch (alt80) {
+            switch (alt95) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5925:2: rule__InvariantConstraintCS__IsCallableAssignment_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6083:2: rule__InvariantConstraintCS__IsCallableAssignment_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__IsCallableAssignment_0_in_rule__InvariantConstraintCS__Group__0__Impl13233);
+                    pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__IsCallableAssignment_0_in_rule__InvariantConstraintCS__Group__0__Impl13394);
                     rule__InvariantConstraintCS__IsCallableAssignment_0();
 
                     state._fsp--;
@@ -20829,21 +20945,21 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5935:1: rule__InvariantConstraintCS__Group__1 : rule__InvariantConstraintCS__Group__1__Impl rule__InvariantConstraintCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6093:1: rule__InvariantConstraintCS__Group__1 : rule__InvariantConstraintCS__Group__1__Impl rule__InvariantConstraintCS__Group__2 ;
     public final void rule__InvariantConstraintCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5939:1: ( rule__InvariantConstraintCS__Group__1__Impl rule__InvariantConstraintCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5940:2: rule__InvariantConstraintCS__Group__1__Impl rule__InvariantConstraintCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6097:1: ( rule__InvariantConstraintCS__Group__1__Impl rule__InvariantConstraintCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6098:2: rule__InvariantConstraintCS__Group__1__Impl rule__InvariantConstraintCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__1__Impl_in_rule__InvariantConstraintCS__Group__113264);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__1__Impl_in_rule__InvariantConstraintCS__Group__113425);
             rule__InvariantConstraintCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__2_in_rule__InvariantConstraintCS__Group__113267);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__2_in_rule__InvariantConstraintCS__Group__113428);
             rule__InvariantConstraintCS__Group__2();
 
             state._fsp--;
@@ -20867,25 +20983,25 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5947:1: rule__InvariantConstraintCS__Group__1__Impl : ( ( rule__InvariantConstraintCS__StereotypeAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6105:1: rule__InvariantConstraintCS__Group__1__Impl : ( ( rule__InvariantConstraintCS__StereotypeAssignment_1 ) ) ;
     public final void rule__InvariantConstraintCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5951:1: ( ( ( rule__InvariantConstraintCS__StereotypeAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5952:1: ( ( rule__InvariantConstraintCS__StereotypeAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6109:1: ( ( ( rule__InvariantConstraintCS__StereotypeAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6110:1: ( ( rule__InvariantConstraintCS__StereotypeAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5952:1: ( ( rule__InvariantConstraintCS__StereotypeAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5953:1: ( rule__InvariantConstraintCS__StereotypeAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6110:1: ( ( rule__InvariantConstraintCS__StereotypeAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6111:1: ( rule__InvariantConstraintCS__StereotypeAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getStereotypeAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5954:1: ( rule__InvariantConstraintCS__StereotypeAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5954:2: rule__InvariantConstraintCS__StereotypeAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6112:1: ( rule__InvariantConstraintCS__StereotypeAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6112:2: rule__InvariantConstraintCS__StereotypeAssignment_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__StereotypeAssignment_1_in_rule__InvariantConstraintCS__Group__1__Impl13294);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__StereotypeAssignment_1_in_rule__InvariantConstraintCS__Group__1__Impl13455);
             rule__InvariantConstraintCS__StereotypeAssignment_1();
 
             state._fsp--;
@@ -20918,21 +21034,21 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5964:1: rule__InvariantConstraintCS__Group__2 : rule__InvariantConstraintCS__Group__2__Impl rule__InvariantConstraintCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6122:1: rule__InvariantConstraintCS__Group__2 : rule__InvariantConstraintCS__Group__2__Impl rule__InvariantConstraintCS__Group__3 ;
     public final void rule__InvariantConstraintCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5968:1: ( rule__InvariantConstraintCS__Group__2__Impl rule__InvariantConstraintCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5969:2: rule__InvariantConstraintCS__Group__2__Impl rule__InvariantConstraintCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6126:1: ( rule__InvariantConstraintCS__Group__2__Impl rule__InvariantConstraintCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6127:2: rule__InvariantConstraintCS__Group__2__Impl rule__InvariantConstraintCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__2__Impl_in_rule__InvariantConstraintCS__Group__213324);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__2__Impl_in_rule__InvariantConstraintCS__Group__213485);
             rule__InvariantConstraintCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__3_in_rule__InvariantConstraintCS__Group__213327);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__3_in_rule__InvariantConstraintCS__Group__213488);
             rule__InvariantConstraintCS__Group__3();
 
             state._fsp--;
@@ -20956,33 +21072,33 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5976:1: rule__InvariantConstraintCS__Group__2__Impl : ( ( rule__InvariantConstraintCS__Group_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6134:1: rule__InvariantConstraintCS__Group__2__Impl : ( ( rule__InvariantConstraintCS__Group_2__0 )? ) ;
     public final void rule__InvariantConstraintCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5980:1: ( ( ( rule__InvariantConstraintCS__Group_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5981:1: ( ( rule__InvariantConstraintCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6138:1: ( ( ( rule__InvariantConstraintCS__Group_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6139:1: ( ( rule__InvariantConstraintCS__Group_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5981:1: ( ( rule__InvariantConstraintCS__Group_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5982:1: ( rule__InvariantConstraintCS__Group_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6139:1: ( ( rule__InvariantConstraintCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6140:1: ( rule__InvariantConstraintCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5983:1: ( rule__InvariantConstraintCS__Group_2__0 )?
-            int alt81=2;
-            int LA81_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6141:1: ( rule__InvariantConstraintCS__Group_2__0 )?
+            int alt96=2;
+            int LA96_0 = input.LA(1);
 
-            if ( ((LA81_0>=RULE_SIMPLE_ID && LA81_0<=RULE_ESCAPED_ID)||(LA81_0>=17 && LA81_0<=52)||(LA81_0>=55 && LA81_0<=60)) ) {
-                alt81=1;
+            if ( ((LA96_0>=RULE_SIMPLE_ID && LA96_0<=RULE_ESCAPED_ID)||(LA96_0>=17 && LA96_0<=52)||(LA96_0>=64 && LA96_0<=69)) ) {
+                alt96=1;
             }
-            switch (alt81) {
+            switch (alt96) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5983:2: rule__InvariantConstraintCS__Group_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6141:2: rule__InvariantConstraintCS__Group_2__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2__0_in_rule__InvariantConstraintCS__Group__2__Impl13354);
+                    pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2__0_in_rule__InvariantConstraintCS__Group__2__Impl13515);
                     rule__InvariantConstraintCS__Group_2__0();
 
                     state._fsp--;
@@ -21018,16 +21134,16 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5993:1: rule__InvariantConstraintCS__Group__3 : rule__InvariantConstraintCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6151:1: rule__InvariantConstraintCS__Group__3 : rule__InvariantConstraintCS__Group__3__Impl ;
     public final void rule__InvariantConstraintCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5997:1: ( rule__InvariantConstraintCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5998:2: rule__InvariantConstraintCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6155:1: ( rule__InvariantConstraintCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6156:2: rule__InvariantConstraintCS__Group__3__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__3__Impl_in_rule__InvariantConstraintCS__Group__313385);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group__3__Impl_in_rule__InvariantConstraintCS__Group__313546);
             rule__InvariantConstraintCS__Group__3__Impl();
 
             state._fsp--;
@@ -21051,25 +21167,25 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6004:1: rule__InvariantConstraintCS__Group__3__Impl : ( ( rule__InvariantConstraintCS__Alternatives_3 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6162:1: rule__InvariantConstraintCS__Group__3__Impl : ( ( rule__InvariantConstraintCS__Alternatives_3 ) ) ;
     public final void rule__InvariantConstraintCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6008:1: ( ( ( rule__InvariantConstraintCS__Alternatives_3 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6009:1: ( ( rule__InvariantConstraintCS__Alternatives_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6166:1: ( ( ( rule__InvariantConstraintCS__Alternatives_3 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6167:1: ( ( rule__InvariantConstraintCS__Alternatives_3 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6009:1: ( ( rule__InvariantConstraintCS__Alternatives_3 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6010:1: ( rule__InvariantConstraintCS__Alternatives_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6167:1: ( ( rule__InvariantConstraintCS__Alternatives_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6168:1: ( rule__InvariantConstraintCS__Alternatives_3 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getAlternatives_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6011:1: ( rule__InvariantConstraintCS__Alternatives_3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6011:2: rule__InvariantConstraintCS__Alternatives_3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6169:1: ( rule__InvariantConstraintCS__Alternatives_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6169:2: rule__InvariantConstraintCS__Alternatives_3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Alternatives_3_in_rule__InvariantConstraintCS__Group__3__Impl13412);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Alternatives_3_in_rule__InvariantConstraintCS__Group__3__Impl13573);
             rule__InvariantConstraintCS__Alternatives_3();
 
             state._fsp--;
@@ -21102,21 +21218,21 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6029:1: rule__InvariantConstraintCS__Group_2__0 : rule__InvariantConstraintCS__Group_2__0__Impl rule__InvariantConstraintCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6187:1: rule__InvariantConstraintCS__Group_2__0 : rule__InvariantConstraintCS__Group_2__0__Impl rule__InvariantConstraintCS__Group_2__1 ;
     public final void rule__InvariantConstraintCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6033:1: ( rule__InvariantConstraintCS__Group_2__0__Impl rule__InvariantConstraintCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6034:2: rule__InvariantConstraintCS__Group_2__0__Impl rule__InvariantConstraintCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6191:1: ( rule__InvariantConstraintCS__Group_2__0__Impl rule__InvariantConstraintCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6192:2: rule__InvariantConstraintCS__Group_2__0__Impl rule__InvariantConstraintCS__Group_2__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2__0__Impl_in_rule__InvariantConstraintCS__Group_2__013450);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2__0__Impl_in_rule__InvariantConstraintCS__Group_2__013611);
             rule__InvariantConstraintCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2__1_in_rule__InvariantConstraintCS__Group_2__013453);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2__1_in_rule__InvariantConstraintCS__Group_2__013614);
             rule__InvariantConstraintCS__Group_2__1();
 
             state._fsp--;
@@ -21140,25 +21256,25 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6041:1: rule__InvariantConstraintCS__Group_2__0__Impl : ( ( rule__InvariantConstraintCS__NameAssignment_2_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6199:1: rule__InvariantConstraintCS__Group_2__0__Impl : ( ( rule__InvariantConstraintCS__NameAssignment_2_0 ) ) ;
     public final void rule__InvariantConstraintCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6045:1: ( ( ( rule__InvariantConstraintCS__NameAssignment_2_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6046:1: ( ( rule__InvariantConstraintCS__NameAssignment_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6203:1: ( ( ( rule__InvariantConstraintCS__NameAssignment_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6204:1: ( ( rule__InvariantConstraintCS__NameAssignment_2_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6046:1: ( ( rule__InvariantConstraintCS__NameAssignment_2_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6047:1: ( rule__InvariantConstraintCS__NameAssignment_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6204:1: ( ( rule__InvariantConstraintCS__NameAssignment_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6205:1: ( rule__InvariantConstraintCS__NameAssignment_2_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getNameAssignment_2_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6048:1: ( rule__InvariantConstraintCS__NameAssignment_2_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6048:2: rule__InvariantConstraintCS__NameAssignment_2_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6206:1: ( rule__InvariantConstraintCS__NameAssignment_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6206:2: rule__InvariantConstraintCS__NameAssignment_2_0
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__NameAssignment_2_0_in_rule__InvariantConstraintCS__Group_2__0__Impl13480);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__NameAssignment_2_0_in_rule__InvariantConstraintCS__Group_2__0__Impl13641);
             rule__InvariantConstraintCS__NameAssignment_2_0();
 
             state._fsp--;
@@ -21191,16 +21307,16 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6058:1: rule__InvariantConstraintCS__Group_2__1 : rule__InvariantConstraintCS__Group_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6216:1: rule__InvariantConstraintCS__Group_2__1 : rule__InvariantConstraintCS__Group_2__1__Impl ;
     public final void rule__InvariantConstraintCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6062:1: ( rule__InvariantConstraintCS__Group_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6063:2: rule__InvariantConstraintCS__Group_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6220:1: ( rule__InvariantConstraintCS__Group_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6221:2: rule__InvariantConstraintCS__Group_2__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2__1__Impl_in_rule__InvariantConstraintCS__Group_2__113510);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2__1__Impl_in_rule__InvariantConstraintCS__Group_2__113671);
             rule__InvariantConstraintCS__Group_2__1__Impl();
 
             state._fsp--;
@@ -21224,33 +21340,33 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6069:1: rule__InvariantConstraintCS__Group_2__1__Impl : ( ( rule__InvariantConstraintCS__Group_2_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6227:1: rule__InvariantConstraintCS__Group_2__1__Impl : ( ( rule__InvariantConstraintCS__Group_2_1__0 )? ) ;
     public final void rule__InvariantConstraintCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6073:1: ( ( ( rule__InvariantConstraintCS__Group_2_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6074:1: ( ( rule__InvariantConstraintCS__Group_2_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6231:1: ( ( ( rule__InvariantConstraintCS__Group_2_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6232:1: ( ( rule__InvariantConstraintCS__Group_2_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6074:1: ( ( rule__InvariantConstraintCS__Group_2_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6075:1: ( rule__InvariantConstraintCS__Group_2_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6232:1: ( ( rule__InvariantConstraintCS__Group_2_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6233:1: ( rule__InvariantConstraintCS__Group_2_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getGroup_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6076:1: ( rule__InvariantConstraintCS__Group_2_1__0 )?
-            int alt82=2;
-            int LA82_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6234:1: ( rule__InvariantConstraintCS__Group_2_1__0 )?
+            int alt97=2;
+            int LA97_0 = input.LA(1);
 
-            if ( (LA82_0==95) ) {
-                alt82=1;
+            if ( (LA97_0==104) ) {
+                alt97=1;
             }
-            switch (alt82) {
+            switch (alt97) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6076:2: rule__InvariantConstraintCS__Group_2_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6234:2: rule__InvariantConstraintCS__Group_2_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__0_in_rule__InvariantConstraintCS__Group_2__1__Impl13537);
+                    pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__0_in_rule__InvariantConstraintCS__Group_2__1__Impl13698);
                     rule__InvariantConstraintCS__Group_2_1__0();
 
                     state._fsp--;
@@ -21286,21 +21402,21 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6090:1: rule__InvariantConstraintCS__Group_2_1__0 : rule__InvariantConstraintCS__Group_2_1__0__Impl rule__InvariantConstraintCS__Group_2_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6248:1: rule__InvariantConstraintCS__Group_2_1__0 : rule__InvariantConstraintCS__Group_2_1__0__Impl rule__InvariantConstraintCS__Group_2_1__1 ;
     public final void rule__InvariantConstraintCS__Group_2_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6094:1: ( rule__InvariantConstraintCS__Group_2_1__0__Impl rule__InvariantConstraintCS__Group_2_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6095:2: rule__InvariantConstraintCS__Group_2_1__0__Impl rule__InvariantConstraintCS__Group_2_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6252:1: ( rule__InvariantConstraintCS__Group_2_1__0__Impl rule__InvariantConstraintCS__Group_2_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6253:2: rule__InvariantConstraintCS__Group_2_1__0__Impl rule__InvariantConstraintCS__Group_2_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__0__Impl_in_rule__InvariantConstraintCS__Group_2_1__013572);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__0__Impl_in_rule__InvariantConstraintCS__Group_2_1__013733);
             rule__InvariantConstraintCS__Group_2_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__1_in_rule__InvariantConstraintCS__Group_2_1__013575);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__1_in_rule__InvariantConstraintCS__Group_2_1__013736);
             rule__InvariantConstraintCS__Group_2_1__1();
 
             state._fsp--;
@@ -21324,22 +21440,22 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6102:1: rule__InvariantConstraintCS__Group_2_1__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6260:1: rule__InvariantConstraintCS__Group_2_1__0__Impl : ( '(' ) ;
     public final void rule__InvariantConstraintCS__Group_2_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6106:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6107:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6264:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6265:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6107:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6108:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6265:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6266:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getLeftParenthesisKeyword_2_1_0()); 
             }
-            match(input,95,FollowSets000.FOLLOW_95_in_rule__InvariantConstraintCS__Group_2_1__0__Impl13603); if (state.failed) return ;
+            match(input,104,FollowSets000.FOLLOW_104_in_rule__InvariantConstraintCS__Group_2_1__0__Impl13764); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvariantConstraintCSAccess().getLeftParenthesisKeyword_2_1_0()); 
             }
@@ -21365,21 +21481,21 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6121:1: rule__InvariantConstraintCS__Group_2_1__1 : rule__InvariantConstraintCS__Group_2_1__1__Impl rule__InvariantConstraintCS__Group_2_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6279:1: rule__InvariantConstraintCS__Group_2_1__1 : rule__InvariantConstraintCS__Group_2_1__1__Impl rule__InvariantConstraintCS__Group_2_1__2 ;
     public final void rule__InvariantConstraintCS__Group_2_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6125:1: ( rule__InvariantConstraintCS__Group_2_1__1__Impl rule__InvariantConstraintCS__Group_2_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6126:2: rule__InvariantConstraintCS__Group_2_1__1__Impl rule__InvariantConstraintCS__Group_2_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6283:1: ( rule__InvariantConstraintCS__Group_2_1__1__Impl rule__InvariantConstraintCS__Group_2_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6284:2: rule__InvariantConstraintCS__Group_2_1__1__Impl rule__InvariantConstraintCS__Group_2_1__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__1__Impl_in_rule__InvariantConstraintCS__Group_2_1__113634);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__1__Impl_in_rule__InvariantConstraintCS__Group_2_1__113795);
             rule__InvariantConstraintCS__Group_2_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__2_in_rule__InvariantConstraintCS__Group_2_1__113637);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__2_in_rule__InvariantConstraintCS__Group_2_1__113798);
             rule__InvariantConstraintCS__Group_2_1__2();
 
             state._fsp--;
@@ -21403,25 +21519,25 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6133:1: rule__InvariantConstraintCS__Group_2_1__1__Impl : ( ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6291:1: rule__InvariantConstraintCS__Group_2_1__1__Impl : ( ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 ) ) ;
     public final void rule__InvariantConstraintCS__Group_2_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6137:1: ( ( ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6138:1: ( ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6295:1: ( ( ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6296:1: ( ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6138:1: ( ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6139:1: ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6296:1: ( ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6297:1: ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getOwnedMessageSpecificationAssignment_2_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6140:1: ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6140:2: rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6298:1: ( rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6298:2: rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1_in_rule__InvariantConstraintCS__Group_2_1__1__Impl13664);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1_in_rule__InvariantConstraintCS__Group_2_1__1__Impl13825);
             rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1();
 
             state._fsp--;
@@ -21454,16 +21570,16 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6150:1: rule__InvariantConstraintCS__Group_2_1__2 : rule__InvariantConstraintCS__Group_2_1__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6308:1: rule__InvariantConstraintCS__Group_2_1__2 : rule__InvariantConstraintCS__Group_2_1__2__Impl ;
     public final void rule__InvariantConstraintCS__Group_2_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6154:1: ( rule__InvariantConstraintCS__Group_2_1__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6155:2: rule__InvariantConstraintCS__Group_2_1__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6312:1: ( rule__InvariantConstraintCS__Group_2_1__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6313:2: rule__InvariantConstraintCS__Group_2_1__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__2__Impl_in_rule__InvariantConstraintCS__Group_2_1__213694);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_2_1__2__Impl_in_rule__InvariantConstraintCS__Group_2_1__213855);
             rule__InvariantConstraintCS__Group_2_1__2__Impl();
 
             state._fsp--;
@@ -21487,22 +21603,22 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_2_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6161:1: rule__InvariantConstraintCS__Group_2_1__2__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6319:1: rule__InvariantConstraintCS__Group_2_1__2__Impl : ( ')' ) ;
     public final void rule__InvariantConstraintCS__Group_2_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6165:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6166:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6323:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6324:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6166:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6167:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6324:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6325:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getRightParenthesisKeyword_2_1_2()); 
             }
-            match(input,96,FollowSets000.FOLLOW_96_in_rule__InvariantConstraintCS__Group_2_1__2__Impl13722); if (state.failed) return ;
+            match(input,105,FollowSets000.FOLLOW_105_in_rule__InvariantConstraintCS__Group_2_1__2__Impl13883); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvariantConstraintCSAccess().getRightParenthesisKeyword_2_1_2()); 
             }
@@ -21528,21 +21644,21 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_3_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6186:1: rule__InvariantConstraintCS__Group_3_0__0 : rule__InvariantConstraintCS__Group_3_0__0__Impl rule__InvariantConstraintCS__Group_3_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6344:1: rule__InvariantConstraintCS__Group_3_0__0 : rule__InvariantConstraintCS__Group_3_0__0__Impl rule__InvariantConstraintCS__Group_3_0__1 ;
     public final void rule__InvariantConstraintCS__Group_3_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6190:1: ( rule__InvariantConstraintCS__Group_3_0__0__Impl rule__InvariantConstraintCS__Group_3_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6191:2: rule__InvariantConstraintCS__Group_3_0__0__Impl rule__InvariantConstraintCS__Group_3_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6348:1: ( rule__InvariantConstraintCS__Group_3_0__0__Impl rule__InvariantConstraintCS__Group_3_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6349:2: rule__InvariantConstraintCS__Group_3_0__0__Impl rule__InvariantConstraintCS__Group_3_0__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__0__Impl_in_rule__InvariantConstraintCS__Group_3_0__013759);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__0__Impl_in_rule__InvariantConstraintCS__Group_3_0__013920);
             rule__InvariantConstraintCS__Group_3_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__1_in_rule__InvariantConstraintCS__Group_3_0__013762);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__1_in_rule__InvariantConstraintCS__Group_3_0__013923);
             rule__InvariantConstraintCS__Group_3_0__1();
 
             state._fsp--;
@@ -21566,22 +21682,22 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_3_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6198:1: rule__InvariantConstraintCS__Group_3_0__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6356:1: rule__InvariantConstraintCS__Group_3_0__0__Impl : ( ':' ) ;
     public final void rule__InvariantConstraintCS__Group_3_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6202:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6203:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6360:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6361:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6203:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6204:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6361:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6362:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getColonKeyword_3_0_0()); 
             }
-            match(input,97,FollowSets000.FOLLOW_97_in_rule__InvariantConstraintCS__Group_3_0__0__Impl13790); if (state.failed) return ;
+            match(input,106,FollowSets000.FOLLOW_106_in_rule__InvariantConstraintCS__Group_3_0__0__Impl13951); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvariantConstraintCSAccess().getColonKeyword_3_0_0()); 
             }
@@ -21607,21 +21723,21 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_3_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6217:1: rule__InvariantConstraintCS__Group_3_0__1 : rule__InvariantConstraintCS__Group_3_0__1__Impl rule__InvariantConstraintCS__Group_3_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6375:1: rule__InvariantConstraintCS__Group_3_0__1 : rule__InvariantConstraintCS__Group_3_0__1__Impl rule__InvariantConstraintCS__Group_3_0__2 ;
     public final void rule__InvariantConstraintCS__Group_3_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6221:1: ( rule__InvariantConstraintCS__Group_3_0__1__Impl rule__InvariantConstraintCS__Group_3_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6222:2: rule__InvariantConstraintCS__Group_3_0__1__Impl rule__InvariantConstraintCS__Group_3_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6379:1: ( rule__InvariantConstraintCS__Group_3_0__1__Impl rule__InvariantConstraintCS__Group_3_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6380:2: rule__InvariantConstraintCS__Group_3_0__1__Impl rule__InvariantConstraintCS__Group_3_0__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__1__Impl_in_rule__InvariantConstraintCS__Group_3_0__113821);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__1__Impl_in_rule__InvariantConstraintCS__Group_3_0__113982);
             rule__InvariantConstraintCS__Group_3_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__2_in_rule__InvariantConstraintCS__Group_3_0__113824);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__2_in_rule__InvariantConstraintCS__Group_3_0__113985);
             rule__InvariantConstraintCS__Group_3_0__2();
 
             state._fsp--;
@@ -21645,33 +21761,33 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_3_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6229:1: rule__InvariantConstraintCS__Group_3_0__1__Impl : ( ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6387:1: rule__InvariantConstraintCS__Group_3_0__1__Impl : ( ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )? ) ;
     public final void rule__InvariantConstraintCS__Group_3_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6233:1: ( ( ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6234:1: ( ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6391:1: ( ( ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6392:1: ( ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6234:1: ( ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6235:1: ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6392:1: ( ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6393:1: ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getOwnedSpecificationAssignment_3_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6236:1: ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )?
-            int alt83=2;
-            int LA83_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6394:1: ( rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 )?
+            int alt98=2;
+            int LA98_0 = input.LA(1);
 
-            if ( ((LA83_0>=RULE_INT && LA83_0<=RULE_SINGLE_QUOTED_STRING)||(LA83_0>=RULE_SIMPLE_ID && LA83_0<=RULE_UNQUOTED_STRING)||(LA83_0>=17 && LA83_0<=52)||(LA83_0>=55 && LA83_0<=63)||(LA83_0>=80 && LA83_0<=93)||LA83_0==95||(LA83_0>=105 && LA83_0<=107)||LA83_0==112||(LA83_0>=117 && LA83_0<=118)||(LA83_0>=131 && LA83_0<=132)) ) {
-                alt83=1;
+            if ( ((LA98_0>=RULE_INT && LA98_0<=RULE_SINGLE_QUOTED_STRING)||(LA98_0>=RULE_SIMPLE_ID && LA98_0<=RULE_UNQUOTED_STRING)||(LA98_0>=17 && LA98_0<=52)||(LA98_0>=64 && LA98_0<=72)||(LA98_0>=89 && LA98_0<=102)||LA98_0==104||(LA98_0>=114 && LA98_0<=116)||LA98_0==121||(LA98_0>=126 && LA98_0<=127)||(LA98_0>=131 && LA98_0<=132)) ) {
+                alt98=1;
             }
-            switch (alt83) {
+            switch (alt98) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6236:2: rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6394:2: rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1_in_rule__InvariantConstraintCS__Group_3_0__1__Impl13851);
+                    pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1_in_rule__InvariantConstraintCS__Group_3_0__1__Impl14012);
                     rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1();
 
                     state._fsp--;
@@ -21707,16 +21823,16 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_3_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6246:1: rule__InvariantConstraintCS__Group_3_0__2 : rule__InvariantConstraintCS__Group_3_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6404:1: rule__InvariantConstraintCS__Group_3_0__2 : rule__InvariantConstraintCS__Group_3_0__2__Impl ;
     public final void rule__InvariantConstraintCS__Group_3_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6250:1: ( rule__InvariantConstraintCS__Group_3_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6251:2: rule__InvariantConstraintCS__Group_3_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6408:1: ( rule__InvariantConstraintCS__Group_3_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6409:2: rule__InvariantConstraintCS__Group_3_0__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__2__Impl_in_rule__InvariantConstraintCS__Group_3_0__213882);
+            pushFollow(FollowSets000.FOLLOW_rule__InvariantConstraintCS__Group_3_0__2__Impl_in_rule__InvariantConstraintCS__Group_3_0__214043);
             rule__InvariantConstraintCS__Group_3_0__2__Impl();
 
             state._fsp--;
@@ -21740,22 +21856,22 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__Group_3_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6257:1: rule__InvariantConstraintCS__Group_3_0__2__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6415:1: rule__InvariantConstraintCS__Group_3_0__2__Impl : ( ';' ) ;
     public final void rule__InvariantConstraintCS__Group_3_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6261:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6262:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6419:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6420:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6262:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6263:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6420:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6421:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getSemicolonKeyword_3_0_2()); 
             }
-            match(input,53,FollowSets000.FOLLOW_53_in_rule__InvariantConstraintCS__Group_3_0__2__Impl13910); if (state.failed) return ;
+            match(input,53,FollowSets000.FOLLOW_53_in_rule__InvariantConstraintCS__Group_3_0__2__Impl14071); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvariantConstraintCSAccess().getSemicolonKeyword_3_0_2()); 
             }
@@ -21781,21 +21897,21 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6282:1: rule__PostconditionConstraintCS__Group__0 : rule__PostconditionConstraintCS__Group__0__Impl rule__PostconditionConstraintCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6440:1: rule__PostconditionConstraintCS__Group__0 : rule__PostconditionConstraintCS__Group__0__Impl rule__PostconditionConstraintCS__Group__1 ;
     public final void rule__PostconditionConstraintCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6286:1: ( rule__PostconditionConstraintCS__Group__0__Impl rule__PostconditionConstraintCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6287:2: rule__PostconditionConstraintCS__Group__0__Impl rule__PostconditionConstraintCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6444:1: ( rule__PostconditionConstraintCS__Group__0__Impl rule__PostconditionConstraintCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6445:2: rule__PostconditionConstraintCS__Group__0__Impl rule__PostconditionConstraintCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__0__Impl_in_rule__PostconditionConstraintCS__Group__013947);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__0__Impl_in_rule__PostconditionConstraintCS__Group__014108);
             rule__PostconditionConstraintCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__1_in_rule__PostconditionConstraintCS__Group__013950);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__1_in_rule__PostconditionConstraintCS__Group__014111);
             rule__PostconditionConstraintCS__Group__1();
 
             state._fsp--;
@@ -21819,25 +21935,25 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6294:1: rule__PostconditionConstraintCS__Group__0__Impl : ( ( rule__PostconditionConstraintCS__StereotypeAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6452:1: rule__PostconditionConstraintCS__Group__0__Impl : ( ( rule__PostconditionConstraintCS__StereotypeAssignment_0 ) ) ;
     public final void rule__PostconditionConstraintCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6298:1: ( ( ( rule__PostconditionConstraintCS__StereotypeAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6299:1: ( ( rule__PostconditionConstraintCS__StereotypeAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6456:1: ( ( ( rule__PostconditionConstraintCS__StereotypeAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6457:1: ( ( rule__PostconditionConstraintCS__StereotypeAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6299:1: ( ( rule__PostconditionConstraintCS__StereotypeAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6300:1: ( rule__PostconditionConstraintCS__StereotypeAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6457:1: ( ( rule__PostconditionConstraintCS__StereotypeAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6458:1: ( rule__PostconditionConstraintCS__StereotypeAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getStereotypeAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6301:1: ( rule__PostconditionConstraintCS__StereotypeAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6301:2: rule__PostconditionConstraintCS__StereotypeAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6459:1: ( rule__PostconditionConstraintCS__StereotypeAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6459:2: rule__PostconditionConstraintCS__StereotypeAssignment_0
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__StereotypeAssignment_0_in_rule__PostconditionConstraintCS__Group__0__Impl13977);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__StereotypeAssignment_0_in_rule__PostconditionConstraintCS__Group__0__Impl14138);
             rule__PostconditionConstraintCS__StereotypeAssignment_0();
 
             state._fsp--;
@@ -21870,21 +21986,21 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6311:1: rule__PostconditionConstraintCS__Group__1 : rule__PostconditionConstraintCS__Group__1__Impl rule__PostconditionConstraintCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6469:1: rule__PostconditionConstraintCS__Group__1 : rule__PostconditionConstraintCS__Group__1__Impl rule__PostconditionConstraintCS__Group__2 ;
     public final void rule__PostconditionConstraintCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6315:1: ( rule__PostconditionConstraintCS__Group__1__Impl rule__PostconditionConstraintCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6316:2: rule__PostconditionConstraintCS__Group__1__Impl rule__PostconditionConstraintCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6473:1: ( rule__PostconditionConstraintCS__Group__1__Impl rule__PostconditionConstraintCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6474:2: rule__PostconditionConstraintCS__Group__1__Impl rule__PostconditionConstraintCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__1__Impl_in_rule__PostconditionConstraintCS__Group__114007);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__1__Impl_in_rule__PostconditionConstraintCS__Group__114168);
             rule__PostconditionConstraintCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__2_in_rule__PostconditionConstraintCS__Group__114010);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__2_in_rule__PostconditionConstraintCS__Group__114171);
             rule__PostconditionConstraintCS__Group__2();
 
             state._fsp--;
@@ -21908,33 +22024,33 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6323:1: rule__PostconditionConstraintCS__Group__1__Impl : ( ( rule__PostconditionConstraintCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6481:1: rule__PostconditionConstraintCS__Group__1__Impl : ( ( rule__PostconditionConstraintCS__Group_1__0 )? ) ;
     public final void rule__PostconditionConstraintCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6327:1: ( ( ( rule__PostconditionConstraintCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6328:1: ( ( rule__PostconditionConstraintCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6485:1: ( ( ( rule__PostconditionConstraintCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6486:1: ( ( rule__PostconditionConstraintCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6328:1: ( ( rule__PostconditionConstraintCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6329:1: ( rule__PostconditionConstraintCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6486:1: ( ( rule__PostconditionConstraintCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6487:1: ( rule__PostconditionConstraintCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6330:1: ( rule__PostconditionConstraintCS__Group_1__0 )?
-            int alt84=2;
-            int LA84_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6488:1: ( rule__PostconditionConstraintCS__Group_1__0 )?
+            int alt99=2;
+            int LA99_0 = input.LA(1);
 
-            if ( ((LA84_0>=RULE_SIMPLE_ID && LA84_0<=RULE_ESCAPED_ID)||(LA84_0>=17 && LA84_0<=52)||(LA84_0>=55 && LA84_0<=60)) ) {
-                alt84=1;
+            if ( ((LA99_0>=RULE_SIMPLE_ID && LA99_0<=RULE_ESCAPED_ID)||(LA99_0>=17 && LA99_0<=52)||(LA99_0>=64 && LA99_0<=69)) ) {
+                alt99=1;
             }
-            switch (alt84) {
+            switch (alt99) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6330:2: rule__PostconditionConstraintCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6488:2: rule__PostconditionConstraintCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1__0_in_rule__PostconditionConstraintCS__Group__1__Impl14037);
+                    pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1__0_in_rule__PostconditionConstraintCS__Group__1__Impl14198);
                     rule__PostconditionConstraintCS__Group_1__0();
 
                     state._fsp--;
@@ -21970,21 +22086,21 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6340:1: rule__PostconditionConstraintCS__Group__2 : rule__PostconditionConstraintCS__Group__2__Impl rule__PostconditionConstraintCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6498:1: rule__PostconditionConstraintCS__Group__2 : rule__PostconditionConstraintCS__Group__2__Impl rule__PostconditionConstraintCS__Group__3 ;
     public final void rule__PostconditionConstraintCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6344:1: ( rule__PostconditionConstraintCS__Group__2__Impl rule__PostconditionConstraintCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6345:2: rule__PostconditionConstraintCS__Group__2__Impl rule__PostconditionConstraintCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6502:1: ( rule__PostconditionConstraintCS__Group__2__Impl rule__PostconditionConstraintCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6503:2: rule__PostconditionConstraintCS__Group__2__Impl rule__PostconditionConstraintCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__2__Impl_in_rule__PostconditionConstraintCS__Group__214068);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__2__Impl_in_rule__PostconditionConstraintCS__Group__214229);
             rule__PostconditionConstraintCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__3_in_rule__PostconditionConstraintCS__Group__214071);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__3_in_rule__PostconditionConstraintCS__Group__214232);
             rule__PostconditionConstraintCS__Group__3();
 
             state._fsp--;
@@ -22008,22 +22124,22 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6352:1: rule__PostconditionConstraintCS__Group__2__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6510:1: rule__PostconditionConstraintCS__Group__2__Impl : ( ':' ) ;
     public final void rule__PostconditionConstraintCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6356:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6357:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6514:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6515:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6357:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6358:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6515:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6516:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getColonKeyword_2()); 
             }
-            match(input,97,FollowSets000.FOLLOW_97_in_rule__PostconditionConstraintCS__Group__2__Impl14099); if (state.failed) return ;
+            match(input,106,FollowSets000.FOLLOW_106_in_rule__PostconditionConstraintCS__Group__2__Impl14260); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPostconditionConstraintCSAccess().getColonKeyword_2()); 
             }
@@ -22049,21 +22165,21 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6371:1: rule__PostconditionConstraintCS__Group__3 : rule__PostconditionConstraintCS__Group__3__Impl rule__PostconditionConstraintCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6529:1: rule__PostconditionConstraintCS__Group__3 : rule__PostconditionConstraintCS__Group__3__Impl rule__PostconditionConstraintCS__Group__4 ;
     public final void rule__PostconditionConstraintCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6375:1: ( rule__PostconditionConstraintCS__Group__3__Impl rule__PostconditionConstraintCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6376:2: rule__PostconditionConstraintCS__Group__3__Impl rule__PostconditionConstraintCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6533:1: ( rule__PostconditionConstraintCS__Group__3__Impl rule__PostconditionConstraintCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6534:2: rule__PostconditionConstraintCS__Group__3__Impl rule__PostconditionConstraintCS__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__3__Impl_in_rule__PostconditionConstraintCS__Group__314130);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__3__Impl_in_rule__PostconditionConstraintCS__Group__314291);
             rule__PostconditionConstraintCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__4_in_rule__PostconditionConstraintCS__Group__314133);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__4_in_rule__PostconditionConstraintCS__Group__314294);
             rule__PostconditionConstraintCS__Group__4();
 
             state._fsp--;
@@ -22087,33 +22203,33 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6383:1: rule__PostconditionConstraintCS__Group__3__Impl : ( ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6541:1: rule__PostconditionConstraintCS__Group__3__Impl : ( ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )? ) ;
     public final void rule__PostconditionConstraintCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6387:1: ( ( ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6388:1: ( ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6545:1: ( ( ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6546:1: ( ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6388:1: ( ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6389:1: ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6546:1: ( ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6547:1: ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getOwnedSpecificationAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6390:1: ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )?
-            int alt85=2;
-            int LA85_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6548:1: ( rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 )?
+            int alt100=2;
+            int LA100_0 = input.LA(1);
 
-            if ( ((LA85_0>=RULE_INT && LA85_0<=RULE_SINGLE_QUOTED_STRING)||(LA85_0>=RULE_SIMPLE_ID && LA85_0<=RULE_UNQUOTED_STRING)||(LA85_0>=17 && LA85_0<=52)||(LA85_0>=55 && LA85_0<=63)||(LA85_0>=80 && LA85_0<=93)||LA85_0==95||(LA85_0>=105 && LA85_0<=107)||LA85_0==112||(LA85_0>=117 && LA85_0<=118)||(LA85_0>=131 && LA85_0<=132)) ) {
-                alt85=1;
+            if ( ((LA100_0>=RULE_INT && LA100_0<=RULE_SINGLE_QUOTED_STRING)||(LA100_0>=RULE_SIMPLE_ID && LA100_0<=RULE_UNQUOTED_STRING)||(LA100_0>=17 && LA100_0<=52)||(LA100_0>=64 && LA100_0<=72)||(LA100_0>=89 && LA100_0<=102)||LA100_0==104||(LA100_0>=114 && LA100_0<=116)||LA100_0==121||(LA100_0>=126 && LA100_0<=127)||(LA100_0>=131 && LA100_0<=132)) ) {
+                alt100=1;
             }
-            switch (alt85) {
+            switch (alt100) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6390:2: rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6548:2: rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3_in_rule__PostconditionConstraintCS__Group__3__Impl14160);
+                    pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3_in_rule__PostconditionConstraintCS__Group__3__Impl14321);
                     rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3();
 
                     state._fsp--;
@@ -22149,16 +22265,16 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6400:1: rule__PostconditionConstraintCS__Group__4 : rule__PostconditionConstraintCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6558:1: rule__PostconditionConstraintCS__Group__4 : rule__PostconditionConstraintCS__Group__4__Impl ;
     public final void rule__PostconditionConstraintCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6404:1: ( rule__PostconditionConstraintCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6405:2: rule__PostconditionConstraintCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6562:1: ( rule__PostconditionConstraintCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6563:2: rule__PostconditionConstraintCS__Group__4__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__4__Impl_in_rule__PostconditionConstraintCS__Group__414191);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group__4__Impl_in_rule__PostconditionConstraintCS__Group__414352);
             rule__PostconditionConstraintCS__Group__4__Impl();
 
             state._fsp--;
@@ -22182,22 +22298,22 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6411:1: rule__PostconditionConstraintCS__Group__4__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6569:1: rule__PostconditionConstraintCS__Group__4__Impl : ( ';' ) ;
     public final void rule__PostconditionConstraintCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6415:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6416:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6573:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6574:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6416:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6417:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6574:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6575:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getSemicolonKeyword_4()); 
             }
-            match(input,53,FollowSets000.FOLLOW_53_in_rule__PostconditionConstraintCS__Group__4__Impl14219); if (state.failed) return ;
+            match(input,53,FollowSets000.FOLLOW_53_in_rule__PostconditionConstraintCS__Group__4__Impl14380); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPostconditionConstraintCSAccess().getSemicolonKeyword_4()); 
             }
@@ -22223,21 +22339,21 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6440:1: rule__PostconditionConstraintCS__Group_1__0 : rule__PostconditionConstraintCS__Group_1__0__Impl rule__PostconditionConstraintCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6598:1: rule__PostconditionConstraintCS__Group_1__0 : rule__PostconditionConstraintCS__Group_1__0__Impl rule__PostconditionConstraintCS__Group_1__1 ;
     public final void rule__PostconditionConstraintCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6444:1: ( rule__PostconditionConstraintCS__Group_1__0__Impl rule__PostconditionConstraintCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6445:2: rule__PostconditionConstraintCS__Group_1__0__Impl rule__PostconditionConstraintCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6602:1: ( rule__PostconditionConstraintCS__Group_1__0__Impl rule__PostconditionConstraintCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6603:2: rule__PostconditionConstraintCS__Group_1__0__Impl rule__PostconditionConstraintCS__Group_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1__0__Impl_in_rule__PostconditionConstraintCS__Group_1__014260);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1__0__Impl_in_rule__PostconditionConstraintCS__Group_1__014421);
             rule__PostconditionConstraintCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1__1_in_rule__PostconditionConstraintCS__Group_1__014263);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1__1_in_rule__PostconditionConstraintCS__Group_1__014424);
             rule__PostconditionConstraintCS__Group_1__1();
 
             state._fsp--;
@@ -22261,25 +22377,25 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6452:1: rule__PostconditionConstraintCS__Group_1__0__Impl : ( ( rule__PostconditionConstraintCS__NameAssignment_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6610:1: rule__PostconditionConstraintCS__Group_1__0__Impl : ( ( rule__PostconditionConstraintCS__NameAssignment_1_0 ) ) ;
     public final void rule__PostconditionConstraintCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6456:1: ( ( ( rule__PostconditionConstraintCS__NameAssignment_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6457:1: ( ( rule__PostconditionConstraintCS__NameAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6614:1: ( ( ( rule__PostconditionConstraintCS__NameAssignment_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6615:1: ( ( rule__PostconditionConstraintCS__NameAssignment_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6457:1: ( ( rule__PostconditionConstraintCS__NameAssignment_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6458:1: ( rule__PostconditionConstraintCS__NameAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6615:1: ( ( rule__PostconditionConstraintCS__NameAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6616:1: ( rule__PostconditionConstraintCS__NameAssignment_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getNameAssignment_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6459:1: ( rule__PostconditionConstraintCS__NameAssignment_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6459:2: rule__PostconditionConstraintCS__NameAssignment_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6617:1: ( rule__PostconditionConstraintCS__NameAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6617:2: rule__PostconditionConstraintCS__NameAssignment_1_0
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__NameAssignment_1_0_in_rule__PostconditionConstraintCS__Group_1__0__Impl14290);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__NameAssignment_1_0_in_rule__PostconditionConstraintCS__Group_1__0__Impl14451);
             rule__PostconditionConstraintCS__NameAssignment_1_0();
 
             state._fsp--;
@@ -22312,16 +22428,16 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6469:1: rule__PostconditionConstraintCS__Group_1__1 : rule__PostconditionConstraintCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6627:1: rule__PostconditionConstraintCS__Group_1__1 : rule__PostconditionConstraintCS__Group_1__1__Impl ;
     public final void rule__PostconditionConstraintCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6473:1: ( rule__PostconditionConstraintCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6474:2: rule__PostconditionConstraintCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6631:1: ( rule__PostconditionConstraintCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6632:2: rule__PostconditionConstraintCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1__1__Impl_in_rule__PostconditionConstraintCS__Group_1__114320);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1__1__Impl_in_rule__PostconditionConstraintCS__Group_1__114481);
             rule__PostconditionConstraintCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -22345,33 +22461,33 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6480:1: rule__PostconditionConstraintCS__Group_1__1__Impl : ( ( rule__PostconditionConstraintCS__Group_1_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6638:1: rule__PostconditionConstraintCS__Group_1__1__Impl : ( ( rule__PostconditionConstraintCS__Group_1_1__0 )? ) ;
     public final void rule__PostconditionConstraintCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6484:1: ( ( ( rule__PostconditionConstraintCS__Group_1_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6485:1: ( ( rule__PostconditionConstraintCS__Group_1_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6642:1: ( ( ( rule__PostconditionConstraintCS__Group_1_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6643:1: ( ( rule__PostconditionConstraintCS__Group_1_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6485:1: ( ( rule__PostconditionConstraintCS__Group_1_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6486:1: ( rule__PostconditionConstraintCS__Group_1_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6643:1: ( ( rule__PostconditionConstraintCS__Group_1_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6644:1: ( rule__PostconditionConstraintCS__Group_1_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getGroup_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6487:1: ( rule__PostconditionConstraintCS__Group_1_1__0 )?
-            int alt86=2;
-            int LA86_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6645:1: ( rule__PostconditionConstraintCS__Group_1_1__0 )?
+            int alt101=2;
+            int LA101_0 = input.LA(1);
 
-            if ( (LA86_0==95) ) {
-                alt86=1;
+            if ( (LA101_0==104) ) {
+                alt101=1;
             }
-            switch (alt86) {
+            switch (alt101) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6487:2: rule__PostconditionConstraintCS__Group_1_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6645:2: rule__PostconditionConstraintCS__Group_1_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__0_in_rule__PostconditionConstraintCS__Group_1__1__Impl14347);
+                    pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__0_in_rule__PostconditionConstraintCS__Group_1__1__Impl14508);
                     rule__PostconditionConstraintCS__Group_1_1__0();
 
                     state._fsp--;
@@ -22407,21 +22523,21 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6501:1: rule__PostconditionConstraintCS__Group_1_1__0 : rule__PostconditionConstraintCS__Group_1_1__0__Impl rule__PostconditionConstraintCS__Group_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6659:1: rule__PostconditionConstraintCS__Group_1_1__0 : rule__PostconditionConstraintCS__Group_1_1__0__Impl rule__PostconditionConstraintCS__Group_1_1__1 ;
     public final void rule__PostconditionConstraintCS__Group_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6505:1: ( rule__PostconditionConstraintCS__Group_1_1__0__Impl rule__PostconditionConstraintCS__Group_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6506:2: rule__PostconditionConstraintCS__Group_1_1__0__Impl rule__PostconditionConstraintCS__Group_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6663:1: ( rule__PostconditionConstraintCS__Group_1_1__0__Impl rule__PostconditionConstraintCS__Group_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6664:2: rule__PostconditionConstraintCS__Group_1_1__0__Impl rule__PostconditionConstraintCS__Group_1_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__0__Impl_in_rule__PostconditionConstraintCS__Group_1_1__014382);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__0__Impl_in_rule__PostconditionConstraintCS__Group_1_1__014543);
             rule__PostconditionConstraintCS__Group_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__1_in_rule__PostconditionConstraintCS__Group_1_1__014385);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__1_in_rule__PostconditionConstraintCS__Group_1_1__014546);
             rule__PostconditionConstraintCS__Group_1_1__1();
 
             state._fsp--;
@@ -22445,22 +22561,22 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6513:1: rule__PostconditionConstraintCS__Group_1_1__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6671:1: rule__PostconditionConstraintCS__Group_1_1__0__Impl : ( '(' ) ;
     public final void rule__PostconditionConstraintCS__Group_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6517:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6518:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6675:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6676:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6518:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6519:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6676:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6677:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getLeftParenthesisKeyword_1_1_0()); 
             }
-            match(input,95,FollowSets000.FOLLOW_95_in_rule__PostconditionConstraintCS__Group_1_1__0__Impl14413); if (state.failed) return ;
+            match(input,104,FollowSets000.FOLLOW_104_in_rule__PostconditionConstraintCS__Group_1_1__0__Impl14574); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPostconditionConstraintCSAccess().getLeftParenthesisKeyword_1_1_0()); 
             }
@@ -22486,21 +22602,21 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6532:1: rule__PostconditionConstraintCS__Group_1_1__1 : rule__PostconditionConstraintCS__Group_1_1__1__Impl rule__PostconditionConstraintCS__Group_1_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6690:1: rule__PostconditionConstraintCS__Group_1_1__1 : rule__PostconditionConstraintCS__Group_1_1__1__Impl rule__PostconditionConstraintCS__Group_1_1__2 ;
     public final void rule__PostconditionConstraintCS__Group_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6536:1: ( rule__PostconditionConstraintCS__Group_1_1__1__Impl rule__PostconditionConstraintCS__Group_1_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6537:2: rule__PostconditionConstraintCS__Group_1_1__1__Impl rule__PostconditionConstraintCS__Group_1_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6694:1: ( rule__PostconditionConstraintCS__Group_1_1__1__Impl rule__PostconditionConstraintCS__Group_1_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6695:2: rule__PostconditionConstraintCS__Group_1_1__1__Impl rule__PostconditionConstraintCS__Group_1_1__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__1__Impl_in_rule__PostconditionConstraintCS__Group_1_1__114444);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__1__Impl_in_rule__PostconditionConstraintCS__Group_1_1__114605);
             rule__PostconditionConstraintCS__Group_1_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__2_in_rule__PostconditionConstraintCS__Group_1_1__114447);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__2_in_rule__PostconditionConstraintCS__Group_1_1__114608);
             rule__PostconditionConstraintCS__Group_1_1__2();
 
             state._fsp--;
@@ -22524,25 +22640,25 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6544:1: rule__PostconditionConstraintCS__Group_1_1__1__Impl : ( ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6702:1: rule__PostconditionConstraintCS__Group_1_1__1__Impl : ( ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) ) ;
     public final void rule__PostconditionConstraintCS__Group_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6548:1: ( ( ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6549:1: ( ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6706:1: ( ( ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6707:1: ( ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6549:1: ( ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6550:1: ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6707:1: ( ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6708:1: ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getOwnedMessageSpecificationAssignment_1_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6551:1: ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6551:2: rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6709:1: ( rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6709:2: rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1_in_rule__PostconditionConstraintCS__Group_1_1__1__Impl14474);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1_in_rule__PostconditionConstraintCS__Group_1_1__1__Impl14635);
             rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1();
 
             state._fsp--;
@@ -22575,16 +22691,16 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6561:1: rule__PostconditionConstraintCS__Group_1_1__2 : rule__PostconditionConstraintCS__Group_1_1__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6719:1: rule__PostconditionConstraintCS__Group_1_1__2 : rule__PostconditionConstraintCS__Group_1_1__2__Impl ;
     public final void rule__PostconditionConstraintCS__Group_1_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6565:1: ( rule__PostconditionConstraintCS__Group_1_1__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6566:2: rule__PostconditionConstraintCS__Group_1_1__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6723:1: ( rule__PostconditionConstraintCS__Group_1_1__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6724:2: rule__PostconditionConstraintCS__Group_1_1__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__2__Impl_in_rule__PostconditionConstraintCS__Group_1_1__214504);
+            pushFollow(FollowSets000.FOLLOW_rule__PostconditionConstraintCS__Group_1_1__2__Impl_in_rule__PostconditionConstraintCS__Group_1_1__214665);
             rule__PostconditionConstraintCS__Group_1_1__2__Impl();
 
             state._fsp--;
@@ -22608,22 +22724,22 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__Group_1_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6572:1: rule__PostconditionConstraintCS__Group_1_1__2__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6730:1: rule__PostconditionConstraintCS__Group_1_1__2__Impl : ( ')' ) ;
     public final void rule__PostconditionConstraintCS__Group_1_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6576:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6577:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6734:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6735:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6577:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6578:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6735:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6736:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getRightParenthesisKeyword_1_1_2()); 
             }
-            match(input,96,FollowSets000.FOLLOW_96_in_rule__PostconditionConstraintCS__Group_1_1__2__Impl14532); if (state.failed) return ;
+            match(input,105,FollowSets000.FOLLOW_105_in_rule__PostconditionConstraintCS__Group_1_1__2__Impl14693); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPostconditionConstraintCSAccess().getRightParenthesisKeyword_1_1_2()); 
             }
@@ -22649,21 +22765,21 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6597:1: rule__PreconditionConstraintCS__Group__0 : rule__PreconditionConstraintCS__Group__0__Impl rule__PreconditionConstraintCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6755:1: rule__PreconditionConstraintCS__Group__0 : rule__PreconditionConstraintCS__Group__0__Impl rule__PreconditionConstraintCS__Group__1 ;
     public final void rule__PreconditionConstraintCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6601:1: ( rule__PreconditionConstraintCS__Group__0__Impl rule__PreconditionConstraintCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6602:2: rule__PreconditionConstraintCS__Group__0__Impl rule__PreconditionConstraintCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6759:1: ( rule__PreconditionConstraintCS__Group__0__Impl rule__PreconditionConstraintCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6760:2: rule__PreconditionConstraintCS__Group__0__Impl rule__PreconditionConstraintCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__0__Impl_in_rule__PreconditionConstraintCS__Group__014569);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__0__Impl_in_rule__PreconditionConstraintCS__Group__014730);
             rule__PreconditionConstraintCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__1_in_rule__PreconditionConstraintCS__Group__014572);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__1_in_rule__PreconditionConstraintCS__Group__014733);
             rule__PreconditionConstraintCS__Group__1();
 
             state._fsp--;
@@ -22687,25 +22803,25 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6609:1: rule__PreconditionConstraintCS__Group__0__Impl : ( ( rule__PreconditionConstraintCS__StereotypeAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6767:1: rule__PreconditionConstraintCS__Group__0__Impl : ( ( rule__PreconditionConstraintCS__StereotypeAssignment_0 ) ) ;
     public final void rule__PreconditionConstraintCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6613:1: ( ( ( rule__PreconditionConstraintCS__StereotypeAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6614:1: ( ( rule__PreconditionConstraintCS__StereotypeAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6771:1: ( ( ( rule__PreconditionConstraintCS__StereotypeAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6772:1: ( ( rule__PreconditionConstraintCS__StereotypeAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6614:1: ( ( rule__PreconditionConstraintCS__StereotypeAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6615:1: ( rule__PreconditionConstraintCS__StereotypeAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6772:1: ( ( rule__PreconditionConstraintCS__StereotypeAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6773:1: ( rule__PreconditionConstraintCS__StereotypeAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getStereotypeAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6616:1: ( rule__PreconditionConstraintCS__StereotypeAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6616:2: rule__PreconditionConstraintCS__StereotypeAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6774:1: ( rule__PreconditionConstraintCS__StereotypeAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6774:2: rule__PreconditionConstraintCS__StereotypeAssignment_0
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__StereotypeAssignment_0_in_rule__PreconditionConstraintCS__Group__0__Impl14599);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__StereotypeAssignment_0_in_rule__PreconditionConstraintCS__Group__0__Impl14760);
             rule__PreconditionConstraintCS__StereotypeAssignment_0();
 
             state._fsp--;
@@ -22738,21 +22854,21 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6626:1: rule__PreconditionConstraintCS__Group__1 : rule__PreconditionConstraintCS__Group__1__Impl rule__PreconditionConstraintCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6784:1: rule__PreconditionConstraintCS__Group__1 : rule__PreconditionConstraintCS__Group__1__Impl rule__PreconditionConstraintCS__Group__2 ;
     public final void rule__PreconditionConstraintCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6630:1: ( rule__PreconditionConstraintCS__Group__1__Impl rule__PreconditionConstraintCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6631:2: rule__PreconditionConstraintCS__Group__1__Impl rule__PreconditionConstraintCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6788:1: ( rule__PreconditionConstraintCS__Group__1__Impl rule__PreconditionConstraintCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6789:2: rule__PreconditionConstraintCS__Group__1__Impl rule__PreconditionConstraintCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__1__Impl_in_rule__PreconditionConstraintCS__Group__114629);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__1__Impl_in_rule__PreconditionConstraintCS__Group__114790);
             rule__PreconditionConstraintCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__2_in_rule__PreconditionConstraintCS__Group__114632);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__2_in_rule__PreconditionConstraintCS__Group__114793);
             rule__PreconditionConstraintCS__Group__2();
 
             state._fsp--;
@@ -22776,33 +22892,33 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6638:1: rule__PreconditionConstraintCS__Group__1__Impl : ( ( rule__PreconditionConstraintCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6796:1: rule__PreconditionConstraintCS__Group__1__Impl : ( ( rule__PreconditionConstraintCS__Group_1__0 )? ) ;
     public final void rule__PreconditionConstraintCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6642:1: ( ( ( rule__PreconditionConstraintCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6643:1: ( ( rule__PreconditionConstraintCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6800:1: ( ( ( rule__PreconditionConstraintCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6801:1: ( ( rule__PreconditionConstraintCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6643:1: ( ( rule__PreconditionConstraintCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6644:1: ( rule__PreconditionConstraintCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6801:1: ( ( rule__PreconditionConstraintCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6802:1: ( rule__PreconditionConstraintCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6645:1: ( rule__PreconditionConstraintCS__Group_1__0 )?
-            int alt87=2;
-            int LA87_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6803:1: ( rule__PreconditionConstraintCS__Group_1__0 )?
+            int alt102=2;
+            int LA102_0 = input.LA(1);
 
-            if ( ((LA87_0>=RULE_SIMPLE_ID && LA87_0<=RULE_ESCAPED_ID)||(LA87_0>=17 && LA87_0<=52)||(LA87_0>=55 && LA87_0<=60)) ) {
-                alt87=1;
+            if ( ((LA102_0>=RULE_SIMPLE_ID && LA102_0<=RULE_ESCAPED_ID)||(LA102_0>=17 && LA102_0<=52)||(LA102_0>=64 && LA102_0<=69)) ) {
+                alt102=1;
             }
-            switch (alt87) {
+            switch (alt102) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6645:2: rule__PreconditionConstraintCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6803:2: rule__PreconditionConstraintCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1__0_in_rule__PreconditionConstraintCS__Group__1__Impl14659);
+                    pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1__0_in_rule__PreconditionConstraintCS__Group__1__Impl14820);
                     rule__PreconditionConstraintCS__Group_1__0();
 
                     state._fsp--;
@@ -22838,21 +22954,21 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6655:1: rule__PreconditionConstraintCS__Group__2 : rule__PreconditionConstraintCS__Group__2__Impl rule__PreconditionConstraintCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6813:1: rule__PreconditionConstraintCS__Group__2 : rule__PreconditionConstraintCS__Group__2__Impl rule__PreconditionConstraintCS__Group__3 ;
     public final void rule__PreconditionConstraintCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6659:1: ( rule__PreconditionConstraintCS__Group__2__Impl rule__PreconditionConstraintCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6660:2: rule__PreconditionConstraintCS__Group__2__Impl rule__PreconditionConstraintCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6817:1: ( rule__PreconditionConstraintCS__Group__2__Impl rule__PreconditionConstraintCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6818:2: rule__PreconditionConstraintCS__Group__2__Impl rule__PreconditionConstraintCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__2__Impl_in_rule__PreconditionConstraintCS__Group__214690);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__2__Impl_in_rule__PreconditionConstraintCS__Group__214851);
             rule__PreconditionConstraintCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__3_in_rule__PreconditionConstraintCS__Group__214693);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__3_in_rule__PreconditionConstraintCS__Group__214854);
             rule__PreconditionConstraintCS__Group__3();
 
             state._fsp--;
@@ -22876,22 +22992,22 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6667:1: rule__PreconditionConstraintCS__Group__2__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6825:1: rule__PreconditionConstraintCS__Group__2__Impl : ( ':' ) ;
     public final void rule__PreconditionConstraintCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6671:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6672:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6829:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6830:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6672:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6673:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6830:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6831:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getColonKeyword_2()); 
             }
-            match(input,97,FollowSets000.FOLLOW_97_in_rule__PreconditionConstraintCS__Group__2__Impl14721); if (state.failed) return ;
+            match(input,106,FollowSets000.FOLLOW_106_in_rule__PreconditionConstraintCS__Group__2__Impl14882); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPreconditionConstraintCSAccess().getColonKeyword_2()); 
             }
@@ -22917,21 +23033,21 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6686:1: rule__PreconditionConstraintCS__Group__3 : rule__PreconditionConstraintCS__Group__3__Impl rule__PreconditionConstraintCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6844:1: rule__PreconditionConstraintCS__Group__3 : rule__PreconditionConstraintCS__Group__3__Impl rule__PreconditionConstraintCS__Group__4 ;
     public final void rule__PreconditionConstraintCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6690:1: ( rule__PreconditionConstraintCS__Group__3__Impl rule__PreconditionConstraintCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6691:2: rule__PreconditionConstraintCS__Group__3__Impl rule__PreconditionConstraintCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6848:1: ( rule__PreconditionConstraintCS__Group__3__Impl rule__PreconditionConstraintCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6849:2: rule__PreconditionConstraintCS__Group__3__Impl rule__PreconditionConstraintCS__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__3__Impl_in_rule__PreconditionConstraintCS__Group__314752);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__3__Impl_in_rule__PreconditionConstraintCS__Group__314913);
             rule__PreconditionConstraintCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__4_in_rule__PreconditionConstraintCS__Group__314755);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__4_in_rule__PreconditionConstraintCS__Group__314916);
             rule__PreconditionConstraintCS__Group__4();
 
             state._fsp--;
@@ -22955,33 +23071,33 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6698:1: rule__PreconditionConstraintCS__Group__3__Impl : ( ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6856:1: rule__PreconditionConstraintCS__Group__3__Impl : ( ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )? ) ;
     public final void rule__PreconditionConstraintCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6702:1: ( ( ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6703:1: ( ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6860:1: ( ( ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6861:1: ( ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6703:1: ( ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6704:1: ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6861:1: ( ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6862:1: ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getOwnedSpecificationAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6705:1: ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )?
-            int alt88=2;
-            int LA88_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6863:1: ( rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 )?
+            int alt103=2;
+            int LA103_0 = input.LA(1);
 
-            if ( ((LA88_0>=RULE_INT && LA88_0<=RULE_SINGLE_QUOTED_STRING)||(LA88_0>=RULE_SIMPLE_ID && LA88_0<=RULE_UNQUOTED_STRING)||(LA88_0>=17 && LA88_0<=52)||(LA88_0>=55 && LA88_0<=63)||(LA88_0>=80 && LA88_0<=93)||LA88_0==95||(LA88_0>=105 && LA88_0<=107)||LA88_0==112||(LA88_0>=117 && LA88_0<=118)||(LA88_0>=131 && LA88_0<=132)) ) {
-                alt88=1;
+            if ( ((LA103_0>=RULE_INT && LA103_0<=RULE_SINGLE_QUOTED_STRING)||(LA103_0>=RULE_SIMPLE_ID && LA103_0<=RULE_UNQUOTED_STRING)||(LA103_0>=17 && LA103_0<=52)||(LA103_0>=64 && LA103_0<=72)||(LA103_0>=89 && LA103_0<=102)||LA103_0==104||(LA103_0>=114 && LA103_0<=116)||LA103_0==121||(LA103_0>=126 && LA103_0<=127)||(LA103_0>=131 && LA103_0<=132)) ) {
+                alt103=1;
             }
-            switch (alt88) {
+            switch (alt103) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6705:2: rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6863:2: rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3_in_rule__PreconditionConstraintCS__Group__3__Impl14782);
+                    pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3_in_rule__PreconditionConstraintCS__Group__3__Impl14943);
                     rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3();
 
                     state._fsp--;
@@ -23017,16 +23133,16 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6715:1: rule__PreconditionConstraintCS__Group__4 : rule__PreconditionConstraintCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6873:1: rule__PreconditionConstraintCS__Group__4 : rule__PreconditionConstraintCS__Group__4__Impl ;
     public final void rule__PreconditionConstraintCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6719:1: ( rule__PreconditionConstraintCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6720:2: rule__PreconditionConstraintCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6877:1: ( rule__PreconditionConstraintCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6878:2: rule__PreconditionConstraintCS__Group__4__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__4__Impl_in_rule__PreconditionConstraintCS__Group__414813);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group__4__Impl_in_rule__PreconditionConstraintCS__Group__414974);
             rule__PreconditionConstraintCS__Group__4__Impl();
 
             state._fsp--;
@@ -23050,22 +23166,22 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6726:1: rule__PreconditionConstraintCS__Group__4__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6884:1: rule__PreconditionConstraintCS__Group__4__Impl : ( ';' ) ;
     public final void rule__PreconditionConstraintCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6730:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6731:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6888:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6889:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6731:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6732:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6889:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6890:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getSemicolonKeyword_4()); 
             }
-            match(input,53,FollowSets000.FOLLOW_53_in_rule__PreconditionConstraintCS__Group__4__Impl14841); if (state.failed) return ;
+            match(input,53,FollowSets000.FOLLOW_53_in_rule__PreconditionConstraintCS__Group__4__Impl15002); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPreconditionConstraintCSAccess().getSemicolonKeyword_4()); 
             }
@@ -23091,21 +23207,21 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6755:1: rule__PreconditionConstraintCS__Group_1__0 : rule__PreconditionConstraintCS__Group_1__0__Impl rule__PreconditionConstraintCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6913:1: rule__PreconditionConstraintCS__Group_1__0 : rule__PreconditionConstraintCS__Group_1__0__Impl rule__PreconditionConstraintCS__Group_1__1 ;
     public final void rule__PreconditionConstraintCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6759:1: ( rule__PreconditionConstraintCS__Group_1__0__Impl rule__PreconditionConstraintCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6760:2: rule__PreconditionConstraintCS__Group_1__0__Impl rule__PreconditionConstraintCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6917:1: ( rule__PreconditionConstraintCS__Group_1__0__Impl rule__PreconditionConstraintCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6918:2: rule__PreconditionConstraintCS__Group_1__0__Impl rule__PreconditionConstraintCS__Group_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1__0__Impl_in_rule__PreconditionConstraintCS__Group_1__014882);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1__0__Impl_in_rule__PreconditionConstraintCS__Group_1__015043);
             rule__PreconditionConstraintCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1__1_in_rule__PreconditionConstraintCS__Group_1__014885);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1__1_in_rule__PreconditionConstraintCS__Group_1__015046);
             rule__PreconditionConstraintCS__Group_1__1();
 
             state._fsp--;
@@ -23129,25 +23245,25 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6767:1: rule__PreconditionConstraintCS__Group_1__0__Impl : ( ( rule__PreconditionConstraintCS__NameAssignment_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6925:1: rule__PreconditionConstraintCS__Group_1__0__Impl : ( ( rule__PreconditionConstraintCS__NameAssignment_1_0 ) ) ;
     public final void rule__PreconditionConstraintCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6771:1: ( ( ( rule__PreconditionConstraintCS__NameAssignment_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6772:1: ( ( rule__PreconditionConstraintCS__NameAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6929:1: ( ( ( rule__PreconditionConstraintCS__NameAssignment_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6930:1: ( ( rule__PreconditionConstraintCS__NameAssignment_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6772:1: ( ( rule__PreconditionConstraintCS__NameAssignment_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6773:1: ( rule__PreconditionConstraintCS__NameAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6930:1: ( ( rule__PreconditionConstraintCS__NameAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6931:1: ( rule__PreconditionConstraintCS__NameAssignment_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getNameAssignment_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6774:1: ( rule__PreconditionConstraintCS__NameAssignment_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6774:2: rule__PreconditionConstraintCS__NameAssignment_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6932:1: ( rule__PreconditionConstraintCS__NameAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6932:2: rule__PreconditionConstraintCS__NameAssignment_1_0
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__NameAssignment_1_0_in_rule__PreconditionConstraintCS__Group_1__0__Impl14912);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__NameAssignment_1_0_in_rule__PreconditionConstraintCS__Group_1__0__Impl15073);
             rule__PreconditionConstraintCS__NameAssignment_1_0();
 
             state._fsp--;
@@ -23180,16 +23296,16 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6784:1: rule__PreconditionConstraintCS__Group_1__1 : rule__PreconditionConstraintCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6942:1: rule__PreconditionConstraintCS__Group_1__1 : rule__PreconditionConstraintCS__Group_1__1__Impl ;
     public final void rule__PreconditionConstraintCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6788:1: ( rule__PreconditionConstraintCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6789:2: rule__PreconditionConstraintCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6946:1: ( rule__PreconditionConstraintCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6947:2: rule__PreconditionConstraintCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1__1__Impl_in_rule__PreconditionConstraintCS__Group_1__114942);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1__1__Impl_in_rule__PreconditionConstraintCS__Group_1__115103);
             rule__PreconditionConstraintCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -23213,33 +23329,33 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6795:1: rule__PreconditionConstraintCS__Group_1__1__Impl : ( ( rule__PreconditionConstraintCS__Group_1_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6953:1: rule__PreconditionConstraintCS__Group_1__1__Impl : ( ( rule__PreconditionConstraintCS__Group_1_1__0 )? ) ;
     public final void rule__PreconditionConstraintCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6799:1: ( ( ( rule__PreconditionConstraintCS__Group_1_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6800:1: ( ( rule__PreconditionConstraintCS__Group_1_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6957:1: ( ( ( rule__PreconditionConstraintCS__Group_1_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6958:1: ( ( rule__PreconditionConstraintCS__Group_1_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6800:1: ( ( rule__PreconditionConstraintCS__Group_1_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6801:1: ( rule__PreconditionConstraintCS__Group_1_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6958:1: ( ( rule__PreconditionConstraintCS__Group_1_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6959:1: ( rule__PreconditionConstraintCS__Group_1_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getGroup_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6802:1: ( rule__PreconditionConstraintCS__Group_1_1__0 )?
-            int alt89=2;
-            int LA89_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6960:1: ( rule__PreconditionConstraintCS__Group_1_1__0 )?
+            int alt104=2;
+            int LA104_0 = input.LA(1);
 
-            if ( (LA89_0==95) ) {
-                alt89=1;
+            if ( (LA104_0==104) ) {
+                alt104=1;
             }
-            switch (alt89) {
+            switch (alt104) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6802:2: rule__PreconditionConstraintCS__Group_1_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6960:2: rule__PreconditionConstraintCS__Group_1_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__0_in_rule__PreconditionConstraintCS__Group_1__1__Impl14969);
+                    pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__0_in_rule__PreconditionConstraintCS__Group_1__1__Impl15130);
                     rule__PreconditionConstraintCS__Group_1_1__0();
 
                     state._fsp--;
@@ -23275,21 +23391,21 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6816:1: rule__PreconditionConstraintCS__Group_1_1__0 : rule__PreconditionConstraintCS__Group_1_1__0__Impl rule__PreconditionConstraintCS__Group_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6974:1: rule__PreconditionConstraintCS__Group_1_1__0 : rule__PreconditionConstraintCS__Group_1_1__0__Impl rule__PreconditionConstraintCS__Group_1_1__1 ;
     public final void rule__PreconditionConstraintCS__Group_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6820:1: ( rule__PreconditionConstraintCS__Group_1_1__0__Impl rule__PreconditionConstraintCS__Group_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6821:2: rule__PreconditionConstraintCS__Group_1_1__0__Impl rule__PreconditionConstraintCS__Group_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6978:1: ( rule__PreconditionConstraintCS__Group_1_1__0__Impl rule__PreconditionConstraintCS__Group_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6979:2: rule__PreconditionConstraintCS__Group_1_1__0__Impl rule__PreconditionConstraintCS__Group_1_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__0__Impl_in_rule__PreconditionConstraintCS__Group_1_1__015004);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__0__Impl_in_rule__PreconditionConstraintCS__Group_1_1__015165);
             rule__PreconditionConstraintCS__Group_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__1_in_rule__PreconditionConstraintCS__Group_1_1__015007);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__1_in_rule__PreconditionConstraintCS__Group_1_1__015168);
             rule__PreconditionConstraintCS__Group_1_1__1();
 
             state._fsp--;
@@ -23313,22 +23429,22 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6828:1: rule__PreconditionConstraintCS__Group_1_1__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6986:1: rule__PreconditionConstraintCS__Group_1_1__0__Impl : ( '(' ) ;
     public final void rule__PreconditionConstraintCS__Group_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6832:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6833:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6990:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6991:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6833:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6834:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6991:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6992:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getLeftParenthesisKeyword_1_1_0()); 
             }
-            match(input,95,FollowSets000.FOLLOW_95_in_rule__PreconditionConstraintCS__Group_1_1__0__Impl15035); if (state.failed) return ;
+            match(input,104,FollowSets000.FOLLOW_104_in_rule__PreconditionConstraintCS__Group_1_1__0__Impl15196); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPreconditionConstraintCSAccess().getLeftParenthesisKeyword_1_1_0()); 
             }
@@ -23354,21 +23470,21 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6847:1: rule__PreconditionConstraintCS__Group_1_1__1 : rule__PreconditionConstraintCS__Group_1_1__1__Impl rule__PreconditionConstraintCS__Group_1_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7005:1: rule__PreconditionConstraintCS__Group_1_1__1 : rule__PreconditionConstraintCS__Group_1_1__1__Impl rule__PreconditionConstraintCS__Group_1_1__2 ;
     public final void rule__PreconditionConstraintCS__Group_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6851:1: ( rule__PreconditionConstraintCS__Group_1_1__1__Impl rule__PreconditionConstraintCS__Group_1_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6852:2: rule__PreconditionConstraintCS__Group_1_1__1__Impl rule__PreconditionConstraintCS__Group_1_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7009:1: ( rule__PreconditionConstraintCS__Group_1_1__1__Impl rule__PreconditionConstraintCS__Group_1_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7010:2: rule__PreconditionConstraintCS__Group_1_1__1__Impl rule__PreconditionConstraintCS__Group_1_1__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__1__Impl_in_rule__PreconditionConstraintCS__Group_1_1__115066);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__1__Impl_in_rule__PreconditionConstraintCS__Group_1_1__115227);
             rule__PreconditionConstraintCS__Group_1_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__2_in_rule__PreconditionConstraintCS__Group_1_1__115069);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__2_in_rule__PreconditionConstraintCS__Group_1_1__115230);
             rule__PreconditionConstraintCS__Group_1_1__2();
 
             state._fsp--;
@@ -23392,25 +23508,25 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6859:1: rule__PreconditionConstraintCS__Group_1_1__1__Impl : ( ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7017:1: rule__PreconditionConstraintCS__Group_1_1__1__Impl : ( ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) ) ;
     public final void rule__PreconditionConstraintCS__Group_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6863:1: ( ( ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6864:1: ( ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7021:1: ( ( ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7022:1: ( ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6864:1: ( ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6865:1: ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7022:1: ( ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7023:1: ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getOwnedMessageSpecificationAssignment_1_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6866:1: ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6866:2: rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7024:1: ( rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7024:2: rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1_in_rule__PreconditionConstraintCS__Group_1_1__1__Impl15096);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1_in_rule__PreconditionConstraintCS__Group_1_1__1__Impl15257);
             rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1();
 
             state._fsp--;
@@ -23443,16 +23559,16 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6876:1: rule__PreconditionConstraintCS__Group_1_1__2 : rule__PreconditionConstraintCS__Group_1_1__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7034:1: rule__PreconditionConstraintCS__Group_1_1__2 : rule__PreconditionConstraintCS__Group_1_1__2__Impl ;
     public final void rule__PreconditionConstraintCS__Group_1_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6880:1: ( rule__PreconditionConstraintCS__Group_1_1__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6881:2: rule__PreconditionConstraintCS__Group_1_1__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7038:1: ( rule__PreconditionConstraintCS__Group_1_1__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7039:2: rule__PreconditionConstraintCS__Group_1_1__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__2__Impl_in_rule__PreconditionConstraintCS__Group_1_1__215126);
+            pushFollow(FollowSets000.FOLLOW_rule__PreconditionConstraintCS__Group_1_1__2__Impl_in_rule__PreconditionConstraintCS__Group_1_1__215287);
             rule__PreconditionConstraintCS__Group_1_1__2__Impl();
 
             state._fsp--;
@@ -23476,22 +23592,22 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__Group_1_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6887:1: rule__PreconditionConstraintCS__Group_1_1__2__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7045:1: rule__PreconditionConstraintCS__Group_1_1__2__Impl : ( ')' ) ;
     public final void rule__PreconditionConstraintCS__Group_1_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6891:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6892:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7049:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7050:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6892:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6893:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7050:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7051:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getRightParenthesisKeyword_1_1_2()); 
             }
-            match(input,96,FollowSets000.FOLLOW_96_in_rule__PreconditionConstraintCS__Group_1_1__2__Impl15154); if (state.failed) return ;
+            match(input,105,FollowSets000.FOLLOW_105_in_rule__PreconditionConstraintCS__Group_1_1__2__Impl15315); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPreconditionConstraintCSAccess().getRightParenthesisKeyword_1_1_2()); 
             }
@@ -23517,21 +23633,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6912:1: rule__AnnotationCS__Group__0 : rule__AnnotationCS__Group__0__Impl rule__AnnotationCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7070:1: rule__AnnotationCS__Group__0 : rule__AnnotationCS__Group__0__Impl rule__AnnotationCS__Group__1 ;
     public final void rule__AnnotationCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6916:1: ( rule__AnnotationCS__Group__0__Impl rule__AnnotationCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6917:2: rule__AnnotationCS__Group__0__Impl rule__AnnotationCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7074:1: ( rule__AnnotationCS__Group__0__Impl rule__AnnotationCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7075:2: rule__AnnotationCS__Group__0__Impl rule__AnnotationCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__0__Impl_in_rule__AnnotationCS__Group__015191);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__0__Impl_in_rule__AnnotationCS__Group__015352);
             rule__AnnotationCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__1_in_rule__AnnotationCS__Group__015194);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__1_in_rule__AnnotationCS__Group__015355);
             rule__AnnotationCS__Group__1();
 
             state._fsp--;
@@ -23555,23 +23671,23 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6924:1: rule__AnnotationCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7082:1: rule__AnnotationCS__Group__0__Impl : ( () ) ;
     public final void rule__AnnotationCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6928:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6929:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7086:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7087:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6929:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6930:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7087:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7088:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getAnnotationCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6931:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6933:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7089:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7091:1: 
             {
             }
 
@@ -23596,21 +23712,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6943:1: rule__AnnotationCS__Group__1 : rule__AnnotationCS__Group__1__Impl rule__AnnotationCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7101:1: rule__AnnotationCS__Group__1 : rule__AnnotationCS__Group__1__Impl rule__AnnotationCS__Group__2 ;
     public final void rule__AnnotationCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6947:1: ( rule__AnnotationCS__Group__1__Impl rule__AnnotationCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6948:2: rule__AnnotationCS__Group__1__Impl rule__AnnotationCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7105:1: ( rule__AnnotationCS__Group__1__Impl rule__AnnotationCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7106:2: rule__AnnotationCS__Group__1__Impl rule__AnnotationCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__1__Impl_in_rule__AnnotationCS__Group__115252);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__1__Impl_in_rule__AnnotationCS__Group__115413);
             rule__AnnotationCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__2_in_rule__AnnotationCS__Group__115255);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__2_in_rule__AnnotationCS__Group__115416);
             rule__AnnotationCS__Group__2();
 
             state._fsp--;
@@ -23634,22 +23750,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6955:1: rule__AnnotationCS__Group__1__Impl : ( 'annotation' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7113:1: rule__AnnotationCS__Group__1__Impl : ( 'annotation' ) ;
     public final void rule__AnnotationCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6959:1: ( ( 'annotation' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6960:1: ( 'annotation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7117:1: ( ( 'annotation' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7118:1: ( 'annotation' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6960:1: ( 'annotation' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6961:1: 'annotation'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7118:1: ( 'annotation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7119:1: 'annotation'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getAnnotationKeyword_1()); 
             }
-            match(input,55,FollowSets000.FOLLOW_55_in_rule__AnnotationCS__Group__1__Impl15283); if (state.failed) return ;
+            match(input,64,FollowSets000.FOLLOW_64_in_rule__AnnotationCS__Group__1__Impl15444); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAnnotationCSAccess().getAnnotationKeyword_1()); 
             }
@@ -23675,21 +23791,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6974:1: rule__AnnotationCS__Group__2 : rule__AnnotationCS__Group__2__Impl rule__AnnotationCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7132:1: rule__AnnotationCS__Group__2 : rule__AnnotationCS__Group__2__Impl rule__AnnotationCS__Group__3 ;
     public final void rule__AnnotationCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6978:1: ( rule__AnnotationCS__Group__2__Impl rule__AnnotationCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6979:2: rule__AnnotationCS__Group__2__Impl rule__AnnotationCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7136:1: ( rule__AnnotationCS__Group__2__Impl rule__AnnotationCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7137:2: rule__AnnotationCS__Group__2__Impl rule__AnnotationCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__2__Impl_in_rule__AnnotationCS__Group__215314);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__2__Impl_in_rule__AnnotationCS__Group__215475);
             rule__AnnotationCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__3_in_rule__AnnotationCS__Group__215317);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__3_in_rule__AnnotationCS__Group__215478);
             rule__AnnotationCS__Group__3();
 
             state._fsp--;
@@ -23713,33 +23829,33 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6986:1: rule__AnnotationCS__Group__2__Impl : ( ( rule__AnnotationCS__NameAssignment_2 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7144:1: rule__AnnotationCS__Group__2__Impl : ( ( rule__AnnotationCS__NameAssignment_2 )? ) ;
     public final void rule__AnnotationCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6990:1: ( ( ( rule__AnnotationCS__NameAssignment_2 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6991:1: ( ( rule__AnnotationCS__NameAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7148:1: ( ( ( rule__AnnotationCS__NameAssignment_2 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7149:1: ( ( rule__AnnotationCS__NameAssignment_2 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6991:1: ( ( rule__AnnotationCS__NameAssignment_2 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6992:1: ( rule__AnnotationCS__NameAssignment_2 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7149:1: ( ( rule__AnnotationCS__NameAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7150:1: ( rule__AnnotationCS__NameAssignment_2 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getNameAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6993:1: ( rule__AnnotationCS__NameAssignment_2 )?
-            int alt90=2;
-            int LA90_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7151:1: ( rule__AnnotationCS__NameAssignment_2 )?
+            int alt105=2;
+            int LA105_0 = input.LA(1);
 
-            if ( (LA90_0==RULE_SINGLE_QUOTED_STRING||(LA90_0>=RULE_SIMPLE_ID && LA90_0<=RULE_ESCAPED_ID)||(LA90_0>=17 && LA90_0<=52)||(LA90_0>=55 && LA90_0<=60)) ) {
-                alt90=1;
+            if ( (LA105_0==RULE_SINGLE_QUOTED_STRING||(LA105_0>=RULE_SIMPLE_ID && LA105_0<=RULE_ESCAPED_ID)||(LA105_0>=17 && LA105_0<=52)||(LA105_0>=64 && LA105_0<=69)) ) {
+                alt105=1;
             }
-            switch (alt90) {
+            switch (alt105) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:6993:2: rule__AnnotationCS__NameAssignment_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7151:2: rule__AnnotationCS__NameAssignment_2
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__NameAssignment_2_in_rule__AnnotationCS__Group__2__Impl15344);
+                    pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__NameAssignment_2_in_rule__AnnotationCS__Group__2__Impl15505);
                     rule__AnnotationCS__NameAssignment_2();
 
                     state._fsp--;
@@ -23775,21 +23891,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7003:1: rule__AnnotationCS__Group__3 : rule__AnnotationCS__Group__3__Impl rule__AnnotationCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7161:1: rule__AnnotationCS__Group__3 : rule__AnnotationCS__Group__3__Impl rule__AnnotationCS__Group__4 ;
     public final void rule__AnnotationCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7007:1: ( rule__AnnotationCS__Group__3__Impl rule__AnnotationCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7008:2: rule__AnnotationCS__Group__3__Impl rule__AnnotationCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7165:1: ( rule__AnnotationCS__Group__3__Impl rule__AnnotationCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7166:2: rule__AnnotationCS__Group__3__Impl rule__AnnotationCS__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__3__Impl_in_rule__AnnotationCS__Group__315375);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__3__Impl_in_rule__AnnotationCS__Group__315536);
             rule__AnnotationCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__4_in_rule__AnnotationCS__Group__315378);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__4_in_rule__AnnotationCS__Group__315539);
             rule__AnnotationCS__Group__4();
 
             state._fsp--;
@@ -23813,33 +23929,33 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7015:1: rule__AnnotationCS__Group__3__Impl : ( ( rule__AnnotationCS__Group_3__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7173:1: rule__AnnotationCS__Group__3__Impl : ( ( rule__AnnotationCS__Group_3__0 )? ) ;
     public final void rule__AnnotationCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7019:1: ( ( ( rule__AnnotationCS__Group_3__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7020:1: ( ( rule__AnnotationCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7177:1: ( ( ( rule__AnnotationCS__Group_3__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7178:1: ( ( rule__AnnotationCS__Group_3__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7020:1: ( ( rule__AnnotationCS__Group_3__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7021:1: ( rule__AnnotationCS__Group_3__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7178:1: ( ( rule__AnnotationCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7179:1: ( rule__AnnotationCS__Group_3__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getGroup_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7022:1: ( rule__AnnotationCS__Group_3__0 )?
-            int alt91=2;
-            int LA91_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7180:1: ( rule__AnnotationCS__Group_3__0 )?
+            int alt106=2;
+            int LA106_0 = input.LA(1);
 
-            if ( (LA91_0==95) ) {
-                alt91=1;
+            if ( (LA106_0==104) ) {
+                alt106=1;
             }
-            switch (alt91) {
+            switch (alt106) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7022:2: rule__AnnotationCS__Group_3__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7180:2: rule__AnnotationCS__Group_3__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__0_in_rule__AnnotationCS__Group__3__Impl15405);
+                    pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__0_in_rule__AnnotationCS__Group__3__Impl15566);
                     rule__AnnotationCS__Group_3__0();
 
                     state._fsp--;
@@ -23875,16 +23991,16 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7032:1: rule__AnnotationCS__Group__4 : rule__AnnotationCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7190:1: rule__AnnotationCS__Group__4 : rule__AnnotationCS__Group__4__Impl ;
     public final void rule__AnnotationCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7036:1: ( rule__AnnotationCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7037:2: rule__AnnotationCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7194:1: ( rule__AnnotationCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7195:2: rule__AnnotationCS__Group__4__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__4__Impl_in_rule__AnnotationCS__Group__415436);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group__4__Impl_in_rule__AnnotationCS__Group__415597);
             rule__AnnotationCS__Group__4__Impl();
 
             state._fsp--;
@@ -23908,25 +24024,25 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7043:1: rule__AnnotationCS__Group__4__Impl : ( ( rule__AnnotationCS__Alternatives_4 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7201:1: rule__AnnotationCS__Group__4__Impl : ( ( rule__AnnotationCS__Alternatives_4 ) ) ;
     public final void rule__AnnotationCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7047:1: ( ( ( rule__AnnotationCS__Alternatives_4 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7048:1: ( ( rule__AnnotationCS__Alternatives_4 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7205:1: ( ( ( rule__AnnotationCS__Alternatives_4 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7206:1: ( ( rule__AnnotationCS__Alternatives_4 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7048:1: ( ( rule__AnnotationCS__Alternatives_4 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7049:1: ( rule__AnnotationCS__Alternatives_4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7206:1: ( ( rule__AnnotationCS__Alternatives_4 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7207:1: ( rule__AnnotationCS__Alternatives_4 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getAlternatives_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7050:1: ( rule__AnnotationCS__Alternatives_4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7050:2: rule__AnnotationCS__Alternatives_4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7208:1: ( rule__AnnotationCS__Alternatives_4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7208:2: rule__AnnotationCS__Alternatives_4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Alternatives_4_in_rule__AnnotationCS__Group__4__Impl15463);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Alternatives_4_in_rule__AnnotationCS__Group__4__Impl15624);
             rule__AnnotationCS__Alternatives_4();
 
             state._fsp--;
@@ -23959,21 +24075,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7070:1: rule__AnnotationCS__Group_3__0 : rule__AnnotationCS__Group_3__0__Impl rule__AnnotationCS__Group_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7228:1: rule__AnnotationCS__Group_3__0 : rule__AnnotationCS__Group_3__0__Impl rule__AnnotationCS__Group_3__1 ;
     public final void rule__AnnotationCS__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7074:1: ( rule__AnnotationCS__Group_3__0__Impl rule__AnnotationCS__Group_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7075:2: rule__AnnotationCS__Group_3__0__Impl rule__AnnotationCS__Group_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7232:1: ( rule__AnnotationCS__Group_3__0__Impl rule__AnnotationCS__Group_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7233:2: rule__AnnotationCS__Group_3__0__Impl rule__AnnotationCS__Group_3__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__0__Impl_in_rule__AnnotationCS__Group_3__015503);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__0__Impl_in_rule__AnnotationCS__Group_3__015664);
             rule__AnnotationCS__Group_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__1_in_rule__AnnotationCS__Group_3__015506);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__1_in_rule__AnnotationCS__Group_3__015667);
             rule__AnnotationCS__Group_3__1();
 
             state._fsp--;
@@ -23997,22 +24113,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7082:1: rule__AnnotationCS__Group_3__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7240:1: rule__AnnotationCS__Group_3__0__Impl : ( '(' ) ;
     public final void rule__AnnotationCS__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7086:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7087:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7244:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7245:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7087:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7088:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7245:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7246:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getLeftParenthesisKeyword_3_0()); 
             }
-            match(input,95,FollowSets000.FOLLOW_95_in_rule__AnnotationCS__Group_3__0__Impl15534); if (state.failed) return ;
+            match(input,104,FollowSets000.FOLLOW_104_in_rule__AnnotationCS__Group_3__0__Impl15695); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAnnotationCSAccess().getLeftParenthesisKeyword_3_0()); 
             }
@@ -24038,21 +24154,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7101:1: rule__AnnotationCS__Group_3__1 : rule__AnnotationCS__Group_3__1__Impl rule__AnnotationCS__Group_3__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7259:1: rule__AnnotationCS__Group_3__1 : rule__AnnotationCS__Group_3__1__Impl rule__AnnotationCS__Group_3__2 ;
     public final void rule__AnnotationCS__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7105:1: ( rule__AnnotationCS__Group_3__1__Impl rule__AnnotationCS__Group_3__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7106:2: rule__AnnotationCS__Group_3__1__Impl rule__AnnotationCS__Group_3__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7263:1: ( rule__AnnotationCS__Group_3__1__Impl rule__AnnotationCS__Group_3__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7264:2: rule__AnnotationCS__Group_3__1__Impl rule__AnnotationCS__Group_3__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__1__Impl_in_rule__AnnotationCS__Group_3__115565);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__1__Impl_in_rule__AnnotationCS__Group_3__115726);
             rule__AnnotationCS__Group_3__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__2_in_rule__AnnotationCS__Group_3__115568);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__2_in_rule__AnnotationCS__Group_3__115729);
             rule__AnnotationCS__Group_3__2();
 
             state._fsp--;
@@ -24076,25 +24192,25 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7113:1: rule__AnnotationCS__Group_3__1__Impl : ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7271:1: rule__AnnotationCS__Group_3__1__Impl : ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 ) ) ;
     public final void rule__AnnotationCS__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7117:1: ( ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7118:1: ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7275:1: ( ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7276:1: ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7118:1: ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7119:1: ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7276:1: ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7277:1: ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getOwnedDetailsAssignment_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7120:1: ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7120:2: rule__AnnotationCS__OwnedDetailsAssignment_3_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7278:1: ( rule__AnnotationCS__OwnedDetailsAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7278:2: rule__AnnotationCS__OwnedDetailsAssignment_3_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__OwnedDetailsAssignment_3_1_in_rule__AnnotationCS__Group_3__1__Impl15595);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__OwnedDetailsAssignment_3_1_in_rule__AnnotationCS__Group_3__1__Impl15756);
             rule__AnnotationCS__OwnedDetailsAssignment_3_1();
 
             state._fsp--;
@@ -24127,21 +24243,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7130:1: rule__AnnotationCS__Group_3__2 : rule__AnnotationCS__Group_3__2__Impl rule__AnnotationCS__Group_3__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7288:1: rule__AnnotationCS__Group_3__2 : rule__AnnotationCS__Group_3__2__Impl rule__AnnotationCS__Group_3__3 ;
     public final void rule__AnnotationCS__Group_3__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7134:1: ( rule__AnnotationCS__Group_3__2__Impl rule__AnnotationCS__Group_3__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7135:2: rule__AnnotationCS__Group_3__2__Impl rule__AnnotationCS__Group_3__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7292:1: ( rule__AnnotationCS__Group_3__2__Impl rule__AnnotationCS__Group_3__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7293:2: rule__AnnotationCS__Group_3__2__Impl rule__AnnotationCS__Group_3__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__2__Impl_in_rule__AnnotationCS__Group_3__215625);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__2__Impl_in_rule__AnnotationCS__Group_3__215786);
             rule__AnnotationCS__Group_3__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__3_in_rule__AnnotationCS__Group_3__215628);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__3_in_rule__AnnotationCS__Group_3__215789);
             rule__AnnotationCS__Group_3__3();
 
             state._fsp--;
@@ -24165,37 +24281,37 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7142:1: rule__AnnotationCS__Group_3__2__Impl : ( ( rule__AnnotationCS__Group_3_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7300:1: rule__AnnotationCS__Group_3__2__Impl : ( ( rule__AnnotationCS__Group_3_2__0 )* ) ;
     public final void rule__AnnotationCS__Group_3__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7146:1: ( ( ( rule__AnnotationCS__Group_3_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7147:1: ( ( rule__AnnotationCS__Group_3_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7304:1: ( ( ( rule__AnnotationCS__Group_3_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7305:1: ( ( rule__AnnotationCS__Group_3_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7147:1: ( ( rule__AnnotationCS__Group_3_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7148:1: ( rule__AnnotationCS__Group_3_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7305:1: ( ( rule__AnnotationCS__Group_3_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7306:1: ( rule__AnnotationCS__Group_3_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getGroup_3_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7149:1: ( rule__AnnotationCS__Group_3_2__0 )*
-            loop92:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7307:1: ( rule__AnnotationCS__Group_3_2__0 )*
+            loop107:
             do {
-                int alt92=2;
-                int LA92_0 = input.LA(1);
+                int alt107=2;
+                int LA107_0 = input.LA(1);
 
-                if ( (LA92_0==98) ) {
-                    alt92=1;
+                if ( (LA107_0==107) ) {
+                    alt107=1;
                 }
 
 
-                switch (alt92) {
+                switch (alt107) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7149:2: rule__AnnotationCS__Group_3_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7307:2: rule__AnnotationCS__Group_3_2__0
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3_2__0_in_rule__AnnotationCS__Group_3__2__Impl15655);
+            	    pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3_2__0_in_rule__AnnotationCS__Group_3__2__Impl15816);
             	    rule__AnnotationCS__Group_3_2__0();
 
             	    state._fsp--;
@@ -24205,7 +24321,7 @@
             	    break;
 
             	default :
-            	    break loop92;
+            	    break loop107;
                 }
             } while (true);
 
@@ -24234,16 +24350,16 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7159:1: rule__AnnotationCS__Group_3__3 : rule__AnnotationCS__Group_3__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7317:1: rule__AnnotationCS__Group_3__3 : rule__AnnotationCS__Group_3__3__Impl ;
     public final void rule__AnnotationCS__Group_3__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7163:1: ( rule__AnnotationCS__Group_3__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7164:2: rule__AnnotationCS__Group_3__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7321:1: ( rule__AnnotationCS__Group_3__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7322:2: rule__AnnotationCS__Group_3__3__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__3__Impl_in_rule__AnnotationCS__Group_3__315686);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3__3__Impl_in_rule__AnnotationCS__Group_3__315847);
             rule__AnnotationCS__Group_3__3__Impl();
 
             state._fsp--;
@@ -24267,22 +24383,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7170:1: rule__AnnotationCS__Group_3__3__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7328:1: rule__AnnotationCS__Group_3__3__Impl : ( ')' ) ;
     public final void rule__AnnotationCS__Group_3__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7174:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7175:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7332:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7333:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7175:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7176:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7333:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7334:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getRightParenthesisKeyword_3_3()); 
             }
-            match(input,96,FollowSets000.FOLLOW_96_in_rule__AnnotationCS__Group_3__3__Impl15714); if (state.failed) return ;
+            match(input,105,FollowSets000.FOLLOW_105_in_rule__AnnotationCS__Group_3__3__Impl15875); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAnnotationCSAccess().getRightParenthesisKeyword_3_3()); 
             }
@@ -24308,21 +24424,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7197:1: rule__AnnotationCS__Group_3_2__0 : rule__AnnotationCS__Group_3_2__0__Impl rule__AnnotationCS__Group_3_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7355:1: rule__AnnotationCS__Group_3_2__0 : rule__AnnotationCS__Group_3_2__0__Impl rule__AnnotationCS__Group_3_2__1 ;
     public final void rule__AnnotationCS__Group_3_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7201:1: ( rule__AnnotationCS__Group_3_2__0__Impl rule__AnnotationCS__Group_3_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7202:2: rule__AnnotationCS__Group_3_2__0__Impl rule__AnnotationCS__Group_3_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7359:1: ( rule__AnnotationCS__Group_3_2__0__Impl rule__AnnotationCS__Group_3_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7360:2: rule__AnnotationCS__Group_3_2__0__Impl rule__AnnotationCS__Group_3_2__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3_2__0__Impl_in_rule__AnnotationCS__Group_3_2__015753);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3_2__0__Impl_in_rule__AnnotationCS__Group_3_2__015914);
             rule__AnnotationCS__Group_3_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3_2__1_in_rule__AnnotationCS__Group_3_2__015756);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3_2__1_in_rule__AnnotationCS__Group_3_2__015917);
             rule__AnnotationCS__Group_3_2__1();
 
             state._fsp--;
@@ -24346,22 +24462,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7209:1: rule__AnnotationCS__Group_3_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7367:1: rule__AnnotationCS__Group_3_2__0__Impl : ( ',' ) ;
     public final void rule__AnnotationCS__Group_3_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7213:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7214:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7371:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7372:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7214:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7215:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7372:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7373:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getCommaKeyword_3_2_0()); 
             }
-            match(input,98,FollowSets000.FOLLOW_98_in_rule__AnnotationCS__Group_3_2__0__Impl15784); if (state.failed) return ;
+            match(input,107,FollowSets000.FOLLOW_107_in_rule__AnnotationCS__Group_3_2__0__Impl15945); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAnnotationCSAccess().getCommaKeyword_3_2_0()); 
             }
@@ -24387,16 +24503,16 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7228:1: rule__AnnotationCS__Group_3_2__1 : rule__AnnotationCS__Group_3_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7386:1: rule__AnnotationCS__Group_3_2__1 : rule__AnnotationCS__Group_3_2__1__Impl ;
     public final void rule__AnnotationCS__Group_3_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7232:1: ( rule__AnnotationCS__Group_3_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7233:2: rule__AnnotationCS__Group_3_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7390:1: ( rule__AnnotationCS__Group_3_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7391:2: rule__AnnotationCS__Group_3_2__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3_2__1__Impl_in_rule__AnnotationCS__Group_3_2__115815);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_3_2__1__Impl_in_rule__AnnotationCS__Group_3_2__115976);
             rule__AnnotationCS__Group_3_2__1__Impl();
 
             state._fsp--;
@@ -24420,25 +24536,25 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_3_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7239:1: rule__AnnotationCS__Group_3_2__1__Impl : ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7397:1: rule__AnnotationCS__Group_3_2__1__Impl : ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 ) ) ;
     public final void rule__AnnotationCS__Group_3_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7243:1: ( ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7244:1: ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7401:1: ( ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7402:1: ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7244:1: ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7245:1: ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7402:1: ( ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7403:1: ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getOwnedDetailsAssignment_3_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7246:1: ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7246:2: rule__AnnotationCS__OwnedDetailsAssignment_3_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7404:1: ( rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7404:2: rule__AnnotationCS__OwnedDetailsAssignment_3_2_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__OwnedDetailsAssignment_3_2_1_in_rule__AnnotationCS__Group_3_2__1__Impl15842);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__OwnedDetailsAssignment_3_2_1_in_rule__AnnotationCS__Group_3_2__1__Impl16003);
             rule__AnnotationCS__OwnedDetailsAssignment_3_2_1();
 
             state._fsp--;
@@ -24471,21 +24587,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_4_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7260:1: rule__AnnotationCS__Group_4_0__0 : rule__AnnotationCS__Group_4_0__0__Impl rule__AnnotationCS__Group_4_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7418:1: rule__AnnotationCS__Group_4_0__0 : rule__AnnotationCS__Group_4_0__0__Impl rule__AnnotationCS__Group_4_0__1 ;
     public final void rule__AnnotationCS__Group_4_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7264:1: ( rule__AnnotationCS__Group_4_0__0__Impl rule__AnnotationCS__Group_4_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7265:2: rule__AnnotationCS__Group_4_0__0__Impl rule__AnnotationCS__Group_4_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7422:1: ( rule__AnnotationCS__Group_4_0__0__Impl rule__AnnotationCS__Group_4_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7423:2: rule__AnnotationCS__Group_4_0__0__Impl rule__AnnotationCS__Group_4_0__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__0__Impl_in_rule__AnnotationCS__Group_4_0__015876);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__0__Impl_in_rule__AnnotationCS__Group_4_0__016037);
             rule__AnnotationCS__Group_4_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__1_in_rule__AnnotationCS__Group_4_0__015879);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__1_in_rule__AnnotationCS__Group_4_0__016040);
             rule__AnnotationCS__Group_4_0__1();
 
             state._fsp--;
@@ -24509,22 +24625,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_4_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7272:1: rule__AnnotationCS__Group_4_0__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7430:1: rule__AnnotationCS__Group_4_0__0__Impl : ( '{' ) ;
     public final void rule__AnnotationCS__Group_4_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7276:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7277:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7434:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7435:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7277:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7278:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7435:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7436:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getLeftCurlyBracketKeyword_4_0_0()); 
             }
-            match(input,99,FollowSets000.FOLLOW_99_in_rule__AnnotationCS__Group_4_0__0__Impl15907); if (state.failed) return ;
+            match(input,108,FollowSets000.FOLLOW_108_in_rule__AnnotationCS__Group_4_0__0__Impl16068); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAnnotationCSAccess().getLeftCurlyBracketKeyword_4_0_0()); 
             }
@@ -24550,21 +24666,21 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_4_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7291:1: rule__AnnotationCS__Group_4_0__1 : rule__AnnotationCS__Group_4_0__1__Impl rule__AnnotationCS__Group_4_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7449:1: rule__AnnotationCS__Group_4_0__1 : rule__AnnotationCS__Group_4_0__1__Impl rule__AnnotationCS__Group_4_0__2 ;
     public final void rule__AnnotationCS__Group_4_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7295:1: ( rule__AnnotationCS__Group_4_0__1__Impl rule__AnnotationCS__Group_4_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7296:2: rule__AnnotationCS__Group_4_0__1__Impl rule__AnnotationCS__Group_4_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7453:1: ( rule__AnnotationCS__Group_4_0__1__Impl rule__AnnotationCS__Group_4_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7454:2: rule__AnnotationCS__Group_4_0__1__Impl rule__AnnotationCS__Group_4_0__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__1__Impl_in_rule__AnnotationCS__Group_4_0__115938);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__1__Impl_in_rule__AnnotationCS__Group_4_0__116099);
             rule__AnnotationCS__Group_4_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__2_in_rule__AnnotationCS__Group_4_0__115941);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__2_in_rule__AnnotationCS__Group_4_0__116102);
             rule__AnnotationCS__Group_4_0__2();
 
             state._fsp--;
@@ -24588,28 +24704,28 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_4_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7303:1: rule__AnnotationCS__Group_4_0__1__Impl : ( ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7461:1: rule__AnnotationCS__Group_4_0__1__Impl : ( ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* ) ) ;
     public final void rule__AnnotationCS__Group_4_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7307:1: ( ( ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7308:1: ( ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7465:1: ( ( ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7466:1: ( ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7308:1: ( ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7309:1: ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7466:1: ( ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7467:1: ( ( rule__AnnotationCS__Alternatives_4_0_1 ) ) ( ( rule__AnnotationCS__Alternatives_4_0_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7309:1: ( ( rule__AnnotationCS__Alternatives_4_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7310:1: ( rule__AnnotationCS__Alternatives_4_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7467:1: ( ( rule__AnnotationCS__Alternatives_4_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7468:1: ( rule__AnnotationCS__Alternatives_4_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getAlternatives_4_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7311:1: ( rule__AnnotationCS__Alternatives_4_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7311:2: rule__AnnotationCS__Alternatives_4_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7469:1: ( rule__AnnotationCS__Alternatives_4_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7469:2: rule__AnnotationCS__Alternatives_4_0_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Alternatives_4_0_1_in_rule__AnnotationCS__Group_4_0__1__Impl15970);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Alternatives_4_0_1_in_rule__AnnotationCS__Group_4_0__1__Impl16131);
             rule__AnnotationCS__Alternatives_4_0_1();
 
             state._fsp--;
@@ -24623,28 +24739,28 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7314:1: ( ( rule__AnnotationCS__Alternatives_4_0_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7315:1: ( rule__AnnotationCS__Alternatives_4_0_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7472:1: ( ( rule__AnnotationCS__Alternatives_4_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7473:1: ( rule__AnnotationCS__Alternatives_4_0_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getAlternatives_4_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7316:1: ( rule__AnnotationCS__Alternatives_4_0_1 )*
-            loop93:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7474:1: ( rule__AnnotationCS__Alternatives_4_0_1 )*
+            loop108:
             do {
-                int alt93=2;
-                int LA93_0 = input.LA(1);
+                int alt108=2;
+                int LA108_0 = input.LA(1);
 
-                if ( ((LA93_0>=RULE_SIMPLE_ID && LA93_0<=RULE_ESCAPED_ID)||(LA93_0>=17 && LA93_0<=52)||(LA93_0>=55 && LA93_0<=56)||LA93_0==58||LA93_0==60) ) {
-                    alt93=1;
+                if ( ((LA108_0>=RULE_SIMPLE_ID && LA108_0<=RULE_ESCAPED_ID)||(LA108_0>=17 && LA108_0<=52)||(LA108_0>=64 && LA108_0<=65)||LA108_0==67||LA108_0==69) ) {
+                    alt108=1;
                 }
 
 
-                switch (alt93) {
+                switch (alt108) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7316:2: rule__AnnotationCS__Alternatives_4_0_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7474:2: rule__AnnotationCS__Alternatives_4_0_1
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Alternatives_4_0_1_in_rule__AnnotationCS__Group_4_0__1__Impl15982);
+            	    pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Alternatives_4_0_1_in_rule__AnnotationCS__Group_4_0__1__Impl16143);
             	    rule__AnnotationCS__Alternatives_4_0_1();
 
             	    state._fsp--;
@@ -24654,7 +24770,7 @@
             	    break;
 
             	default :
-            	    break loop93;
+            	    break loop108;
                 }
             } while (true);
 
@@ -24686,16 +24802,16 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_4_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7327:1: rule__AnnotationCS__Group_4_0__2 : rule__AnnotationCS__Group_4_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7485:1: rule__AnnotationCS__Group_4_0__2 : rule__AnnotationCS__Group_4_0__2__Impl ;
     public final void rule__AnnotationCS__Group_4_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7331:1: ( rule__AnnotationCS__Group_4_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7332:2: rule__AnnotationCS__Group_4_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7489:1: ( rule__AnnotationCS__Group_4_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7490:2: rule__AnnotationCS__Group_4_0__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__2__Impl_in_rule__AnnotationCS__Group_4_0__216015);
+            pushFollow(FollowSets000.FOLLOW_rule__AnnotationCS__Group_4_0__2__Impl_in_rule__AnnotationCS__Group_4_0__216176);
             rule__AnnotationCS__Group_4_0__2__Impl();
 
             state._fsp--;
@@ -24719,22 +24835,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__Group_4_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7338:1: rule__AnnotationCS__Group_4_0__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7496:1: rule__AnnotationCS__Group_4_0__2__Impl : ( '}' ) ;
     public final void rule__AnnotationCS__Group_4_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7342:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7343:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7500:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7501:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7343:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7344:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7501:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7502:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getRightCurlyBracketKeyword_4_0_2()); 
             }
-            match(input,100,FollowSets000.FOLLOW_100_in_rule__AnnotationCS__Group_4_0__2__Impl16043); if (state.failed) return ;
+            match(input,109,FollowSets000.FOLLOW_109_in_rule__AnnotationCS__Group_4_0__2__Impl16204); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAnnotationCSAccess().getRightCurlyBracketKeyword_4_0_2()); 
             }
@@ -24760,21 +24876,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7363:1: rule__AttributeCS__Group__0 : rule__AttributeCS__Group__0__Impl rule__AttributeCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7521:1: rule__AttributeCS__Group__0 : rule__AttributeCS__Group__0__Impl rule__AttributeCS__Group__1 ;
     public final void rule__AttributeCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7367:1: ( rule__AttributeCS__Group__0__Impl rule__AttributeCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7368:2: rule__AttributeCS__Group__0__Impl rule__AttributeCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7525:1: ( rule__AttributeCS__Group__0__Impl rule__AttributeCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7526:2: rule__AttributeCS__Group__0__Impl rule__AttributeCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__0__Impl_in_rule__AttributeCS__Group__016080);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__0__Impl_in_rule__AttributeCS__Group__016241);
             rule__AttributeCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__1_in_rule__AttributeCS__Group__016083);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__1_in_rule__AttributeCS__Group__016244);
             rule__AttributeCS__Group__1();
 
             state._fsp--;
@@ -24798,45 +24914,34 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7375:1: rule__AttributeCS__Group__0__Impl : ( ( rule__AttributeCS__Alternatives_0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7533:1: rule__AttributeCS__Group__0__Impl : ( ( rule__AttributeCS__UnorderedGroup_0 ) ) ;
     public final void rule__AttributeCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7379:1: ( ( ( rule__AttributeCS__Alternatives_0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7380:1: ( ( rule__AttributeCS__Alternatives_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7537:1: ( ( ( rule__AttributeCS__UnorderedGroup_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7538:1: ( ( rule__AttributeCS__UnorderedGroup_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7380:1: ( ( rule__AttributeCS__Alternatives_0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7381:1: ( rule__AttributeCS__Alternatives_0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7538:1: ( ( rule__AttributeCS__UnorderedGroup_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7539:1: ( rule__AttributeCS__UnorderedGroup_0 )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getAlternatives_0()); 
+               before(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7382:1: ( rule__AttributeCS__Alternatives_0 )?
-            int alt94=2;
-            int LA94_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7540:1: ( rule__AttributeCS__UnorderedGroup_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7540:2: rule__AttributeCS__UnorderedGroup_0
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__UnorderedGroup_0_in_rule__AttributeCS__Group__0__Impl16271);
+            rule__AttributeCS__UnorderedGroup_0();
 
-            if ( (LA94_0==24||LA94_0==46) ) {
-                alt94=1;
-            }
-            switch (alt94) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7382:2: rule__AttributeCS__Alternatives_0
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_0_in_rule__AttributeCS__Group__0__Impl16110);
-                    rule__AttributeCS__Alternatives_0();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-                    break;
+            state._fsp--;
+            if (state.failed) return ;
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getAlternatives_0()); 
+               after(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0()); 
             }
 
             }
@@ -24860,21 +24965,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7392:1: rule__AttributeCS__Group__1 : rule__AttributeCS__Group__1__Impl rule__AttributeCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7550:1: rule__AttributeCS__Group__1 : rule__AttributeCS__Group__1__Impl rule__AttributeCS__Group__2 ;
     public final void rule__AttributeCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7396:1: ( rule__AttributeCS__Group__1__Impl rule__AttributeCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7397:2: rule__AttributeCS__Group__1__Impl rule__AttributeCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7554:1: ( rule__AttributeCS__Group__1__Impl rule__AttributeCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7555:2: rule__AttributeCS__Group__1__Impl rule__AttributeCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__1__Impl_in_rule__AttributeCS__Group__116141);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__1__Impl_in_rule__AttributeCS__Group__116301);
             rule__AttributeCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__2_in_rule__AttributeCS__Group__116144);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__2_in_rule__AttributeCS__Group__116304);
             rule__AttributeCS__Group__2();
 
             state._fsp--;
@@ -24898,22 +25003,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7404:1: rule__AttributeCS__Group__1__Impl : ( 'attribute' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7562:1: rule__AttributeCS__Group__1__Impl : ( 'attribute' ) ;
     public final void rule__AttributeCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7408:1: ( ( 'attribute' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7409:1: ( 'attribute' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7566:1: ( ( 'attribute' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7567:1: ( 'attribute' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7409:1: ( 'attribute' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7410:1: 'attribute'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7567:1: ( 'attribute' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7568:1: 'attribute'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getAttributeKeyword_1()); 
             }
-            match(input,18,FollowSets000.FOLLOW_18_in_rule__AttributeCS__Group__1__Impl16172); if (state.failed) return ;
+            match(input,18,FollowSets000.FOLLOW_18_in_rule__AttributeCS__Group__1__Impl16332); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getAttributeKeyword_1()); 
             }
@@ -24939,21 +25044,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7423:1: rule__AttributeCS__Group__2 : rule__AttributeCS__Group__2__Impl rule__AttributeCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7581:1: rule__AttributeCS__Group__2 : rule__AttributeCS__Group__2__Impl rule__AttributeCS__Group__3 ;
     public final void rule__AttributeCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7427:1: ( rule__AttributeCS__Group__2__Impl rule__AttributeCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7428:2: rule__AttributeCS__Group__2__Impl rule__AttributeCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7585:1: ( rule__AttributeCS__Group__2__Impl rule__AttributeCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7586:2: rule__AttributeCS__Group__2__Impl rule__AttributeCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__2__Impl_in_rule__AttributeCS__Group__216203);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__2__Impl_in_rule__AttributeCS__Group__216363);
             rule__AttributeCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__3_in_rule__AttributeCS__Group__216206);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__3_in_rule__AttributeCS__Group__216366);
             rule__AttributeCS__Group__3();
 
             state._fsp--;
@@ -24977,25 +25082,25 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7435:1: rule__AttributeCS__Group__2__Impl : ( ( rule__AttributeCS__NameAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7593:1: rule__AttributeCS__Group__2__Impl : ( ( rule__AttributeCS__NameAssignment_2 ) ) ;
     public final void rule__AttributeCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7439:1: ( ( ( rule__AttributeCS__NameAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7440:1: ( ( rule__AttributeCS__NameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7597:1: ( ( ( rule__AttributeCS__NameAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7598:1: ( ( rule__AttributeCS__NameAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7440:1: ( ( rule__AttributeCS__NameAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7441:1: ( rule__AttributeCS__NameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7598:1: ( ( rule__AttributeCS__NameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7599:1: ( rule__AttributeCS__NameAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getNameAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7442:1: ( rule__AttributeCS__NameAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7442:2: rule__AttributeCS__NameAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7600:1: ( rule__AttributeCS__NameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7600:2: rule__AttributeCS__NameAssignment_2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__NameAssignment_2_in_rule__AttributeCS__Group__2__Impl16233);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__NameAssignment_2_in_rule__AttributeCS__Group__2__Impl16393);
             rule__AttributeCS__NameAssignment_2();
 
             state._fsp--;
@@ -25028,21 +25133,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7452:1: rule__AttributeCS__Group__3 : rule__AttributeCS__Group__3__Impl rule__AttributeCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7610:1: rule__AttributeCS__Group__3 : rule__AttributeCS__Group__3__Impl rule__AttributeCS__Group__4 ;
     public final void rule__AttributeCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7456:1: ( rule__AttributeCS__Group__3__Impl rule__AttributeCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7457:2: rule__AttributeCS__Group__3__Impl rule__AttributeCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7614:1: ( rule__AttributeCS__Group__3__Impl rule__AttributeCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7615:2: rule__AttributeCS__Group__3__Impl rule__AttributeCS__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__3__Impl_in_rule__AttributeCS__Group__316263);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__3__Impl_in_rule__AttributeCS__Group__316423);
             rule__AttributeCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__4_in_rule__AttributeCS__Group__316266);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__4_in_rule__AttributeCS__Group__316426);
             rule__AttributeCS__Group__4();
 
             state._fsp--;
@@ -25066,33 +25171,33 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7464:1: rule__AttributeCS__Group__3__Impl : ( ( rule__AttributeCS__Group_3__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7622:1: rule__AttributeCS__Group__3__Impl : ( ( rule__AttributeCS__Group_3__0 )? ) ;
     public final void rule__AttributeCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7468:1: ( ( ( rule__AttributeCS__Group_3__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7469:1: ( ( rule__AttributeCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7626:1: ( ( ( rule__AttributeCS__Group_3__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7627:1: ( ( rule__AttributeCS__Group_3__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7469:1: ( ( rule__AttributeCS__Group_3__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7470:1: ( rule__AttributeCS__Group_3__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7627:1: ( ( rule__AttributeCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7628:1: ( rule__AttributeCS__Group_3__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getGroup_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7471:1: ( rule__AttributeCS__Group_3__0 )?
-            int alt95=2;
-            int LA95_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7629:1: ( rule__AttributeCS__Group_3__0 )?
+            int alt109=2;
+            int LA109_0 = input.LA(1);
 
-            if ( (LA95_0==97) ) {
-                alt95=1;
+            if ( (LA109_0==106) ) {
+                alt109=1;
             }
-            switch (alt95) {
+            switch (alt109) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7471:2: rule__AttributeCS__Group_3__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7629:2: rule__AttributeCS__Group_3__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_3__0_in_rule__AttributeCS__Group__3__Impl16293);
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_3__0_in_rule__AttributeCS__Group__3__Impl16453);
                     rule__AttributeCS__Group_3__0();
 
                     state._fsp--;
@@ -25128,21 +25233,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7481:1: rule__AttributeCS__Group__4 : rule__AttributeCS__Group__4__Impl rule__AttributeCS__Group__5 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7639:1: rule__AttributeCS__Group__4 : rule__AttributeCS__Group__4__Impl rule__AttributeCS__Group__5 ;
     public final void rule__AttributeCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7485:1: ( rule__AttributeCS__Group__4__Impl rule__AttributeCS__Group__5 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7486:2: rule__AttributeCS__Group__4__Impl rule__AttributeCS__Group__5
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7643:1: ( rule__AttributeCS__Group__4__Impl rule__AttributeCS__Group__5 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7644:2: rule__AttributeCS__Group__4__Impl rule__AttributeCS__Group__5
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__4__Impl_in_rule__AttributeCS__Group__416324);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__4__Impl_in_rule__AttributeCS__Group__416484);
             rule__AttributeCS__Group__4__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__5_in_rule__AttributeCS__Group__416327);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__5_in_rule__AttributeCS__Group__416487);
             rule__AttributeCS__Group__5();
 
             state._fsp--;
@@ -25166,33 +25271,33 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7493:1: rule__AttributeCS__Group__4__Impl : ( ( rule__AttributeCS__Group_4__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7651:1: rule__AttributeCS__Group__4__Impl : ( ( rule__AttributeCS__Group_4__0 )? ) ;
     public final void rule__AttributeCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7497:1: ( ( ( rule__AttributeCS__Group_4__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7498:1: ( ( rule__AttributeCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7655:1: ( ( ( rule__AttributeCS__Group_4__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7656:1: ( ( rule__AttributeCS__Group_4__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7498:1: ( ( rule__AttributeCS__Group_4__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7499:1: ( rule__AttributeCS__Group_4__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7656:1: ( ( rule__AttributeCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7657:1: ( rule__AttributeCS__Group_4__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getGroup_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7500:1: ( rule__AttributeCS__Group_4__0 )?
-            int alt96=2;
-            int LA96_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7658:1: ( rule__AttributeCS__Group_4__0 )?
+            int alt110=2;
+            int LA110_0 = input.LA(1);
 
-            if ( (LA96_0==70) ) {
-                alt96=1;
+            if ( (LA110_0==79) ) {
+                alt110=1;
             }
-            switch (alt96) {
+            switch (alt110) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7500:2: rule__AttributeCS__Group_4__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7658:2: rule__AttributeCS__Group_4__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_4__0_in_rule__AttributeCS__Group__4__Impl16354);
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_4__0_in_rule__AttributeCS__Group__4__Impl16514);
                     rule__AttributeCS__Group_4__0();
 
                     state._fsp--;
@@ -25228,21 +25333,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7510:1: rule__AttributeCS__Group__5 : rule__AttributeCS__Group__5__Impl rule__AttributeCS__Group__6 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7668:1: rule__AttributeCS__Group__5 : rule__AttributeCS__Group__5__Impl rule__AttributeCS__Group__6 ;
     public final void rule__AttributeCS__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7514:1: ( rule__AttributeCS__Group__5__Impl rule__AttributeCS__Group__6 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7515:2: rule__AttributeCS__Group__5__Impl rule__AttributeCS__Group__6
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7672:1: ( rule__AttributeCS__Group__5__Impl rule__AttributeCS__Group__6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7673:2: rule__AttributeCS__Group__5__Impl rule__AttributeCS__Group__6
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__5__Impl_in_rule__AttributeCS__Group__516385);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__5__Impl_in_rule__AttributeCS__Group__516545);
             rule__AttributeCS__Group__5__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__6_in_rule__AttributeCS__Group__516388);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__6_in_rule__AttributeCS__Group__516548);
             rule__AttributeCS__Group__6();
 
             state._fsp--;
@@ -25266,38 +25371,30 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__5__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7522:1: rule__AttributeCS__Group__5__Impl : ( ( rule__AttributeCS__Group_5__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7680:1: rule__AttributeCS__Group__5__Impl : ( ( rule__AttributeCS__UnorderedGroup_5 )? ) ;
     public final void rule__AttributeCS__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7526:1: ( ( ( rule__AttributeCS__Group_5__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7527:1: ( ( rule__AttributeCS__Group_5__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7684:1: ( ( ( rule__AttributeCS__UnorderedGroup_5 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7685:1: ( ( rule__AttributeCS__UnorderedGroup_5 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7527:1: ( ( rule__AttributeCS__Group_5__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7528:1: ( rule__AttributeCS__Group_5__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7685:1: ( ( rule__AttributeCS__UnorderedGroup_5 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7686:1: ( rule__AttributeCS__UnorderedGroup_5 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getGroup_5()); 
+               before(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7529:1: ( rule__AttributeCS__Group_5__0 )?
-            int alt97=2;
-            int LA97_0 = input.LA(1);
-
-            if ( (LA97_0==99) ) {
-                int LA97_1 = input.LA(2);
-
-                if ( (LA97_1==26||LA97_1==29||LA97_1==37||LA97_1==43||(LA97_1>=49 && LA97_1<=52)||(LA97_1>=120 && LA97_1<=127)) ) {
-                    alt97=1;
-                }
-            }
-            switch (alt97) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7687:1: ( rule__AttributeCS__UnorderedGroup_5 )?
+            int alt111=2;
+            alt111 = dfa111.predict(input);
+            switch (alt111) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7529:2: rule__AttributeCS__Group_5__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7687:2: rule__AttributeCS__UnorderedGroup_5
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5__0_in_rule__AttributeCS__Group__5__Impl16415);
-                    rule__AttributeCS__Group_5__0();
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__UnorderedGroup_5_in_rule__AttributeCS__Group__5__Impl16575);
+                    rule__AttributeCS__UnorderedGroup_5();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -25308,7 +25405,7 @@
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getGroup_5()); 
+               after(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()); 
             }
 
             }
@@ -25332,16 +25429,16 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7539:1: rule__AttributeCS__Group__6 : rule__AttributeCS__Group__6__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7697:1: rule__AttributeCS__Group__6 : rule__AttributeCS__Group__6__Impl ;
     public final void rule__AttributeCS__Group__6() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7543:1: ( rule__AttributeCS__Group__6__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7544:2: rule__AttributeCS__Group__6__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7701:1: ( rule__AttributeCS__Group__6__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7702:2: rule__AttributeCS__Group__6__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__6__Impl_in_rule__AttributeCS__Group__616446);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group__6__Impl_in_rule__AttributeCS__Group__616606);
             rule__AttributeCS__Group__6__Impl();
 
             state._fsp--;
@@ -25365,25 +25462,25 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group__6__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7550:1: rule__AttributeCS__Group__6__Impl : ( ( rule__AttributeCS__Alternatives_6 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7708:1: rule__AttributeCS__Group__6__Impl : ( ( rule__AttributeCS__Alternatives_6 ) ) ;
     public final void rule__AttributeCS__Group__6__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7554:1: ( ( ( rule__AttributeCS__Alternatives_6 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7555:1: ( ( rule__AttributeCS__Alternatives_6 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7712:1: ( ( ( rule__AttributeCS__Alternatives_6 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7713:1: ( ( rule__AttributeCS__Alternatives_6 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7555:1: ( ( rule__AttributeCS__Alternatives_6 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7556:1: ( rule__AttributeCS__Alternatives_6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7713:1: ( ( rule__AttributeCS__Alternatives_6 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7714:1: ( rule__AttributeCS__Alternatives_6 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getAlternatives_6()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7557:1: ( rule__AttributeCS__Alternatives_6 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7557:2: rule__AttributeCS__Alternatives_6
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7715:1: ( rule__AttributeCS__Alternatives_6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7715:2: rule__AttributeCS__Alternatives_6
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_6_in_rule__AttributeCS__Group__6__Impl16473);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_6_in_rule__AttributeCS__Group__6__Impl16633);
             rule__AttributeCS__Alternatives_6();
 
             state._fsp--;
@@ -25415,390 +25512,22 @@
     // $ANTLR end "rule__AttributeCS__Group__6__Impl"
 
 
-    // $ANTLR start "rule__AttributeCS__Group_0_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7581:1: rule__AttributeCS__Group_0_0__0 : rule__AttributeCS__Group_0_0__0__Impl rule__AttributeCS__Group_0_0__1 ;
-    public final void rule__AttributeCS__Group_0_0__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7585:1: ( rule__AttributeCS__Group_0_0__0__Impl rule__AttributeCS__Group_0_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7586:2: rule__AttributeCS__Group_0_0__0__Impl rule__AttributeCS__Group_0_0__1
-            {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_0_0__0__Impl_in_rule__AttributeCS__Group_0_0__016517);
-            rule__AttributeCS__Group_0_0__0__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_0_0__1_in_rule__AttributeCS__Group_0_0__016520);
-            rule__AttributeCS__Group_0_0__1();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_0_0__0"
-
-
-    // $ANTLR start "rule__AttributeCS__Group_0_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7593:1: rule__AttributeCS__Group_0_0__0__Impl : ( ( rule__AttributeCS__QualifiersAssignment_0_0_0 ) ) ;
-    public final void rule__AttributeCS__Group_0_0__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7597:1: ( ( ( rule__AttributeCS__QualifiersAssignment_0_0_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7598:1: ( ( rule__AttributeCS__QualifiersAssignment_0_0_0 ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7598:1: ( ( rule__AttributeCS__QualifiersAssignment_0_0_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7599:1: ( rule__AttributeCS__QualifiersAssignment_0_0_0 )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7600:1: ( rule__AttributeCS__QualifiersAssignment_0_0_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7600:2: rule__AttributeCS__QualifiersAssignment_0_0_0
-            {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_0_0_0_in_rule__AttributeCS__Group_0_0__0__Impl16547);
-            rule__AttributeCS__QualifiersAssignment_0_0_0();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_0_0__0__Impl"
-
-
-    // $ANTLR start "rule__AttributeCS__Group_0_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7610:1: rule__AttributeCS__Group_0_0__1 : rule__AttributeCS__Group_0_0__1__Impl ;
-    public final void rule__AttributeCS__Group_0_0__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7614:1: ( rule__AttributeCS__Group_0_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7615:2: rule__AttributeCS__Group_0_0__1__Impl
-            {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_0_0__1__Impl_in_rule__AttributeCS__Group_0_0__116577);
-            rule__AttributeCS__Group_0_0__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_0_0__1"
-
-
-    // $ANTLR start "rule__AttributeCS__Group_0_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7621:1: rule__AttributeCS__Group_0_0__1__Impl : ( ( rule__AttributeCS__QualifiersAssignment_0_0_1 )? ) ;
-    public final void rule__AttributeCS__Group_0_0__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7625:1: ( ( ( rule__AttributeCS__QualifiersAssignment_0_0_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7626:1: ( ( rule__AttributeCS__QualifiersAssignment_0_0_1 )? )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7626:1: ( ( rule__AttributeCS__QualifiersAssignment_0_0_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7627:1: ( rule__AttributeCS__QualifiersAssignment_0_0_1 )?
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_1()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7628:1: ( rule__AttributeCS__QualifiersAssignment_0_0_1 )?
-            int alt98=2;
-            int LA98_0 = input.LA(1);
-
-            if ( (LA98_0==24) ) {
-                alt98=1;
-            }
-            switch (alt98) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7628:2: rule__AttributeCS__QualifiersAssignment_0_0_1
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_0_0_1_in_rule__AttributeCS__Group_0_0__1__Impl16604);
-                    rule__AttributeCS__QualifiersAssignment_0_0_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_0_1()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_0_0__1__Impl"
-
-
-    // $ANTLR start "rule__AttributeCS__Group_0_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7642:1: rule__AttributeCS__Group_0_1__0 : rule__AttributeCS__Group_0_1__0__Impl rule__AttributeCS__Group_0_1__1 ;
-    public final void rule__AttributeCS__Group_0_1__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7646:1: ( rule__AttributeCS__Group_0_1__0__Impl rule__AttributeCS__Group_0_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7647:2: rule__AttributeCS__Group_0_1__0__Impl rule__AttributeCS__Group_0_1__1
-            {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_0_1__0__Impl_in_rule__AttributeCS__Group_0_1__016639);
-            rule__AttributeCS__Group_0_1__0__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_0_1__1_in_rule__AttributeCS__Group_0_1__016642);
-            rule__AttributeCS__Group_0_1__1();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_0_1__0"
-
-
-    // $ANTLR start "rule__AttributeCS__Group_0_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7654:1: rule__AttributeCS__Group_0_1__0__Impl : ( ( rule__AttributeCS__QualifiersAssignment_0_1_0 ) ) ;
-    public final void rule__AttributeCS__Group_0_1__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7658:1: ( ( ( rule__AttributeCS__QualifiersAssignment_0_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7659:1: ( ( rule__AttributeCS__QualifiersAssignment_0_1_0 ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7659:1: ( ( rule__AttributeCS__QualifiersAssignment_0_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7660:1: ( rule__AttributeCS__QualifiersAssignment_0_1_0 )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7661:1: ( rule__AttributeCS__QualifiersAssignment_0_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7661:2: rule__AttributeCS__QualifiersAssignment_0_1_0
-            {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_0_1_0_in_rule__AttributeCS__Group_0_1__0__Impl16669);
-            rule__AttributeCS__QualifiersAssignment_0_1_0();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_0_1__0__Impl"
-
-
-    // $ANTLR start "rule__AttributeCS__Group_0_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7671:1: rule__AttributeCS__Group_0_1__1 : rule__AttributeCS__Group_0_1__1__Impl ;
-    public final void rule__AttributeCS__Group_0_1__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7675:1: ( rule__AttributeCS__Group_0_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7676:2: rule__AttributeCS__Group_0_1__1__Impl
-            {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_0_1__1__Impl_in_rule__AttributeCS__Group_0_1__116699);
-            rule__AttributeCS__Group_0_1__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_0_1__1"
-
-
-    // $ANTLR start "rule__AttributeCS__Group_0_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7682:1: rule__AttributeCS__Group_0_1__1__Impl : ( ( rule__AttributeCS__QualifiersAssignment_0_1_1 )? ) ;
-    public final void rule__AttributeCS__Group_0_1__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7686:1: ( ( ( rule__AttributeCS__QualifiersAssignment_0_1_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7687:1: ( ( rule__AttributeCS__QualifiersAssignment_0_1_1 )? )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7687:1: ( ( rule__AttributeCS__QualifiersAssignment_0_1_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7688:1: ( rule__AttributeCS__QualifiersAssignment_0_1_1 )?
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_1()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7689:1: ( rule__AttributeCS__QualifiersAssignment_0_1_1 )?
-            int alt99=2;
-            int LA99_0 = input.LA(1);
-
-            if ( (LA99_0==46) ) {
-                alt99=1;
-            }
-            switch (alt99) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7689:2: rule__AttributeCS__QualifiersAssignment_0_1_1
-                    {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__QualifiersAssignment_0_1_1_in_rule__AttributeCS__Group_0_1__1__Impl16726);
-                    rule__AttributeCS__QualifiersAssignment_0_1_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersAssignment_0_1_1()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_0_1__1__Impl"
-
-
     // $ANTLR start "rule__AttributeCS__Group_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7703:1: rule__AttributeCS__Group_3__0 : rule__AttributeCS__Group_3__0__Impl rule__AttributeCS__Group_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7739:1: rule__AttributeCS__Group_3__0 : rule__AttributeCS__Group_3__0__Impl rule__AttributeCS__Group_3__1 ;
     public final void rule__AttributeCS__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7707:1: ( rule__AttributeCS__Group_3__0__Impl rule__AttributeCS__Group_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7708:2: rule__AttributeCS__Group_3__0__Impl rule__AttributeCS__Group_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7743:1: ( rule__AttributeCS__Group_3__0__Impl rule__AttributeCS__Group_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7744:2: rule__AttributeCS__Group_3__0__Impl rule__AttributeCS__Group_3__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_3__0__Impl_in_rule__AttributeCS__Group_3__016761);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_3__0__Impl_in_rule__AttributeCS__Group_3__016677);
             rule__AttributeCS__Group_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_3__1_in_rule__AttributeCS__Group_3__016764);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_3__1_in_rule__AttributeCS__Group_3__016680);
             rule__AttributeCS__Group_3__1();
 
             state._fsp--;
@@ -25822,22 +25551,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7715:1: rule__AttributeCS__Group_3__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7751:1: rule__AttributeCS__Group_3__0__Impl : ( ':' ) ;
     public final void rule__AttributeCS__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7719:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7720:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7755:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7756:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7720:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7721:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7756:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7757:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getColonKeyword_3_0()); 
             }
-            match(input,97,FollowSets000.FOLLOW_97_in_rule__AttributeCS__Group_3__0__Impl16792); if (state.failed) return ;
+            match(input,106,FollowSets000.FOLLOW_106_in_rule__AttributeCS__Group_3__0__Impl16708); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getColonKeyword_3_0()); 
             }
@@ -25863,16 +25592,16 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7734:1: rule__AttributeCS__Group_3__1 : rule__AttributeCS__Group_3__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7770:1: rule__AttributeCS__Group_3__1 : rule__AttributeCS__Group_3__1__Impl ;
     public final void rule__AttributeCS__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7738:1: ( rule__AttributeCS__Group_3__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7739:2: rule__AttributeCS__Group_3__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7774:1: ( rule__AttributeCS__Group_3__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7775:2: rule__AttributeCS__Group_3__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_3__1__Impl_in_rule__AttributeCS__Group_3__116823);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_3__1__Impl_in_rule__AttributeCS__Group_3__116739);
             rule__AttributeCS__Group_3__1__Impl();
 
             state._fsp--;
@@ -25896,25 +25625,25 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7745:1: rule__AttributeCS__Group_3__1__Impl : ( ( rule__AttributeCS__OwnedTypeAssignment_3_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7781:1: rule__AttributeCS__Group_3__1__Impl : ( ( rule__AttributeCS__OwnedTypeAssignment_3_1 ) ) ;
     public final void rule__AttributeCS__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7749:1: ( ( ( rule__AttributeCS__OwnedTypeAssignment_3_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7750:1: ( ( rule__AttributeCS__OwnedTypeAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7785:1: ( ( ( rule__AttributeCS__OwnedTypeAssignment_3_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7786:1: ( ( rule__AttributeCS__OwnedTypeAssignment_3_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7750:1: ( ( rule__AttributeCS__OwnedTypeAssignment_3_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7751:1: ( rule__AttributeCS__OwnedTypeAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7786:1: ( ( rule__AttributeCS__OwnedTypeAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7787:1: ( rule__AttributeCS__OwnedTypeAssignment_3_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getOwnedTypeAssignment_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7752:1: ( rule__AttributeCS__OwnedTypeAssignment_3_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7752:2: rule__AttributeCS__OwnedTypeAssignment_3_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7788:1: ( rule__AttributeCS__OwnedTypeAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7788:2: rule__AttributeCS__OwnedTypeAssignment_3_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__OwnedTypeAssignment_3_1_in_rule__AttributeCS__Group_3__1__Impl16850);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__OwnedTypeAssignment_3_1_in_rule__AttributeCS__Group_3__1__Impl16766);
             rule__AttributeCS__OwnedTypeAssignment_3_1();
 
             state._fsp--;
@@ -25947,21 +25676,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_4__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7766:1: rule__AttributeCS__Group_4__0 : rule__AttributeCS__Group_4__0__Impl rule__AttributeCS__Group_4__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7802:1: rule__AttributeCS__Group_4__0 : rule__AttributeCS__Group_4__0__Impl rule__AttributeCS__Group_4__1 ;
     public final void rule__AttributeCS__Group_4__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7770:1: ( rule__AttributeCS__Group_4__0__Impl rule__AttributeCS__Group_4__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7771:2: rule__AttributeCS__Group_4__0__Impl rule__AttributeCS__Group_4__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7806:1: ( rule__AttributeCS__Group_4__0__Impl rule__AttributeCS__Group_4__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7807:2: rule__AttributeCS__Group_4__0__Impl rule__AttributeCS__Group_4__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_4__0__Impl_in_rule__AttributeCS__Group_4__016884);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_4__0__Impl_in_rule__AttributeCS__Group_4__016800);
             rule__AttributeCS__Group_4__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_4__1_in_rule__AttributeCS__Group_4__016887);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_4__1_in_rule__AttributeCS__Group_4__016803);
             rule__AttributeCS__Group_4__1();
 
             state._fsp--;
@@ -25985,22 +25714,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_4__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7778:1: rule__AttributeCS__Group_4__0__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7814:1: rule__AttributeCS__Group_4__0__Impl : ( '=' ) ;
     public final void rule__AttributeCS__Group_4__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7782:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7783:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7818:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7819:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7783:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7784:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7819:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7820:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getEqualsSignKeyword_4_0()); 
             }
-            match(input,70,FollowSets000.FOLLOW_70_in_rule__AttributeCS__Group_4__0__Impl16915); if (state.failed) return ;
+            match(input,79,FollowSets000.FOLLOW_79_in_rule__AttributeCS__Group_4__0__Impl16831); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getEqualsSignKeyword_4_0()); 
             }
@@ -26026,16 +25755,16 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_4__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7797:1: rule__AttributeCS__Group_4__1 : rule__AttributeCS__Group_4__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7833:1: rule__AttributeCS__Group_4__1 : rule__AttributeCS__Group_4__1__Impl ;
     public final void rule__AttributeCS__Group_4__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7801:1: ( rule__AttributeCS__Group_4__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7802:2: rule__AttributeCS__Group_4__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7837:1: ( rule__AttributeCS__Group_4__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7838:2: rule__AttributeCS__Group_4__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_4__1__Impl_in_rule__AttributeCS__Group_4__116946);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_4__1__Impl_in_rule__AttributeCS__Group_4__116862);
             rule__AttributeCS__Group_4__1__Impl();
 
             state._fsp--;
@@ -26059,25 +25788,25 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_4__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7808:1: rule__AttributeCS__Group_4__1__Impl : ( ( rule__AttributeCS__DefaultAssignment_4_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7844:1: rule__AttributeCS__Group_4__1__Impl : ( ( rule__AttributeCS__DefaultAssignment_4_1 ) ) ;
     public final void rule__AttributeCS__Group_4__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7812:1: ( ( ( rule__AttributeCS__DefaultAssignment_4_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7813:1: ( ( rule__AttributeCS__DefaultAssignment_4_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7848:1: ( ( ( rule__AttributeCS__DefaultAssignment_4_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7849:1: ( ( rule__AttributeCS__DefaultAssignment_4_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7813:1: ( ( rule__AttributeCS__DefaultAssignment_4_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7814:1: ( rule__AttributeCS__DefaultAssignment_4_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7849:1: ( ( rule__AttributeCS__DefaultAssignment_4_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7850:1: ( rule__AttributeCS__DefaultAssignment_4_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getDefaultAssignment_4_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7815:1: ( rule__AttributeCS__DefaultAssignment_4_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7815:2: rule__AttributeCS__DefaultAssignment_4_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7851:1: ( rule__AttributeCS__DefaultAssignment_4_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7851:2: rule__AttributeCS__DefaultAssignment_4_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__DefaultAssignment_4_1_in_rule__AttributeCS__Group_4__1__Impl16973);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__DefaultAssignment_4_1_in_rule__AttributeCS__Group_4__1__Impl16889);
             rule__AttributeCS__DefaultAssignment_4_1();
 
             state._fsp--;
@@ -26109,23 +25838,23 @@
     // $ANTLR end "rule__AttributeCS__Group_4__1__Impl"
 
 
-    // $ANTLR start "rule__AttributeCS__Group_5__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7829:1: rule__AttributeCS__Group_5__0 : rule__AttributeCS__Group_5__0__Impl rule__AttributeCS__Group_5__1 ;
-    public final void rule__AttributeCS__Group_5__0() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__Group_5_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7865:1: rule__AttributeCS__Group_5_0__0 : rule__AttributeCS__Group_5_0__0__Impl rule__AttributeCS__Group_5_0__1 ;
+    public final void rule__AttributeCS__Group_5_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7833:1: ( rule__AttributeCS__Group_5__0__Impl rule__AttributeCS__Group_5__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7834:2: rule__AttributeCS__Group_5__0__Impl rule__AttributeCS__Group_5__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7869:1: ( rule__AttributeCS__Group_5_0__0__Impl rule__AttributeCS__Group_5_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7870:2: rule__AttributeCS__Group_5_0__0__Impl rule__AttributeCS__Group_5_0__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5__0__Impl_in_rule__AttributeCS__Group_5__017007);
-            rule__AttributeCS__Group_5__0__Impl();
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_0__0__Impl_in_rule__AttributeCS__Group_5_0__016923);
+            rule__AttributeCS__Group_5_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5__1_in_rule__AttributeCS__Group_5__017010);
-            rule__AttributeCS__Group_5__1();
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_0__1_in_rule__AttributeCS__Group_5_0__016926);
+            rule__AttributeCS__Group_5_0__1();
 
             state._fsp--;
             if (state.failed) return ;
@@ -26144,28 +25873,28 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__Group_5__0"
+    // $ANTLR end "rule__AttributeCS__Group_5_0__0"
 
 
-    // $ANTLR start "rule__AttributeCS__Group_5__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7841:1: rule__AttributeCS__Group_5__0__Impl : ( '{' ) ;
-    public final void rule__AttributeCS__Group_5__0__Impl() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__Group_5_0__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7877:1: rule__AttributeCS__Group_5_0__0__Impl : ( '{' ) ;
+    public final void rule__AttributeCS__Group_5_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7845:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7846:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7881:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7882:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7846:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7847:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7882:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7883:1: '{'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0()); 
+               before(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()); 
             }
-            match(input,99,FollowSets000.FOLLOW_99_in_rule__AttributeCS__Group_5__0__Impl17038); if (state.failed) return ;
+            match(input,108,FollowSets000.FOLLOW_108_in_rule__AttributeCS__Group_5_0__0__Impl16954); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0()); 
+               after(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()); 
             }
 
             }
@@ -26185,26 +25914,21 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__Group_5__0__Impl"
+    // $ANTLR end "rule__AttributeCS__Group_5_0__0__Impl"
 
 
-    // $ANTLR start "rule__AttributeCS__Group_5__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7860:1: rule__AttributeCS__Group_5__1 : rule__AttributeCS__Group_5__1__Impl rule__AttributeCS__Group_5__2 ;
-    public final void rule__AttributeCS__Group_5__1() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__Group_5_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7896:1: rule__AttributeCS__Group_5_0__1 : rule__AttributeCS__Group_5_0__1__Impl ;
+    public final void rule__AttributeCS__Group_5_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7864:1: ( rule__AttributeCS__Group_5__1__Impl rule__AttributeCS__Group_5__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7865:2: rule__AttributeCS__Group_5__1__Impl rule__AttributeCS__Group_5__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7900:1: ( rule__AttributeCS__Group_5_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7901:2: rule__AttributeCS__Group_5_0__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5__1__Impl_in_rule__AttributeCS__Group_5__117069);
-            rule__AttributeCS__Group_5__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5__2_in_rule__AttributeCS__Group_5__117072);
-            rule__AttributeCS__Group_5__2();
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_0__1__Impl_in_rule__AttributeCS__Group_5_0__116985);
+            rule__AttributeCS__Group_5_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
@@ -26223,159 +25947,49 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__Group_5__1"
+    // $ANTLR end "rule__AttributeCS__Group_5_0__1"
 
 
-    // $ANTLR start "rule__AttributeCS__Group_5__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7872:1: rule__AttributeCS__Group_5__1__Impl : ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ( ( rule__AttributeCS__Group_5_1__0 )* ) ) ;
-    public final void rule__AttributeCS__Group_5__1__Impl() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__Group_5_0__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7907:1: rule__AttributeCS__Group_5_0__1__Impl : ( ( rule__AttributeCS__Group_5_0_1__0 )? ) ;
+    public final void rule__AttributeCS__Group_5_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7876:1: ( ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ( ( rule__AttributeCS__Group_5_1__0 )* ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7877:1: ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ( ( rule__AttributeCS__Group_5_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7911:1: ( ( ( rule__AttributeCS__Group_5_0_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7912:1: ( ( rule__AttributeCS__Group_5_0_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7877:1: ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ( ( rule__AttributeCS__Group_5_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7878:1: ( ( rule__AttributeCS__Group_5_1__0 ) ) ( ( rule__AttributeCS__Group_5_1__0 )* )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7878:1: ( ( rule__AttributeCS__Group_5_1__0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7879:1: ( rule__AttributeCS__Group_5_1__0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7912:1: ( ( rule__AttributeCS__Group_5_0_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7913:1: ( rule__AttributeCS__Group_5_0_1__0 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getGroup_5_1()); 
+               before(grammarAccess.getAttributeCSAccess().getGroup_5_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7880:1: ( rule__AttributeCS__Group_5_1__0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7880:2: rule__AttributeCS__Group_5_1__0
-            {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_1__0_in_rule__AttributeCS__Group_5__1__Impl17101);
-            rule__AttributeCS__Group_5_1__0();
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7914:1: ( rule__AttributeCS__Group_5_0_1__0 )?
+            int alt112=2;
+            int LA112_0 = input.LA(1);
 
-            state._fsp--;
-            if (state.failed) return ;
+            if ( (LA112_0==26||LA112_0==54) ) {
+                alt112=1;
+            }
+            switch (alt112) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7914:2: rule__AttributeCS__Group_5_0_1__0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_0_1__0_in_rule__AttributeCS__Group_5_0__1__Impl17012);
+                    rule__AttributeCS__Group_5_0_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getGroup_5_1()); 
-            }
-
-            }
-
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7883:1: ( ( rule__AttributeCS__Group_5_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7884:1: ( rule__AttributeCS__Group_5_1__0 )*
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getGroup_5_1()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7885:1: ( rule__AttributeCS__Group_5_1__0 )*
-            loop100:
-            do {
-                int alt100=2;
-                int LA100_0 = input.LA(1);
-
-                if ( (LA100_0==26||LA100_0==29||LA100_0==37||LA100_0==43||(LA100_0>=49 && LA100_0<=52)||(LA100_0>=120 && LA100_0<=127)) ) {
-                    alt100=1;
-                }
-
-
-                switch (alt100) {
-            	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7885:2: rule__AttributeCS__Group_5_1__0
-            	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_1__0_in_rule__AttributeCS__Group_5__1__Impl17113);
-            	    rule__AttributeCS__Group_5_1__0();
-
-            	    state._fsp--;
-            	    if (state.failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop100;
-                }
-            } while (true);
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getGroup_5_1()); 
-            }
-
-            }
-
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_5__1__Impl"
-
-
-    // $ANTLR start "rule__AttributeCS__Group_5__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7896:1: rule__AttributeCS__Group_5__2 : rule__AttributeCS__Group_5__2__Impl ;
-    public final void rule__AttributeCS__Group_5__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7900:1: ( rule__AttributeCS__Group_5__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7901:2: rule__AttributeCS__Group_5__2__Impl
-            {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5__2__Impl_in_rule__AttributeCS__Group_5__217146);
-            rule__AttributeCS__Group_5__2__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__Group_5__2"
-
-
-    // $ANTLR start "rule__AttributeCS__Group_5__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7907:1: rule__AttributeCS__Group_5__2__Impl : ( '}' ) ;
-    public final void rule__AttributeCS__Group_5__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7911:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7912:1: ( '}' )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7912:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7913:1: '}'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_2()); 
-            }
-            match(input,100,FollowSets000.FOLLOW_100_in_rule__AttributeCS__Group_5__2__Impl17174); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_2()); 
+               after(grammarAccess.getAttributeCSAccess().getGroup_5_0_1()); 
             }
 
             }
@@ -26395,25 +26009,205 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__Group_5__2__Impl"
+    // $ANTLR end "rule__AttributeCS__Group_5_0__1__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_0_1__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7928:1: rule__AttributeCS__Group_5_0_1__0 : rule__AttributeCS__Group_5_0_1__0__Impl rule__AttributeCS__Group_5_0_1__1 ;
+    public final void rule__AttributeCS__Group_5_0_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7932:1: ( rule__AttributeCS__Group_5_0_1__0__Impl rule__AttributeCS__Group_5_0_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7933:2: rule__AttributeCS__Group_5_0_1__0__Impl rule__AttributeCS__Group_5_0_1__1
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_0_1__0__Impl_in_rule__AttributeCS__Group_5_0_1__017047);
+            rule__AttributeCS__Group_5_0_1__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_0_1__1_in_rule__AttributeCS__Group_5_0_1__017050);
+            rule__AttributeCS__Group_5_0_1__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_0_1__0"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_0_1__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7940:1: rule__AttributeCS__Group_5_0_1__0__Impl : ( ( rule__AttributeCS__Alternatives_5_0_1_0 ) ) ;
+    public final void rule__AttributeCS__Group_5_0_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7944:1: ( ( ( rule__AttributeCS__Alternatives_5_0_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7945:1: ( ( rule__AttributeCS__Alternatives_5_0_1_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7945:1: ( ( rule__AttributeCS__Alternatives_5_0_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7946:1: ( rule__AttributeCS__Alternatives_5_0_1_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getAlternatives_5_0_1_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7947:1: ( rule__AttributeCS__Alternatives_5_0_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7947:2: rule__AttributeCS__Alternatives_5_0_1_0
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_5_0_1_0_in_rule__AttributeCS__Group_5_0_1__0__Impl17077);
+            rule__AttributeCS__Alternatives_5_0_1_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getAlternatives_5_0_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_0_1__0__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_0_1__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7957:1: rule__AttributeCS__Group_5_0_1__1 : rule__AttributeCS__Group_5_0_1__1__Impl ;
+    public final void rule__AttributeCS__Group_5_0_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7961:1: ( rule__AttributeCS__Group_5_0_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7962:2: rule__AttributeCS__Group_5_0_1__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_0_1__1__Impl_in_rule__AttributeCS__Group_5_0_1__117107);
+            rule__AttributeCS__Group_5_0_1__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_0_1__1"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_0_1__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7968:1: rule__AttributeCS__Group_5_0_1__1__Impl : ( ( ',' )? ) ;
+    public final void rule__AttributeCS__Group_5_0_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7972:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7973:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7973:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7974:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7975:1: ( ',' )?
+            int alt113=2;
+            int LA113_0 = input.LA(1);
+
+            if ( (LA113_0==107) ) {
+                alt113=1;
+            }
+            switch (alt113) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7976:2: ','
+                    {
+                    match(input,107,FollowSets000.FOLLOW_107_in_rule__AttributeCS__Group_5_0_1__1__Impl17136); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_0_1__1__Impl"
 
 
     // $ANTLR start "rule__AttributeCS__Group_5_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7932:1: rule__AttributeCS__Group_5_1__0 : rule__AttributeCS__Group_5_1__0__Impl rule__AttributeCS__Group_5_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7991:1: rule__AttributeCS__Group_5_1__0 : rule__AttributeCS__Group_5_1__0__Impl rule__AttributeCS__Group_5_1__1 ;
     public final void rule__AttributeCS__Group_5_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7936:1: ( rule__AttributeCS__Group_5_1__0__Impl rule__AttributeCS__Group_5_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7937:2: rule__AttributeCS__Group_5_1__0__Impl rule__AttributeCS__Group_5_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7995:1: ( rule__AttributeCS__Group_5_1__0__Impl rule__AttributeCS__Group_5_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7996:2: rule__AttributeCS__Group_5_1__0__Impl rule__AttributeCS__Group_5_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_1__0__Impl_in_rule__AttributeCS__Group_5_1__017211);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_1__0__Impl_in_rule__AttributeCS__Group_5_1__017173);
             rule__AttributeCS__Group_5_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_1__1_in_rule__AttributeCS__Group_5_1__017214);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_1__1_in_rule__AttributeCS__Group_5_1__017176);
             rule__AttributeCS__Group_5_1__1();
 
             state._fsp--;
@@ -26437,25 +26231,25 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_5_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7944:1: rule__AttributeCS__Group_5_1__0__Impl : ( ( rule__AttributeCS__Alternatives_5_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8003:1: rule__AttributeCS__Group_5_1__0__Impl : ( ( rule__AttributeCS__Alternatives_5_1_0 ) ) ;
     public final void rule__AttributeCS__Group_5_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7948:1: ( ( ( rule__AttributeCS__Alternatives_5_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7949:1: ( ( rule__AttributeCS__Alternatives_5_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8007:1: ( ( ( rule__AttributeCS__Alternatives_5_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8008:1: ( ( rule__AttributeCS__Alternatives_5_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7949:1: ( ( rule__AttributeCS__Alternatives_5_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7950:1: ( rule__AttributeCS__Alternatives_5_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8008:1: ( ( rule__AttributeCS__Alternatives_5_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8009:1: ( rule__AttributeCS__Alternatives_5_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getAlternatives_5_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7951:1: ( rule__AttributeCS__Alternatives_5_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7951:2: rule__AttributeCS__Alternatives_5_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8010:1: ( rule__AttributeCS__Alternatives_5_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8010:2: rule__AttributeCS__Alternatives_5_1_0
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_5_1_0_in_rule__AttributeCS__Group_5_1__0__Impl17241);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_5_1_0_in_rule__AttributeCS__Group_5_1__0__Impl17203);
             rule__AttributeCS__Alternatives_5_1_0();
 
             state._fsp--;
@@ -26488,16 +26282,16 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_5_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7961:1: rule__AttributeCS__Group_5_1__1 : rule__AttributeCS__Group_5_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8020:1: rule__AttributeCS__Group_5_1__1 : rule__AttributeCS__Group_5_1__1__Impl ;
     public final void rule__AttributeCS__Group_5_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7965:1: ( rule__AttributeCS__Group_5_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7966:2: rule__AttributeCS__Group_5_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8024:1: ( rule__AttributeCS__Group_5_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8025:2: rule__AttributeCS__Group_5_1__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_1__1__Impl_in_rule__AttributeCS__Group_5_1__117271);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_1__1__Impl_in_rule__AttributeCS__Group_5_1__117233);
             rule__AttributeCS__Group_5_1__1__Impl();
 
             state._fsp--;
@@ -26521,33 +26315,33 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_5_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7972:1: rule__AttributeCS__Group_5_1__1__Impl : ( ( ',' )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8031:1: rule__AttributeCS__Group_5_1__1__Impl : ( ( ',' )? ) ;
     public final void rule__AttributeCS__Group_5_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7976:1: ( ( ( ',' )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7977:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8035:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8036:1: ( ( ',' )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7977:1: ( ( ',' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7978:1: ( ',' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8036:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8037:1: ( ',' )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7979:1: ( ',' )?
-            int alt101=2;
-            int LA101_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8038:1: ( ',' )?
+            int alt114=2;
+            int LA114_0 = input.LA(1);
 
-            if ( (LA101_0==98) ) {
-                alt101=1;
+            if ( (LA114_0==107) ) {
+                alt114=1;
             }
-            switch (alt101) {
+            switch (alt114) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7980:2: ','
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8039:2: ','
                     {
-                    match(input,98,FollowSets000.FOLLOW_98_in_rule__AttributeCS__Group_5_1__1__Impl17300); if (state.failed) return ;
+                    match(input,107,FollowSets000.FOLLOW_107_in_rule__AttributeCS__Group_5_1__1__Impl17262); if (state.failed) return ;
 
                     }
                     break;
@@ -26578,22 +26372,1276 @@
     // $ANTLR end "rule__AttributeCS__Group_5_1__1__Impl"
 
 
+    // $ANTLR start "rule__AttributeCS__Group_5_2__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8054:1: rule__AttributeCS__Group_5_2__0 : rule__AttributeCS__Group_5_2__0__Impl rule__AttributeCS__Group_5_2__1 ;
+    public final void rule__AttributeCS__Group_5_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8058:1: ( rule__AttributeCS__Group_5_2__0__Impl rule__AttributeCS__Group_5_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8059:2: rule__AttributeCS__Group_5_2__0__Impl rule__AttributeCS__Group_5_2__1
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_2__0__Impl_in_rule__AttributeCS__Group_5_2__017299);
+            rule__AttributeCS__Group_5_2__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_2__1_in_rule__AttributeCS__Group_5_2__017302);
+            rule__AttributeCS__Group_5_2__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_2__0"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_2__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8066:1: rule__AttributeCS__Group_5_2__0__Impl : ( ( rule__AttributeCS__Alternatives_5_2_0 ) ) ;
+    public final void rule__AttributeCS__Group_5_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8070:1: ( ( ( rule__AttributeCS__Alternatives_5_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8071:1: ( ( rule__AttributeCS__Alternatives_5_2_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8071:1: ( ( rule__AttributeCS__Alternatives_5_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8072:1: ( rule__AttributeCS__Alternatives_5_2_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getAlternatives_5_2_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8073:1: ( rule__AttributeCS__Alternatives_5_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8073:2: rule__AttributeCS__Alternatives_5_2_0
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_5_2_0_in_rule__AttributeCS__Group_5_2__0__Impl17329);
+            rule__AttributeCS__Alternatives_5_2_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getAlternatives_5_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_2__0__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_2__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8083:1: rule__AttributeCS__Group_5_2__1 : rule__AttributeCS__Group_5_2__1__Impl ;
+    public final void rule__AttributeCS__Group_5_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8087:1: ( rule__AttributeCS__Group_5_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8088:2: rule__AttributeCS__Group_5_2__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_2__1__Impl_in_rule__AttributeCS__Group_5_2__117359);
+            rule__AttributeCS__Group_5_2__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_2__1"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_2__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8094:1: rule__AttributeCS__Group_5_2__1__Impl : ( ( ',' )? ) ;
+    public final void rule__AttributeCS__Group_5_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8098:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8099:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8099:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8100:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8101:1: ( ',' )?
+            int alt115=2;
+            int LA115_0 = input.LA(1);
+
+            if ( (LA115_0==107) ) {
+                alt115=1;
+            }
+            switch (alt115) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8102:2: ','
+                    {
+                    match(input,107,FollowSets000.FOLLOW_107_in_rule__AttributeCS__Group_5_2__1__Impl17388); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_2__1__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_3__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8117:1: rule__AttributeCS__Group_5_3__0 : rule__AttributeCS__Group_5_3__0__Impl rule__AttributeCS__Group_5_3__1 ;
+    public final void rule__AttributeCS__Group_5_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8121:1: ( rule__AttributeCS__Group_5_3__0__Impl rule__AttributeCS__Group_5_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8122:2: rule__AttributeCS__Group_5_3__0__Impl rule__AttributeCS__Group_5_3__1
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_3__0__Impl_in_rule__AttributeCS__Group_5_3__017425);
+            rule__AttributeCS__Group_5_3__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_3__1_in_rule__AttributeCS__Group_5_3__017428);
+            rule__AttributeCS__Group_5_3__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_3__0"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_3__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8129:1: rule__AttributeCS__Group_5_3__0__Impl : ( ( rule__AttributeCS__Alternatives_5_3_0 ) ) ;
+    public final void rule__AttributeCS__Group_5_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8133:1: ( ( ( rule__AttributeCS__Alternatives_5_3_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8134:1: ( ( rule__AttributeCS__Alternatives_5_3_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8134:1: ( ( rule__AttributeCS__Alternatives_5_3_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8135:1: ( rule__AttributeCS__Alternatives_5_3_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getAlternatives_5_3_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8136:1: ( rule__AttributeCS__Alternatives_5_3_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8136:2: rule__AttributeCS__Alternatives_5_3_0
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_5_3_0_in_rule__AttributeCS__Group_5_3__0__Impl17455);
+            rule__AttributeCS__Alternatives_5_3_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getAlternatives_5_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_3__0__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_3__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8146:1: rule__AttributeCS__Group_5_3__1 : rule__AttributeCS__Group_5_3__1__Impl ;
+    public final void rule__AttributeCS__Group_5_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8150:1: ( rule__AttributeCS__Group_5_3__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8151:2: rule__AttributeCS__Group_5_3__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_3__1__Impl_in_rule__AttributeCS__Group_5_3__117485);
+            rule__AttributeCS__Group_5_3__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_3__1"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_3__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8157:1: rule__AttributeCS__Group_5_3__1__Impl : ( ( ',' )? ) ;
+    public final void rule__AttributeCS__Group_5_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8161:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8162:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8162:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8163:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8164:1: ( ',' )?
+            int alt116=2;
+            int LA116_0 = input.LA(1);
+
+            if ( (LA116_0==107) ) {
+                alt116=1;
+            }
+            switch (alt116) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8165:2: ','
+                    {
+                    match(input,107,FollowSets000.FOLLOW_107_in_rule__AttributeCS__Group_5_3__1__Impl17514); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_3__1__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_4__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8180:1: rule__AttributeCS__Group_5_4__0 : rule__AttributeCS__Group_5_4__0__Impl rule__AttributeCS__Group_5_4__1 ;
+    public final void rule__AttributeCS__Group_5_4__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8184:1: ( rule__AttributeCS__Group_5_4__0__Impl rule__AttributeCS__Group_5_4__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8185:2: rule__AttributeCS__Group_5_4__0__Impl rule__AttributeCS__Group_5_4__1
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_4__0__Impl_in_rule__AttributeCS__Group_5_4__017551);
+            rule__AttributeCS__Group_5_4__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_4__1_in_rule__AttributeCS__Group_5_4__017554);
+            rule__AttributeCS__Group_5_4__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_4__0"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_4__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8192:1: rule__AttributeCS__Group_5_4__0__Impl : ( ( rule__AttributeCS__Alternatives_5_4_0 ) ) ;
+    public final void rule__AttributeCS__Group_5_4__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8196:1: ( ( ( rule__AttributeCS__Alternatives_5_4_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8197:1: ( ( rule__AttributeCS__Alternatives_5_4_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8197:1: ( ( rule__AttributeCS__Alternatives_5_4_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8198:1: ( rule__AttributeCS__Alternatives_5_4_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getAlternatives_5_4_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8199:1: ( rule__AttributeCS__Alternatives_5_4_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8199:2: rule__AttributeCS__Alternatives_5_4_0
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_5_4_0_in_rule__AttributeCS__Group_5_4__0__Impl17581);
+            rule__AttributeCS__Alternatives_5_4_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getAlternatives_5_4_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_4__0__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_4__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8209:1: rule__AttributeCS__Group_5_4__1 : rule__AttributeCS__Group_5_4__1__Impl ;
+    public final void rule__AttributeCS__Group_5_4__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8213:1: ( rule__AttributeCS__Group_5_4__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8214:2: rule__AttributeCS__Group_5_4__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_4__1__Impl_in_rule__AttributeCS__Group_5_4__117611);
+            rule__AttributeCS__Group_5_4__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_4__1"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_4__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8220:1: rule__AttributeCS__Group_5_4__1__Impl : ( ( ',' )? ) ;
+    public final void rule__AttributeCS__Group_5_4__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8224:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8225:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8225:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8226:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8227:1: ( ',' )?
+            int alt117=2;
+            int LA117_0 = input.LA(1);
+
+            if ( (LA117_0==107) ) {
+                alt117=1;
+            }
+            switch (alt117) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8228:2: ','
+                    {
+                    match(input,107,FollowSets000.FOLLOW_107_in_rule__AttributeCS__Group_5_4__1__Impl17640); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_4__1__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_5__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8243:1: rule__AttributeCS__Group_5_5__0 : rule__AttributeCS__Group_5_5__0__Impl rule__AttributeCS__Group_5_5__1 ;
+    public final void rule__AttributeCS__Group_5_5__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8247:1: ( rule__AttributeCS__Group_5_5__0__Impl rule__AttributeCS__Group_5_5__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8248:2: rule__AttributeCS__Group_5_5__0__Impl rule__AttributeCS__Group_5_5__1
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_5__0__Impl_in_rule__AttributeCS__Group_5_5__017677);
+            rule__AttributeCS__Group_5_5__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_5__1_in_rule__AttributeCS__Group_5_5__017680);
+            rule__AttributeCS__Group_5_5__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_5__0"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_5__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8255:1: rule__AttributeCS__Group_5_5__0__Impl : ( ( rule__AttributeCS__Alternatives_5_5_0 ) ) ;
+    public final void rule__AttributeCS__Group_5_5__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8259:1: ( ( ( rule__AttributeCS__Alternatives_5_5_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8260:1: ( ( rule__AttributeCS__Alternatives_5_5_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8260:1: ( ( rule__AttributeCS__Alternatives_5_5_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8261:1: ( rule__AttributeCS__Alternatives_5_5_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getAlternatives_5_5_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8262:1: ( rule__AttributeCS__Alternatives_5_5_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8262:2: rule__AttributeCS__Alternatives_5_5_0
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_5_5_0_in_rule__AttributeCS__Group_5_5__0__Impl17707);
+            rule__AttributeCS__Alternatives_5_5_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getAlternatives_5_5_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_5__0__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_5__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8272:1: rule__AttributeCS__Group_5_5__1 : rule__AttributeCS__Group_5_5__1__Impl ;
+    public final void rule__AttributeCS__Group_5_5__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8276:1: ( rule__AttributeCS__Group_5_5__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8277:2: rule__AttributeCS__Group_5_5__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_5__1__Impl_in_rule__AttributeCS__Group_5_5__117737);
+            rule__AttributeCS__Group_5_5__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_5__1"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_5__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8283:1: rule__AttributeCS__Group_5_5__1__Impl : ( ( ',' )? ) ;
+    public final void rule__AttributeCS__Group_5_5__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8287:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8288:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8288:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8289:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8290:1: ( ',' )?
+            int alt118=2;
+            int LA118_0 = input.LA(1);
+
+            if ( (LA118_0==107) ) {
+                alt118=1;
+            }
+            switch (alt118) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8291:2: ','
+                    {
+                    match(input,107,FollowSets000.FOLLOW_107_in_rule__AttributeCS__Group_5_5__1__Impl17766); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_5__1__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_6__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8306:1: rule__AttributeCS__Group_5_6__0 : rule__AttributeCS__Group_5_6__0__Impl rule__AttributeCS__Group_5_6__1 ;
+    public final void rule__AttributeCS__Group_5_6__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8310:1: ( rule__AttributeCS__Group_5_6__0__Impl rule__AttributeCS__Group_5_6__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8311:2: rule__AttributeCS__Group_5_6__0__Impl rule__AttributeCS__Group_5_6__1
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_6__0__Impl_in_rule__AttributeCS__Group_5_6__017803);
+            rule__AttributeCS__Group_5_6__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_6__1_in_rule__AttributeCS__Group_5_6__017806);
+            rule__AttributeCS__Group_5_6__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_6__0"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_6__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8318:1: rule__AttributeCS__Group_5_6__0__Impl : ( ( rule__AttributeCS__Alternatives_5_6_0 ) ) ;
+    public final void rule__AttributeCS__Group_5_6__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8322:1: ( ( ( rule__AttributeCS__Alternatives_5_6_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8323:1: ( ( rule__AttributeCS__Alternatives_5_6_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8323:1: ( ( rule__AttributeCS__Alternatives_5_6_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8324:1: ( rule__AttributeCS__Alternatives_5_6_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getAlternatives_5_6_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8325:1: ( rule__AttributeCS__Alternatives_5_6_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8325:2: rule__AttributeCS__Alternatives_5_6_0
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_5_6_0_in_rule__AttributeCS__Group_5_6__0__Impl17833);
+            rule__AttributeCS__Alternatives_5_6_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getAlternatives_5_6_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_6__0__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_6__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8335:1: rule__AttributeCS__Group_5_6__1 : rule__AttributeCS__Group_5_6__1__Impl ;
+    public final void rule__AttributeCS__Group_5_6__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8339:1: ( rule__AttributeCS__Group_5_6__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8340:2: rule__AttributeCS__Group_5_6__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_6__1__Impl_in_rule__AttributeCS__Group_5_6__117863);
+            rule__AttributeCS__Group_5_6__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_6__1"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_6__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8346:1: rule__AttributeCS__Group_5_6__1__Impl : ( ( ',' )? ) ;
+    public final void rule__AttributeCS__Group_5_6__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8350:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8351:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8351:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8352:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8353:1: ( ',' )?
+            int alt119=2;
+            int LA119_0 = input.LA(1);
+
+            if ( (LA119_0==107) ) {
+                alt119=1;
+            }
+            switch (alt119) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8354:2: ','
+                    {
+                    match(input,107,FollowSets000.FOLLOW_107_in_rule__AttributeCS__Group_5_6__1__Impl17892); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_6__1__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_7__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8369:1: rule__AttributeCS__Group_5_7__0 : rule__AttributeCS__Group_5_7__0__Impl rule__AttributeCS__Group_5_7__1 ;
+    public final void rule__AttributeCS__Group_5_7__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8373:1: ( rule__AttributeCS__Group_5_7__0__Impl rule__AttributeCS__Group_5_7__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8374:2: rule__AttributeCS__Group_5_7__0__Impl rule__AttributeCS__Group_5_7__1
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_7__0__Impl_in_rule__AttributeCS__Group_5_7__017929);
+            rule__AttributeCS__Group_5_7__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_7__1_in_rule__AttributeCS__Group_5_7__017932);
+            rule__AttributeCS__Group_5_7__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_7__0"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_7__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8381:1: rule__AttributeCS__Group_5_7__0__Impl : ( ( rule__AttributeCS__Group_5_7_0__0 )? ) ;
+    public final void rule__AttributeCS__Group_5_7__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8385:1: ( ( ( rule__AttributeCS__Group_5_7_0__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8386:1: ( ( rule__AttributeCS__Group_5_7_0__0 )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8386:1: ( ( rule__AttributeCS__Group_5_7_0__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8387:1: ( rule__AttributeCS__Group_5_7_0__0 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getGroup_5_7_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8388:1: ( rule__AttributeCS__Group_5_7_0__0 )?
+            int alt120=2;
+            int LA120_0 = input.LA(1);
+
+            if ( (LA120_0==52||LA120_0==60) ) {
+                alt120=1;
+            }
+            switch (alt120) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8388:2: rule__AttributeCS__Group_5_7_0__0
+                    {
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_7_0__0_in_rule__AttributeCS__Group_5_7__0__Impl17959);
+                    rule__AttributeCS__Group_5_7_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getGroup_5_7_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_7__0__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_7__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8398:1: rule__AttributeCS__Group_5_7__1 : rule__AttributeCS__Group_5_7__1__Impl ;
+    public final void rule__AttributeCS__Group_5_7__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8402:1: ( rule__AttributeCS__Group_5_7__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8403:2: rule__AttributeCS__Group_5_7__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_7__1__Impl_in_rule__AttributeCS__Group_5_7__117990);
+            rule__AttributeCS__Group_5_7__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_7__1"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_7__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8409:1: rule__AttributeCS__Group_5_7__1__Impl : ( '}' ) ;
+    public final void rule__AttributeCS__Group_5_7__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8413:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8414:1: ( '}' )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8414:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8415:1: '}'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()); 
+            }
+            match(input,109,FollowSets000.FOLLOW_109_in_rule__AttributeCS__Group_5_7__1__Impl18018); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_7__1__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_7_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8432:1: rule__AttributeCS__Group_5_7_0__0 : rule__AttributeCS__Group_5_7_0__0__Impl rule__AttributeCS__Group_5_7_0__1 ;
+    public final void rule__AttributeCS__Group_5_7_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8436:1: ( rule__AttributeCS__Group_5_7_0__0__Impl rule__AttributeCS__Group_5_7_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8437:2: rule__AttributeCS__Group_5_7_0__0__Impl rule__AttributeCS__Group_5_7_0__1
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_7_0__0__Impl_in_rule__AttributeCS__Group_5_7_0__018053);
+            rule__AttributeCS__Group_5_7_0__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_7_0__1_in_rule__AttributeCS__Group_5_7_0__018056);
+            rule__AttributeCS__Group_5_7_0__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_7_0__0"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_7_0__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8444:1: rule__AttributeCS__Group_5_7_0__0__Impl : ( ( rule__AttributeCS__Alternatives_5_7_0_0 ) ) ;
+    public final void rule__AttributeCS__Group_5_7_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8448:1: ( ( ( rule__AttributeCS__Alternatives_5_7_0_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8449:1: ( ( rule__AttributeCS__Alternatives_5_7_0_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8449:1: ( ( rule__AttributeCS__Alternatives_5_7_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8450:1: ( rule__AttributeCS__Alternatives_5_7_0_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getAlternatives_5_7_0_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8451:1: ( rule__AttributeCS__Alternatives_5_7_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8451:2: rule__AttributeCS__Alternatives_5_7_0_0
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_5_7_0_0_in_rule__AttributeCS__Group_5_7_0__0__Impl18083);
+            rule__AttributeCS__Alternatives_5_7_0_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getAlternatives_5_7_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_7_0__0__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_7_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8461:1: rule__AttributeCS__Group_5_7_0__1 : rule__AttributeCS__Group_5_7_0__1__Impl ;
+    public final void rule__AttributeCS__Group_5_7_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8465:1: ( rule__AttributeCS__Group_5_7_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8466:2: rule__AttributeCS__Group_5_7_0__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_5_7_0__1__Impl_in_rule__AttributeCS__Group_5_7_0__118113);
+            rule__AttributeCS__Group_5_7_0__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_7_0__1"
+
+
+    // $ANTLR start "rule__AttributeCS__Group_5_7_0__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8472:1: rule__AttributeCS__Group_5_7_0__1__Impl : ( ( ',' )? ) ;
+    public final void rule__AttributeCS__Group_5_7_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8476:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8477:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8477:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8478:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8479:1: ( ',' )?
+            int alt121=2;
+            int LA121_0 = input.LA(1);
+
+            if ( (LA121_0==107) ) {
+                alt121=1;
+            }
+            switch (alt121) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8480:2: ','
+                    {
+                    match(input,107,FollowSets000.FOLLOW_107_in_rule__AttributeCS__Group_5_7_0__1__Impl18142); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__Group_5_7_0__1__Impl"
+
+
     // $ANTLR start "rule__AttributeCS__Group_6_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7995:1: rule__AttributeCS__Group_6_0__0 : rule__AttributeCS__Group_6_0__0__Impl rule__AttributeCS__Group_6_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8495:1: rule__AttributeCS__Group_6_0__0 : rule__AttributeCS__Group_6_0__0__Impl rule__AttributeCS__Group_6_0__1 ;
     public final void rule__AttributeCS__Group_6_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7999:1: ( rule__AttributeCS__Group_6_0__0__Impl rule__AttributeCS__Group_6_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8000:2: rule__AttributeCS__Group_6_0__0__Impl rule__AttributeCS__Group_6_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8499:1: ( rule__AttributeCS__Group_6_0__0__Impl rule__AttributeCS__Group_6_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8500:2: rule__AttributeCS__Group_6_0__0__Impl rule__AttributeCS__Group_6_0__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__0__Impl_in_rule__AttributeCS__Group_6_0__017337);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__0__Impl_in_rule__AttributeCS__Group_6_0__018179);
             rule__AttributeCS__Group_6_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__1_in_rule__AttributeCS__Group_6_0__017340);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__1_in_rule__AttributeCS__Group_6_0__018182);
             rule__AttributeCS__Group_6_0__1();
 
             state._fsp--;
@@ -26617,22 +27665,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8007:1: rule__AttributeCS__Group_6_0__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8507:1: rule__AttributeCS__Group_6_0__0__Impl : ( '{' ) ;
     public final void rule__AttributeCS__Group_6_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8011:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8012:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8511:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8512:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8012:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8013:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8512:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8513:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_6_0_0()); 
             }
-            match(input,99,FollowSets000.FOLLOW_99_in_rule__AttributeCS__Group_6_0__0__Impl17368); if (state.failed) return ;
+            match(input,108,FollowSets000.FOLLOW_108_in_rule__AttributeCS__Group_6_0__0__Impl18210); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_6_0_0()); 
             }
@@ -26658,21 +27706,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8026:1: rule__AttributeCS__Group_6_0__1 : rule__AttributeCS__Group_6_0__1__Impl rule__AttributeCS__Group_6_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8526:1: rule__AttributeCS__Group_6_0__1 : rule__AttributeCS__Group_6_0__1__Impl rule__AttributeCS__Group_6_0__2 ;
     public final void rule__AttributeCS__Group_6_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8030:1: ( rule__AttributeCS__Group_6_0__1__Impl rule__AttributeCS__Group_6_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8031:2: rule__AttributeCS__Group_6_0__1__Impl rule__AttributeCS__Group_6_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8530:1: ( rule__AttributeCS__Group_6_0__1__Impl rule__AttributeCS__Group_6_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8531:2: rule__AttributeCS__Group_6_0__1__Impl rule__AttributeCS__Group_6_0__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__1__Impl_in_rule__AttributeCS__Group_6_0__117399);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__1__Impl_in_rule__AttributeCS__Group_6_0__118241);
             rule__AttributeCS__Group_6_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__2_in_rule__AttributeCS__Group_6_0__117402);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__2_in_rule__AttributeCS__Group_6_0__118244);
             rule__AttributeCS__Group_6_0__2();
 
             state._fsp--;
@@ -26696,37 +27744,37 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8038:1: rule__AttributeCS__Group_6_0__1__Impl : ( ( rule__AttributeCS__Alternatives_6_0_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8538:1: rule__AttributeCS__Group_6_0__1__Impl : ( ( rule__AttributeCS__Alternatives_6_0_1 )* ) ;
     public final void rule__AttributeCS__Group_6_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8042:1: ( ( ( rule__AttributeCS__Alternatives_6_0_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8043:1: ( ( rule__AttributeCS__Alternatives_6_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8542:1: ( ( ( rule__AttributeCS__Alternatives_6_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8543:1: ( ( rule__AttributeCS__Alternatives_6_0_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8043:1: ( ( rule__AttributeCS__Alternatives_6_0_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8044:1: ( rule__AttributeCS__Alternatives_6_0_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8543:1: ( ( rule__AttributeCS__Alternatives_6_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8544:1: ( rule__AttributeCS__Alternatives_6_0_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getAlternatives_6_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8045:1: ( rule__AttributeCS__Alternatives_6_0_1 )*
-            loop102:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8545:1: ( rule__AttributeCS__Alternatives_6_0_1 )*
+            loop122:
             do {
-                int alt102=2;
-                int LA102_0 = input.LA(1);
+                int alt122=2;
+                int LA122_0 = input.LA(1);
 
-                if ( (LA102_0==25||LA102_0==31||(LA102_0>=55 && LA102_0<=56)||LA102_0==60) ) {
-                    alt102=1;
+                if ( (LA122_0==25||LA122_0==31||(LA122_0>=64 && LA122_0<=65)||LA122_0==69) ) {
+                    alt122=1;
                 }
 
 
-                switch (alt102) {
+                switch (alt122) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8045:2: rule__AttributeCS__Alternatives_6_0_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8545:2: rule__AttributeCS__Alternatives_6_0_1
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_6_0_1_in_rule__AttributeCS__Group_6_0__1__Impl17429);
+            	    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Alternatives_6_0_1_in_rule__AttributeCS__Group_6_0__1__Impl18271);
             	    rule__AttributeCS__Alternatives_6_0_1();
 
             	    state._fsp--;
@@ -26736,7 +27784,7 @@
             	    break;
 
             	default :
-            	    break loop102;
+            	    break loop122;
                 }
             } while (true);
 
@@ -26765,16 +27813,16 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8055:1: rule__AttributeCS__Group_6_0__2 : rule__AttributeCS__Group_6_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8555:1: rule__AttributeCS__Group_6_0__2 : rule__AttributeCS__Group_6_0__2__Impl ;
     public final void rule__AttributeCS__Group_6_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8059:1: ( rule__AttributeCS__Group_6_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8060:2: rule__AttributeCS__Group_6_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8559:1: ( rule__AttributeCS__Group_6_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8560:2: rule__AttributeCS__Group_6_0__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__2__Impl_in_rule__AttributeCS__Group_6_0__217460);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0__2__Impl_in_rule__AttributeCS__Group_6_0__218302);
             rule__AttributeCS__Group_6_0__2__Impl();
 
             state._fsp--;
@@ -26798,22 +27846,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8066:1: rule__AttributeCS__Group_6_0__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8566:1: rule__AttributeCS__Group_6_0__2__Impl : ( '}' ) ;
     public final void rule__AttributeCS__Group_6_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8070:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8071:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8570:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8571:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8071:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8072:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8571:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8572:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_6_0_2()); 
             }
-            match(input,100,FollowSets000.FOLLOW_100_in_rule__AttributeCS__Group_6_0__2__Impl17488); if (state.failed) return ;
+            match(input,109,FollowSets000.FOLLOW_109_in_rule__AttributeCS__Group_6_0__2__Impl18330); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_6_0_2()); 
             }
@@ -26839,21 +27887,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8091:1: rule__AttributeCS__Group_6_0_1_1__0 : rule__AttributeCS__Group_6_0_1_1__0__Impl rule__AttributeCS__Group_6_0_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8591:1: rule__AttributeCS__Group_6_0_1_1__0 : rule__AttributeCS__Group_6_0_1_1__0__Impl rule__AttributeCS__Group_6_0_1_1__1 ;
     public final void rule__AttributeCS__Group_6_0_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8095:1: ( rule__AttributeCS__Group_6_0_1_1__0__Impl rule__AttributeCS__Group_6_0_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8096:2: rule__AttributeCS__Group_6_0_1_1__0__Impl rule__AttributeCS__Group_6_0_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8595:1: ( rule__AttributeCS__Group_6_0_1_1__0__Impl rule__AttributeCS__Group_6_0_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8596:2: rule__AttributeCS__Group_6_0_1_1__0__Impl rule__AttributeCS__Group_6_0_1_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__0__Impl_in_rule__AttributeCS__Group_6_0_1_1__017525);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__0__Impl_in_rule__AttributeCS__Group_6_0_1_1__018367);
             rule__AttributeCS__Group_6_0_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__1_in_rule__AttributeCS__Group_6_0_1_1__017528);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__1_in_rule__AttributeCS__Group_6_0_1_1__018370);
             rule__AttributeCS__Group_6_0_1_1__1();
 
             state._fsp--;
@@ -26877,22 +27925,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8103:1: rule__AttributeCS__Group_6_0_1_1__0__Impl : ( 'derivation' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8603:1: rule__AttributeCS__Group_6_0_1_1__0__Impl : ( 'derivation' ) ;
     public final void rule__AttributeCS__Group_6_0_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8107:1: ( ( 'derivation' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8108:1: ( 'derivation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8607:1: ( ( 'derivation' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8608:1: ( 'derivation' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8108:1: ( 'derivation' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8109:1: 'derivation'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8608:1: ( 'derivation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8609:1: 'derivation'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()); 
             }
-            match(input,25,FollowSets000.FOLLOW_25_in_rule__AttributeCS__Group_6_0_1_1__0__Impl17556); if (state.failed) return ;
+            match(input,25,FollowSets000.FOLLOW_25_in_rule__AttributeCS__Group_6_0_1_1__0__Impl18398); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()); 
             }
@@ -26918,21 +27966,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8122:1: rule__AttributeCS__Group_6_0_1_1__1 : rule__AttributeCS__Group_6_0_1_1__1__Impl rule__AttributeCS__Group_6_0_1_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8622:1: rule__AttributeCS__Group_6_0_1_1__1 : rule__AttributeCS__Group_6_0_1_1__1__Impl rule__AttributeCS__Group_6_0_1_1__2 ;
     public final void rule__AttributeCS__Group_6_0_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8126:1: ( rule__AttributeCS__Group_6_0_1_1__1__Impl rule__AttributeCS__Group_6_0_1_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8127:2: rule__AttributeCS__Group_6_0_1_1__1__Impl rule__AttributeCS__Group_6_0_1_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8626:1: ( rule__AttributeCS__Group_6_0_1_1__1__Impl rule__AttributeCS__Group_6_0_1_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8627:2: rule__AttributeCS__Group_6_0_1_1__1__Impl rule__AttributeCS__Group_6_0_1_1__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__1__Impl_in_rule__AttributeCS__Group_6_0_1_1__117587);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__1__Impl_in_rule__AttributeCS__Group_6_0_1_1__118429);
             rule__AttributeCS__Group_6_0_1_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__2_in_rule__AttributeCS__Group_6_0_1_1__117590);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__2_in_rule__AttributeCS__Group_6_0_1_1__118432);
             rule__AttributeCS__Group_6_0_1_1__2();
 
             state._fsp--;
@@ -26956,33 +28004,33 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8134:1: rule__AttributeCS__Group_6_0_1_1__1__Impl : ( ( ruleUnrestrictedName )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8634:1: rule__AttributeCS__Group_6_0_1_1__1__Impl : ( ( ruleUnrestrictedName )? ) ;
     public final void rule__AttributeCS__Group_6_0_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8138:1: ( ( ( ruleUnrestrictedName )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8139:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8638:1: ( ( ( ruleUnrestrictedName )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8639:1: ( ( ruleUnrestrictedName )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8139:1: ( ( ruleUnrestrictedName )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8140:1: ( ruleUnrestrictedName )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8639:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8640:1: ( ruleUnrestrictedName )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8141:1: ( ruleUnrestrictedName )?
-            int alt103=2;
-            int LA103_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8641:1: ( ruleUnrestrictedName )?
+            int alt123=2;
+            int LA123_0 = input.LA(1);
 
-            if ( ((LA103_0>=RULE_SIMPLE_ID && LA103_0<=RULE_ESCAPED_ID)||(LA103_0>=17 && LA103_0<=52)||(LA103_0>=55 && LA103_0<=60)) ) {
-                alt103=1;
+            if ( ((LA123_0>=RULE_SIMPLE_ID && LA123_0<=RULE_ESCAPED_ID)||(LA123_0>=17 && LA123_0<=52)||(LA123_0>=64 && LA123_0<=69)) ) {
+                alt123=1;
             }
-            switch (alt103) {
+            switch (alt123) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8141:3: ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8641:3: ruleUnrestrictedName
                     {
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__Group_6_0_1_1__1__Impl17618);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__Group_6_0_1_1__1__Impl18460);
                     ruleUnrestrictedName();
 
                     state._fsp--;
@@ -27018,21 +28066,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8151:1: rule__AttributeCS__Group_6_0_1_1__2 : rule__AttributeCS__Group_6_0_1_1__2__Impl rule__AttributeCS__Group_6_0_1_1__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8651:1: rule__AttributeCS__Group_6_0_1_1__2 : rule__AttributeCS__Group_6_0_1_1__2__Impl rule__AttributeCS__Group_6_0_1_1__3 ;
     public final void rule__AttributeCS__Group_6_0_1_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8155:1: ( rule__AttributeCS__Group_6_0_1_1__2__Impl rule__AttributeCS__Group_6_0_1_1__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8156:2: rule__AttributeCS__Group_6_0_1_1__2__Impl rule__AttributeCS__Group_6_0_1_1__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8655:1: ( rule__AttributeCS__Group_6_0_1_1__2__Impl rule__AttributeCS__Group_6_0_1_1__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8656:2: rule__AttributeCS__Group_6_0_1_1__2__Impl rule__AttributeCS__Group_6_0_1_1__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__2__Impl_in_rule__AttributeCS__Group_6_0_1_1__217649);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__2__Impl_in_rule__AttributeCS__Group_6_0_1_1__218491);
             rule__AttributeCS__Group_6_0_1_1__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__3_in_rule__AttributeCS__Group_6_0_1_1__217652);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__3_in_rule__AttributeCS__Group_6_0_1_1__218494);
             rule__AttributeCS__Group_6_0_1_1__3();
 
             state._fsp--;
@@ -27056,22 +28104,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8163:1: rule__AttributeCS__Group_6_0_1_1__2__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8663:1: rule__AttributeCS__Group_6_0_1_1__2__Impl : ( ':' ) ;
     public final void rule__AttributeCS__Group_6_0_1_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8167:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8168:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8667:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8668:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8168:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8169:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8668:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8669:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()); 
             }
-            match(input,97,FollowSets000.FOLLOW_97_in_rule__AttributeCS__Group_6_0_1_1__2__Impl17680); if (state.failed) return ;
+            match(input,106,FollowSets000.FOLLOW_106_in_rule__AttributeCS__Group_6_0_1_1__2__Impl18522); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()); 
             }
@@ -27097,21 +28145,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8182:1: rule__AttributeCS__Group_6_0_1_1__3 : rule__AttributeCS__Group_6_0_1_1__3__Impl rule__AttributeCS__Group_6_0_1_1__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8682:1: rule__AttributeCS__Group_6_0_1_1__3 : rule__AttributeCS__Group_6_0_1_1__3__Impl rule__AttributeCS__Group_6_0_1_1__4 ;
     public final void rule__AttributeCS__Group_6_0_1_1__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8186:1: ( rule__AttributeCS__Group_6_0_1_1__3__Impl rule__AttributeCS__Group_6_0_1_1__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8187:2: rule__AttributeCS__Group_6_0_1_1__3__Impl rule__AttributeCS__Group_6_0_1_1__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8686:1: ( rule__AttributeCS__Group_6_0_1_1__3__Impl rule__AttributeCS__Group_6_0_1_1__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8687:2: rule__AttributeCS__Group_6_0_1_1__3__Impl rule__AttributeCS__Group_6_0_1_1__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__3__Impl_in_rule__AttributeCS__Group_6_0_1_1__317711);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__3__Impl_in_rule__AttributeCS__Group_6_0_1_1__318553);
             rule__AttributeCS__Group_6_0_1_1__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__4_in_rule__AttributeCS__Group_6_0_1_1__317714);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__4_in_rule__AttributeCS__Group_6_0_1_1__318556);
             rule__AttributeCS__Group_6_0_1_1__4();
 
             state._fsp--;
@@ -27135,33 +28183,33 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8194:1: rule__AttributeCS__Group_6_0_1_1__3__Impl : ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8694:1: rule__AttributeCS__Group_6_0_1_1__3__Impl : ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )? ) ;
     public final void rule__AttributeCS__Group_6_0_1_1__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8198:1: ( ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8199:1: ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8698:1: ( ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8699:1: ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8199:1: ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8200:1: ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8699:1: ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8700:1: ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsAssignment_6_0_1_1_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8201:1: ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )?
-            int alt104=2;
-            int LA104_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8701:1: ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 )?
+            int alt124=2;
+            int LA124_0 = input.LA(1);
 
-            if ( ((LA104_0>=RULE_INT && LA104_0<=RULE_SINGLE_QUOTED_STRING)||(LA104_0>=RULE_SIMPLE_ID && LA104_0<=RULE_UNQUOTED_STRING)||(LA104_0>=17 && LA104_0<=52)||(LA104_0>=55 && LA104_0<=63)||(LA104_0>=80 && LA104_0<=93)||LA104_0==95||(LA104_0>=105 && LA104_0<=107)||LA104_0==112||(LA104_0>=117 && LA104_0<=118)||(LA104_0>=131 && LA104_0<=132)) ) {
-                alt104=1;
+            if ( ((LA124_0>=RULE_INT && LA124_0<=RULE_SINGLE_QUOTED_STRING)||(LA124_0>=RULE_SIMPLE_ID && LA124_0<=RULE_UNQUOTED_STRING)||(LA124_0>=17 && LA124_0<=52)||(LA124_0>=64 && LA124_0<=72)||(LA124_0>=89 && LA124_0<=102)||LA124_0==104||(LA124_0>=114 && LA124_0<=116)||LA124_0==121||(LA124_0>=126 && LA124_0<=127)||(LA124_0>=131 && LA124_0<=132)) ) {
+                alt124=1;
             }
-            switch (alt104) {
+            switch (alt124) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8201:2: rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8701:2: rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3_in_rule__AttributeCS__Group_6_0_1_1__3__Impl17741);
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3_in_rule__AttributeCS__Group_6_0_1_1__3__Impl18583);
                     rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3();
 
                     state._fsp--;
@@ -27197,16 +28245,16 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8211:1: rule__AttributeCS__Group_6_0_1_1__4 : rule__AttributeCS__Group_6_0_1_1__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8711:1: rule__AttributeCS__Group_6_0_1_1__4 : rule__AttributeCS__Group_6_0_1_1__4__Impl ;
     public final void rule__AttributeCS__Group_6_0_1_1__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8215:1: ( rule__AttributeCS__Group_6_0_1_1__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8216:2: rule__AttributeCS__Group_6_0_1_1__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8715:1: ( rule__AttributeCS__Group_6_0_1_1__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8716:2: rule__AttributeCS__Group_6_0_1_1__4__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__4__Impl_in_rule__AttributeCS__Group_6_0_1_1__417772);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_1__4__Impl_in_rule__AttributeCS__Group_6_0_1_1__418614);
             rule__AttributeCS__Group_6_0_1_1__4__Impl();
 
             state._fsp--;
@@ -27230,22 +28278,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_1__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8222:1: rule__AttributeCS__Group_6_0_1_1__4__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8722:1: rule__AttributeCS__Group_6_0_1_1__4__Impl : ( ';' ) ;
     public final void rule__AttributeCS__Group_6_0_1_1__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8226:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8227:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8726:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8727:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8227:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8228:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8727:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8728:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()); 
             }
-            match(input,53,FollowSets000.FOLLOW_53_in_rule__AttributeCS__Group_6_0_1_1__4__Impl17800); if (state.failed) return ;
+            match(input,53,FollowSets000.FOLLOW_53_in_rule__AttributeCS__Group_6_0_1_1__4__Impl18642); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()); 
             }
@@ -27271,21 +28319,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8251:1: rule__AttributeCS__Group_6_0_1_2__0 : rule__AttributeCS__Group_6_0_1_2__0__Impl rule__AttributeCS__Group_6_0_1_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8751:1: rule__AttributeCS__Group_6_0_1_2__0 : rule__AttributeCS__Group_6_0_1_2__0__Impl rule__AttributeCS__Group_6_0_1_2__1 ;
     public final void rule__AttributeCS__Group_6_0_1_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8255:1: ( rule__AttributeCS__Group_6_0_1_2__0__Impl rule__AttributeCS__Group_6_0_1_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8256:2: rule__AttributeCS__Group_6_0_1_2__0__Impl rule__AttributeCS__Group_6_0_1_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8755:1: ( rule__AttributeCS__Group_6_0_1_2__0__Impl rule__AttributeCS__Group_6_0_1_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8756:2: rule__AttributeCS__Group_6_0_1_2__0__Impl rule__AttributeCS__Group_6_0_1_2__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__0__Impl_in_rule__AttributeCS__Group_6_0_1_2__017841);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__0__Impl_in_rule__AttributeCS__Group_6_0_1_2__018683);
             rule__AttributeCS__Group_6_0_1_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__1_in_rule__AttributeCS__Group_6_0_1_2__017844);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__1_in_rule__AttributeCS__Group_6_0_1_2__018686);
             rule__AttributeCS__Group_6_0_1_2__1();
 
             state._fsp--;
@@ -27309,22 +28357,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8263:1: rule__AttributeCS__Group_6_0_1_2__0__Impl : ( 'initial' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8763:1: rule__AttributeCS__Group_6_0_1_2__0__Impl : ( 'initial' ) ;
     public final void rule__AttributeCS__Group_6_0_1_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8267:1: ( ( 'initial' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8268:1: ( 'initial' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8767:1: ( ( 'initial' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8768:1: ( 'initial' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8268:1: ( 'initial' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8269:1: 'initial'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8768:1: ( 'initial' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8769:1: 'initial'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()); 
             }
-            match(input,31,FollowSets000.FOLLOW_31_in_rule__AttributeCS__Group_6_0_1_2__0__Impl17872); if (state.failed) return ;
+            match(input,31,FollowSets000.FOLLOW_31_in_rule__AttributeCS__Group_6_0_1_2__0__Impl18714); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()); 
             }
@@ -27350,21 +28398,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8282:1: rule__AttributeCS__Group_6_0_1_2__1 : rule__AttributeCS__Group_6_0_1_2__1__Impl rule__AttributeCS__Group_6_0_1_2__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8782:1: rule__AttributeCS__Group_6_0_1_2__1 : rule__AttributeCS__Group_6_0_1_2__1__Impl rule__AttributeCS__Group_6_0_1_2__2 ;
     public final void rule__AttributeCS__Group_6_0_1_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8286:1: ( rule__AttributeCS__Group_6_0_1_2__1__Impl rule__AttributeCS__Group_6_0_1_2__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8287:2: rule__AttributeCS__Group_6_0_1_2__1__Impl rule__AttributeCS__Group_6_0_1_2__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8786:1: ( rule__AttributeCS__Group_6_0_1_2__1__Impl rule__AttributeCS__Group_6_0_1_2__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8787:2: rule__AttributeCS__Group_6_0_1_2__1__Impl rule__AttributeCS__Group_6_0_1_2__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__1__Impl_in_rule__AttributeCS__Group_6_0_1_2__117903);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__1__Impl_in_rule__AttributeCS__Group_6_0_1_2__118745);
             rule__AttributeCS__Group_6_0_1_2__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__2_in_rule__AttributeCS__Group_6_0_1_2__117906);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__2_in_rule__AttributeCS__Group_6_0_1_2__118748);
             rule__AttributeCS__Group_6_0_1_2__2();
 
             state._fsp--;
@@ -27388,33 +28436,33 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8294:1: rule__AttributeCS__Group_6_0_1_2__1__Impl : ( ( ruleUnrestrictedName )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8794:1: rule__AttributeCS__Group_6_0_1_2__1__Impl : ( ( ruleUnrestrictedName )? ) ;
     public final void rule__AttributeCS__Group_6_0_1_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8298:1: ( ( ( ruleUnrestrictedName )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8299:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8798:1: ( ( ( ruleUnrestrictedName )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8799:1: ( ( ruleUnrestrictedName )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8299:1: ( ( ruleUnrestrictedName )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8300:1: ( ruleUnrestrictedName )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8799:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8800:1: ( ruleUnrestrictedName )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8301:1: ( ruleUnrestrictedName )?
-            int alt105=2;
-            int LA105_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8801:1: ( ruleUnrestrictedName )?
+            int alt125=2;
+            int LA125_0 = input.LA(1);
 
-            if ( ((LA105_0>=RULE_SIMPLE_ID && LA105_0<=RULE_ESCAPED_ID)||(LA105_0>=17 && LA105_0<=52)||(LA105_0>=55 && LA105_0<=60)) ) {
-                alt105=1;
+            if ( ((LA125_0>=RULE_SIMPLE_ID && LA125_0<=RULE_ESCAPED_ID)||(LA125_0>=17 && LA125_0<=52)||(LA125_0>=64 && LA125_0<=69)) ) {
+                alt125=1;
             }
-            switch (alt105) {
+            switch (alt125) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8301:3: ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8801:3: ruleUnrestrictedName
                     {
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__Group_6_0_1_2__1__Impl17934);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__Group_6_0_1_2__1__Impl18776);
                     ruleUnrestrictedName();
 
                     state._fsp--;
@@ -27450,21 +28498,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8311:1: rule__AttributeCS__Group_6_0_1_2__2 : rule__AttributeCS__Group_6_0_1_2__2__Impl rule__AttributeCS__Group_6_0_1_2__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8811:1: rule__AttributeCS__Group_6_0_1_2__2 : rule__AttributeCS__Group_6_0_1_2__2__Impl rule__AttributeCS__Group_6_0_1_2__3 ;
     public final void rule__AttributeCS__Group_6_0_1_2__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8315:1: ( rule__AttributeCS__Group_6_0_1_2__2__Impl rule__AttributeCS__Group_6_0_1_2__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8316:2: rule__AttributeCS__Group_6_0_1_2__2__Impl rule__AttributeCS__Group_6_0_1_2__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8815:1: ( rule__AttributeCS__Group_6_0_1_2__2__Impl rule__AttributeCS__Group_6_0_1_2__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8816:2: rule__AttributeCS__Group_6_0_1_2__2__Impl rule__AttributeCS__Group_6_0_1_2__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__2__Impl_in_rule__AttributeCS__Group_6_0_1_2__217965);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__2__Impl_in_rule__AttributeCS__Group_6_0_1_2__218807);
             rule__AttributeCS__Group_6_0_1_2__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__3_in_rule__AttributeCS__Group_6_0_1_2__217968);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__3_in_rule__AttributeCS__Group_6_0_1_2__218810);
             rule__AttributeCS__Group_6_0_1_2__3();
 
             state._fsp--;
@@ -27488,22 +28536,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8323:1: rule__AttributeCS__Group_6_0_1_2__2__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8823:1: rule__AttributeCS__Group_6_0_1_2__2__Impl : ( ':' ) ;
     public final void rule__AttributeCS__Group_6_0_1_2__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8327:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8328:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8827:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8828:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8328:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8329:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8828:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8829:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()); 
             }
-            match(input,97,FollowSets000.FOLLOW_97_in_rule__AttributeCS__Group_6_0_1_2__2__Impl17996); if (state.failed) return ;
+            match(input,106,FollowSets000.FOLLOW_106_in_rule__AttributeCS__Group_6_0_1_2__2__Impl18838); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()); 
             }
@@ -27529,21 +28577,21 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8342:1: rule__AttributeCS__Group_6_0_1_2__3 : rule__AttributeCS__Group_6_0_1_2__3__Impl rule__AttributeCS__Group_6_0_1_2__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8842:1: rule__AttributeCS__Group_6_0_1_2__3 : rule__AttributeCS__Group_6_0_1_2__3__Impl rule__AttributeCS__Group_6_0_1_2__4 ;
     public final void rule__AttributeCS__Group_6_0_1_2__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8346:1: ( rule__AttributeCS__Group_6_0_1_2__3__Impl rule__AttributeCS__Group_6_0_1_2__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8347:2: rule__AttributeCS__Group_6_0_1_2__3__Impl rule__AttributeCS__Group_6_0_1_2__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8846:1: ( rule__AttributeCS__Group_6_0_1_2__3__Impl rule__AttributeCS__Group_6_0_1_2__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8847:2: rule__AttributeCS__Group_6_0_1_2__3__Impl rule__AttributeCS__Group_6_0_1_2__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__3__Impl_in_rule__AttributeCS__Group_6_0_1_2__318027);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__3__Impl_in_rule__AttributeCS__Group_6_0_1_2__318869);
             rule__AttributeCS__Group_6_0_1_2__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__4_in_rule__AttributeCS__Group_6_0_1_2__318030);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__4_in_rule__AttributeCS__Group_6_0_1_2__318872);
             rule__AttributeCS__Group_6_0_1_2__4();
 
             state._fsp--;
@@ -27567,33 +28615,33 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8354:1: rule__AttributeCS__Group_6_0_1_2__3__Impl : ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8854:1: rule__AttributeCS__Group_6_0_1_2__3__Impl : ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )? ) ;
     public final void rule__AttributeCS__Group_6_0_1_2__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8358:1: ( ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8359:1: ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8858:1: ( ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8859:1: ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8359:1: ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8360:1: ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8859:1: ( ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8860:1: ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsAssignment_6_0_1_2_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8361:1: ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )?
-            int alt106=2;
-            int LA106_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8861:1: ( rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 )?
+            int alt126=2;
+            int LA126_0 = input.LA(1);
 
-            if ( ((LA106_0>=RULE_INT && LA106_0<=RULE_SINGLE_QUOTED_STRING)||(LA106_0>=RULE_SIMPLE_ID && LA106_0<=RULE_UNQUOTED_STRING)||(LA106_0>=17 && LA106_0<=52)||(LA106_0>=55 && LA106_0<=63)||(LA106_0>=80 && LA106_0<=93)||LA106_0==95||(LA106_0>=105 && LA106_0<=107)||LA106_0==112||(LA106_0>=117 && LA106_0<=118)||(LA106_0>=131 && LA106_0<=132)) ) {
-                alt106=1;
+            if ( ((LA126_0>=RULE_INT && LA126_0<=RULE_SINGLE_QUOTED_STRING)||(LA126_0>=RULE_SIMPLE_ID && LA126_0<=RULE_UNQUOTED_STRING)||(LA126_0>=17 && LA126_0<=52)||(LA126_0>=64 && LA126_0<=72)||(LA126_0>=89 && LA126_0<=102)||LA126_0==104||(LA126_0>=114 && LA126_0<=116)||LA126_0==121||(LA126_0>=126 && LA126_0<=127)||(LA126_0>=131 && LA126_0<=132)) ) {
+                alt126=1;
             }
-            switch (alt106) {
+            switch (alt126) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8361:2: rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8861:2: rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3_in_rule__AttributeCS__Group_6_0_1_2__3__Impl18057);
+                    pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3_in_rule__AttributeCS__Group_6_0_1_2__3__Impl18899);
                     rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3();
 
                     state._fsp--;
@@ -27629,16 +28677,16 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8371:1: rule__AttributeCS__Group_6_0_1_2__4 : rule__AttributeCS__Group_6_0_1_2__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8871:1: rule__AttributeCS__Group_6_0_1_2__4 : rule__AttributeCS__Group_6_0_1_2__4__Impl ;
     public final void rule__AttributeCS__Group_6_0_1_2__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8375:1: ( rule__AttributeCS__Group_6_0_1_2__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8376:2: rule__AttributeCS__Group_6_0_1_2__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8875:1: ( rule__AttributeCS__Group_6_0_1_2__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8876:2: rule__AttributeCS__Group_6_0_1_2__4__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__4__Impl_in_rule__AttributeCS__Group_6_0_1_2__418088);
+            pushFollow(FollowSets000.FOLLOW_rule__AttributeCS__Group_6_0_1_2__4__Impl_in_rule__AttributeCS__Group_6_0_1_2__418930);
             rule__AttributeCS__Group_6_0_1_2__4__Impl();
 
             state._fsp--;
@@ -27662,22 +28710,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__Group_6_0_1_2__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8382:1: rule__AttributeCS__Group_6_0_1_2__4__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8882:1: rule__AttributeCS__Group_6_0_1_2__4__Impl : ( ';' ) ;
     public final void rule__AttributeCS__Group_6_0_1_2__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8386:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8387:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8886:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8887:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8387:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8388:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8887:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8888:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()); 
             }
-            match(input,53,FollowSets000.FOLLOW_53_in_rule__AttributeCS__Group_6_0_1_2__4__Impl18116); if (state.failed) return ;
+            match(input,53,FollowSets000.FOLLOW_53_in_rule__AttributeCS__Group_6_0_1_2__4__Impl18958); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()); 
             }
@@ -27703,21 +28751,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8411:1: rule__DataTypeCS__Group__0 : rule__DataTypeCS__Group__0__Impl rule__DataTypeCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8911:1: rule__DataTypeCS__Group__0 : rule__DataTypeCS__Group__0__Impl rule__DataTypeCS__Group__1 ;
     public final void rule__DataTypeCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8415:1: ( rule__DataTypeCS__Group__0__Impl rule__DataTypeCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8416:2: rule__DataTypeCS__Group__0__Impl rule__DataTypeCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8915:1: ( rule__DataTypeCS__Group__0__Impl rule__DataTypeCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8916:2: rule__DataTypeCS__Group__0__Impl rule__DataTypeCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__0__Impl_in_rule__DataTypeCS__Group__018157);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__0__Impl_in_rule__DataTypeCS__Group__018999);
             rule__DataTypeCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__1_in_rule__DataTypeCS__Group__018160);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__1_in_rule__DataTypeCS__Group__019002);
             rule__DataTypeCS__Group__1();
 
             state._fsp--;
@@ -27741,33 +28789,33 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8423:1: rule__DataTypeCS__Group__0__Impl : ( ( rule__DataTypeCS__IsPrimitiveAssignment_0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8923:1: rule__DataTypeCS__Group__0__Impl : ( ( rule__DataTypeCS__IsPrimitiveAssignment_0 )? ) ;
     public final void rule__DataTypeCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8427:1: ( ( ( rule__DataTypeCS__IsPrimitiveAssignment_0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8428:1: ( ( rule__DataTypeCS__IsPrimitiveAssignment_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8927:1: ( ( ( rule__DataTypeCS__IsPrimitiveAssignment_0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8928:1: ( ( rule__DataTypeCS__IsPrimitiveAssignment_0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8428:1: ( ( rule__DataTypeCS__IsPrimitiveAssignment_0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8429:1: ( rule__DataTypeCS__IsPrimitiveAssignment_0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8928:1: ( ( rule__DataTypeCS__IsPrimitiveAssignment_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8929:1: ( rule__DataTypeCS__IsPrimitiveAssignment_0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getIsPrimitiveAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8430:1: ( rule__DataTypeCS__IsPrimitiveAssignment_0 )?
-            int alt107=2;
-            int LA107_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8930:1: ( rule__DataTypeCS__IsPrimitiveAssignment_0 )?
+            int alt127=2;
+            int LA127_0 = input.LA(1);
 
-            if ( (LA107_0==41) ) {
-                alt107=1;
+            if ( (LA127_0==41) ) {
+                alt127=1;
             }
-            switch (alt107) {
+            switch (alt127) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8430:2: rule__DataTypeCS__IsPrimitiveAssignment_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8930:2: rule__DataTypeCS__IsPrimitiveAssignment_0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__IsPrimitiveAssignment_0_in_rule__DataTypeCS__Group__0__Impl18187);
+                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__IsPrimitiveAssignment_0_in_rule__DataTypeCS__Group__0__Impl19029);
                     rule__DataTypeCS__IsPrimitiveAssignment_0();
 
                     state._fsp--;
@@ -27803,21 +28851,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8440:1: rule__DataTypeCS__Group__1 : rule__DataTypeCS__Group__1__Impl rule__DataTypeCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8940:1: rule__DataTypeCS__Group__1 : rule__DataTypeCS__Group__1__Impl rule__DataTypeCS__Group__2 ;
     public final void rule__DataTypeCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8444:1: ( rule__DataTypeCS__Group__1__Impl rule__DataTypeCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8445:2: rule__DataTypeCS__Group__1__Impl rule__DataTypeCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8944:1: ( rule__DataTypeCS__Group__1__Impl rule__DataTypeCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8945:2: rule__DataTypeCS__Group__1__Impl rule__DataTypeCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__1__Impl_in_rule__DataTypeCS__Group__118218);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__1__Impl_in_rule__DataTypeCS__Group__119060);
             rule__DataTypeCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__2_in_rule__DataTypeCS__Group__118221);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__2_in_rule__DataTypeCS__Group__119063);
             rule__DataTypeCS__Group__2();
 
             state._fsp--;
@@ -27841,22 +28889,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8452:1: rule__DataTypeCS__Group__1__Impl : ( 'datatype' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8952:1: rule__DataTypeCS__Group__1__Impl : ( 'datatype' ) ;
     public final void rule__DataTypeCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8456:1: ( ( 'datatype' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8457:1: ( 'datatype' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8956:1: ( ( 'datatype' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8957:1: ( 'datatype' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8457:1: ( 'datatype' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8458:1: 'datatype'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8957:1: ( 'datatype' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8958:1: 'datatype'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getDatatypeKeyword_1()); 
             }
-            match(input,23,FollowSets000.FOLLOW_23_in_rule__DataTypeCS__Group__1__Impl18249); if (state.failed) return ;
+            match(input,23,FollowSets000.FOLLOW_23_in_rule__DataTypeCS__Group__1__Impl19091); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDataTypeCSAccess().getDatatypeKeyword_1()); 
             }
@@ -27882,21 +28930,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8471:1: rule__DataTypeCS__Group__2 : rule__DataTypeCS__Group__2__Impl rule__DataTypeCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8971:1: rule__DataTypeCS__Group__2 : rule__DataTypeCS__Group__2__Impl rule__DataTypeCS__Group__3 ;
     public final void rule__DataTypeCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8475:1: ( rule__DataTypeCS__Group__2__Impl rule__DataTypeCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8476:2: rule__DataTypeCS__Group__2__Impl rule__DataTypeCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8975:1: ( rule__DataTypeCS__Group__2__Impl rule__DataTypeCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8976:2: rule__DataTypeCS__Group__2__Impl rule__DataTypeCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__2__Impl_in_rule__DataTypeCS__Group__218280);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__2__Impl_in_rule__DataTypeCS__Group__219122);
             rule__DataTypeCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__3_in_rule__DataTypeCS__Group__218283);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__3_in_rule__DataTypeCS__Group__219125);
             rule__DataTypeCS__Group__3();
 
             state._fsp--;
@@ -27920,25 +28968,25 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8483:1: rule__DataTypeCS__Group__2__Impl : ( ( rule__DataTypeCS__NameAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8983:1: rule__DataTypeCS__Group__2__Impl : ( ( rule__DataTypeCS__NameAssignment_2 ) ) ;
     public final void rule__DataTypeCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8487:1: ( ( ( rule__DataTypeCS__NameAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8488:1: ( ( rule__DataTypeCS__NameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8987:1: ( ( ( rule__DataTypeCS__NameAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8988:1: ( ( rule__DataTypeCS__NameAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8488:1: ( ( rule__DataTypeCS__NameAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8489:1: ( rule__DataTypeCS__NameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8988:1: ( ( rule__DataTypeCS__NameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8989:1: ( rule__DataTypeCS__NameAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getNameAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8490:1: ( rule__DataTypeCS__NameAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8490:2: rule__DataTypeCS__NameAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8990:1: ( rule__DataTypeCS__NameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8990:2: rule__DataTypeCS__NameAssignment_2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__NameAssignment_2_in_rule__DataTypeCS__Group__2__Impl18310);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__NameAssignment_2_in_rule__DataTypeCS__Group__2__Impl19152);
             rule__DataTypeCS__NameAssignment_2();
 
             state._fsp--;
@@ -27971,21 +29019,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8500:1: rule__DataTypeCS__Group__3 : rule__DataTypeCS__Group__3__Impl rule__DataTypeCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9000:1: rule__DataTypeCS__Group__3 : rule__DataTypeCS__Group__3__Impl rule__DataTypeCS__Group__4 ;
     public final void rule__DataTypeCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8504:1: ( rule__DataTypeCS__Group__3__Impl rule__DataTypeCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8505:2: rule__DataTypeCS__Group__3__Impl rule__DataTypeCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9004:1: ( rule__DataTypeCS__Group__3__Impl rule__DataTypeCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9005:2: rule__DataTypeCS__Group__3__Impl rule__DataTypeCS__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__3__Impl_in_rule__DataTypeCS__Group__318340);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__3__Impl_in_rule__DataTypeCS__Group__319182);
             rule__DataTypeCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__4_in_rule__DataTypeCS__Group__318343);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__4_in_rule__DataTypeCS__Group__319185);
             rule__DataTypeCS__Group__4();
 
             state._fsp--;
@@ -28009,33 +29057,33 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8512:1: rule__DataTypeCS__Group__3__Impl : ( ( rule__DataTypeCS__OwnedSignatureAssignment_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9012:1: rule__DataTypeCS__Group__3__Impl : ( ( rule__DataTypeCS__OwnedSignatureAssignment_3 )? ) ;
     public final void rule__DataTypeCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8516:1: ( ( ( rule__DataTypeCS__OwnedSignatureAssignment_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8517:1: ( ( rule__DataTypeCS__OwnedSignatureAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9016:1: ( ( ( rule__DataTypeCS__OwnedSignatureAssignment_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9017:1: ( ( rule__DataTypeCS__OwnedSignatureAssignment_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8517:1: ( ( rule__DataTypeCS__OwnedSignatureAssignment_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8518:1: ( rule__DataTypeCS__OwnedSignatureAssignment_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9017:1: ( ( rule__DataTypeCS__OwnedSignatureAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9018:1: ( rule__DataTypeCS__OwnedSignatureAssignment_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getOwnedSignatureAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8519:1: ( rule__DataTypeCS__OwnedSignatureAssignment_3 )?
-            int alt108=2;
-            int LA108_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9019:1: ( rule__DataTypeCS__OwnedSignatureAssignment_3 )?
+            int alt128=2;
+            int LA128_0 = input.LA(1);
 
-            if ( (LA108_0==67||LA108_0==95) ) {
-                alt108=1;
+            if ( (LA128_0==76||LA128_0==104) ) {
+                alt128=1;
             }
-            switch (alt108) {
+            switch (alt128) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8519:2: rule__DataTypeCS__OwnedSignatureAssignment_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9019:2: rule__DataTypeCS__OwnedSignatureAssignment_3
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__OwnedSignatureAssignment_3_in_rule__DataTypeCS__Group__3__Impl18370);
+                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__OwnedSignatureAssignment_3_in_rule__DataTypeCS__Group__3__Impl19212);
                     rule__DataTypeCS__OwnedSignatureAssignment_3();
 
                     state._fsp--;
@@ -28071,21 +29119,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8529:1: rule__DataTypeCS__Group__4 : rule__DataTypeCS__Group__4__Impl rule__DataTypeCS__Group__5 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9029:1: rule__DataTypeCS__Group__4 : rule__DataTypeCS__Group__4__Impl rule__DataTypeCS__Group__5 ;
     public final void rule__DataTypeCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8533:1: ( rule__DataTypeCS__Group__4__Impl rule__DataTypeCS__Group__5 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8534:2: rule__DataTypeCS__Group__4__Impl rule__DataTypeCS__Group__5
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9033:1: ( rule__DataTypeCS__Group__4__Impl rule__DataTypeCS__Group__5 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9034:2: rule__DataTypeCS__Group__4__Impl rule__DataTypeCS__Group__5
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__4__Impl_in_rule__DataTypeCS__Group__418401);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__4__Impl_in_rule__DataTypeCS__Group__419243);
             rule__DataTypeCS__Group__4__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__5_in_rule__DataTypeCS__Group__418404);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__5_in_rule__DataTypeCS__Group__419246);
             rule__DataTypeCS__Group__5();
 
             state._fsp--;
@@ -28109,33 +29157,33 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8541:1: rule__DataTypeCS__Group__4__Impl : ( ( rule__DataTypeCS__Group_4__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9041:1: rule__DataTypeCS__Group__4__Impl : ( ( rule__DataTypeCS__Group_4__0 )? ) ;
     public final void rule__DataTypeCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8545:1: ( ( ( rule__DataTypeCS__Group_4__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8546:1: ( ( rule__DataTypeCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9045:1: ( ( ( rule__DataTypeCS__Group_4__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9046:1: ( ( rule__DataTypeCS__Group_4__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8546:1: ( ( rule__DataTypeCS__Group_4__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8547:1: ( rule__DataTypeCS__Group_4__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9046:1: ( ( rule__DataTypeCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9047:1: ( rule__DataTypeCS__Group_4__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getGroup_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8548:1: ( rule__DataTypeCS__Group_4__0 )?
-            int alt109=2;
-            int LA109_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9048:1: ( rule__DataTypeCS__Group_4__0 )?
+            int alt129=2;
+            int LA129_0 = input.LA(1);
 
-            if ( (LA109_0==97) ) {
-                alt109=1;
+            if ( (LA129_0==106) ) {
+                alt129=1;
             }
-            switch (alt109) {
+            switch (alt129) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8548:2: rule__DataTypeCS__Group_4__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9048:2: rule__DataTypeCS__Group_4__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_4__0_in_rule__DataTypeCS__Group__4__Impl18431);
+                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_4__0_in_rule__DataTypeCS__Group__4__Impl19273);
                     rule__DataTypeCS__Group_4__0();
 
                     state._fsp--;
@@ -28171,21 +29219,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8558:1: rule__DataTypeCS__Group__5 : rule__DataTypeCS__Group__5__Impl rule__DataTypeCS__Group__6 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9058:1: rule__DataTypeCS__Group__5 : rule__DataTypeCS__Group__5__Impl rule__DataTypeCS__Group__6 ;
     public final void rule__DataTypeCS__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8562:1: ( rule__DataTypeCS__Group__5__Impl rule__DataTypeCS__Group__6 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8563:2: rule__DataTypeCS__Group__5__Impl rule__DataTypeCS__Group__6
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9062:1: ( rule__DataTypeCS__Group__5__Impl rule__DataTypeCS__Group__6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9063:2: rule__DataTypeCS__Group__5__Impl rule__DataTypeCS__Group__6
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__5__Impl_in_rule__DataTypeCS__Group__518462);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__5__Impl_in_rule__DataTypeCS__Group__519304);
             rule__DataTypeCS__Group__5__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__6_in_rule__DataTypeCS__Group__518465);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__6_in_rule__DataTypeCS__Group__519307);
             rule__DataTypeCS__Group__6();
 
             state._fsp--;
@@ -28209,44 +29257,44 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__5__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8570:1: rule__DataTypeCS__Group__5__Impl : ( ( rule__DataTypeCS__Group_5__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9070:1: rule__DataTypeCS__Group__5__Impl : ( ( rule__DataTypeCS__Group_5__0 )? ) ;
     public final void rule__DataTypeCS__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8574:1: ( ( ( rule__DataTypeCS__Group_5__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8575:1: ( ( rule__DataTypeCS__Group_5__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9074:1: ( ( ( rule__DataTypeCS__Group_5__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9075:1: ( ( rule__DataTypeCS__Group_5__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8575:1: ( ( rule__DataTypeCS__Group_5__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8576:1: ( rule__DataTypeCS__Group_5__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9075:1: ( ( rule__DataTypeCS__Group_5__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9076:1: ( rule__DataTypeCS__Group_5__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getGroup_5()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8577:1: ( rule__DataTypeCS__Group_5__0 )?
-            int alt110=2;
-            int LA110_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9077:1: ( rule__DataTypeCS__Group_5__0 )?
+            int alt130=2;
+            int LA130_0 = input.LA(1);
 
-            if ( (LA110_0==99) ) {
-                int LA110_1 = input.LA(2);
+            if ( (LA130_0==108) ) {
+                int LA130_1 = input.LA(2);
 
-                if ( (LA110_1==100) ) {
-                    int LA110_3 = input.LA(3);
+                if ( (LA130_1==61||LA130_1==68) ) {
+                    alt130=1;
+                }
+                else if ( (LA130_1==109) ) {
+                    int LA130_4 = input.LA(3);
 
-                    if ( (LA110_3==53||LA110_3==99) ) {
-                        alt110=1;
+                    if ( (LA130_4==53||LA130_4==108) ) {
+                        alt130=1;
                     }
                 }
-                else if ( (LA110_1==54||LA110_1==59) ) {
-                    alt110=1;
-                }
             }
-            switch (alt110) {
+            switch (alt130) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8577:2: rule__DataTypeCS__Group_5__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9077:2: rule__DataTypeCS__Group_5__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__0_in_rule__DataTypeCS__Group__5__Impl18492);
+                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__0_in_rule__DataTypeCS__Group__5__Impl19334);
                     rule__DataTypeCS__Group_5__0();
 
                     state._fsp--;
@@ -28282,16 +29330,16 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8587:1: rule__DataTypeCS__Group__6 : rule__DataTypeCS__Group__6__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9087:1: rule__DataTypeCS__Group__6 : rule__DataTypeCS__Group__6__Impl ;
     public final void rule__DataTypeCS__Group__6() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8591:1: ( rule__DataTypeCS__Group__6__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8592:2: rule__DataTypeCS__Group__6__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9091:1: ( rule__DataTypeCS__Group__6__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9092:2: rule__DataTypeCS__Group__6__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__6__Impl_in_rule__DataTypeCS__Group__618523);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group__6__Impl_in_rule__DataTypeCS__Group__619365);
             rule__DataTypeCS__Group__6__Impl();
 
             state._fsp--;
@@ -28315,25 +29363,25 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group__6__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8598:1: rule__DataTypeCS__Group__6__Impl : ( ( rule__DataTypeCS__Alternatives_6 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9098:1: rule__DataTypeCS__Group__6__Impl : ( ( rule__DataTypeCS__Alternatives_6 ) ) ;
     public final void rule__DataTypeCS__Group__6__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8602:1: ( ( ( rule__DataTypeCS__Alternatives_6 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8603:1: ( ( rule__DataTypeCS__Alternatives_6 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9102:1: ( ( ( rule__DataTypeCS__Alternatives_6 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9103:1: ( ( rule__DataTypeCS__Alternatives_6 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8603:1: ( ( rule__DataTypeCS__Alternatives_6 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8604:1: ( rule__DataTypeCS__Alternatives_6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9103:1: ( ( rule__DataTypeCS__Alternatives_6 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9104:1: ( rule__DataTypeCS__Alternatives_6 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getAlternatives_6()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8605:1: ( rule__DataTypeCS__Alternatives_6 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8605:2: rule__DataTypeCS__Alternatives_6
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9105:1: ( rule__DataTypeCS__Alternatives_6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9105:2: rule__DataTypeCS__Alternatives_6
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Alternatives_6_in_rule__DataTypeCS__Group__6__Impl18550);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Alternatives_6_in_rule__DataTypeCS__Group__6__Impl19392);
             rule__DataTypeCS__Alternatives_6();
 
             state._fsp--;
@@ -28366,21 +29414,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_4__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8629:1: rule__DataTypeCS__Group_4__0 : rule__DataTypeCS__Group_4__0__Impl rule__DataTypeCS__Group_4__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9129:1: rule__DataTypeCS__Group_4__0 : rule__DataTypeCS__Group_4__0__Impl rule__DataTypeCS__Group_4__1 ;
     public final void rule__DataTypeCS__Group_4__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8633:1: ( rule__DataTypeCS__Group_4__0__Impl rule__DataTypeCS__Group_4__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8634:2: rule__DataTypeCS__Group_4__0__Impl rule__DataTypeCS__Group_4__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9133:1: ( rule__DataTypeCS__Group_4__0__Impl rule__DataTypeCS__Group_4__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9134:2: rule__DataTypeCS__Group_4__0__Impl rule__DataTypeCS__Group_4__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_4__0__Impl_in_rule__DataTypeCS__Group_4__018594);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_4__0__Impl_in_rule__DataTypeCS__Group_4__019436);
             rule__DataTypeCS__Group_4__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_4__1_in_rule__DataTypeCS__Group_4__018597);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_4__1_in_rule__DataTypeCS__Group_4__019439);
             rule__DataTypeCS__Group_4__1();
 
             state._fsp--;
@@ -28404,22 +29452,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_4__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8641:1: rule__DataTypeCS__Group_4__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9141:1: rule__DataTypeCS__Group_4__0__Impl : ( ':' ) ;
     public final void rule__DataTypeCS__Group_4__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8645:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8646:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9145:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9146:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8646:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8647:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9146:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9147:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getColonKeyword_4_0()); 
             }
-            match(input,97,FollowSets000.FOLLOW_97_in_rule__DataTypeCS__Group_4__0__Impl18625); if (state.failed) return ;
+            match(input,106,FollowSets000.FOLLOW_106_in_rule__DataTypeCS__Group_4__0__Impl19467); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDataTypeCSAccess().getColonKeyword_4_0()); 
             }
@@ -28445,16 +29493,16 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_4__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8660:1: rule__DataTypeCS__Group_4__1 : rule__DataTypeCS__Group_4__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9160:1: rule__DataTypeCS__Group_4__1 : rule__DataTypeCS__Group_4__1__Impl ;
     public final void rule__DataTypeCS__Group_4__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8664:1: ( rule__DataTypeCS__Group_4__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8665:2: rule__DataTypeCS__Group_4__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9164:1: ( rule__DataTypeCS__Group_4__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9165:2: rule__DataTypeCS__Group_4__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_4__1__Impl_in_rule__DataTypeCS__Group_4__118656);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_4__1__Impl_in_rule__DataTypeCS__Group_4__119498);
             rule__DataTypeCS__Group_4__1__Impl();
 
             state._fsp--;
@@ -28478,25 +29526,25 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_4__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8671:1: rule__DataTypeCS__Group_4__1__Impl : ( ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9171:1: rule__DataTypeCS__Group_4__1__Impl : ( ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 ) ) ;
     public final void rule__DataTypeCS__Group_4__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8675:1: ( ( ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8676:1: ( ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9175:1: ( ( ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9176:1: ( ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8676:1: ( ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8677:1: ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9176:1: ( ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9177:1: ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getInstanceClassNameAssignment_4_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8678:1: ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8678:2: rule__DataTypeCS__InstanceClassNameAssignment_4_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9178:1: ( rule__DataTypeCS__InstanceClassNameAssignment_4_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9178:2: rule__DataTypeCS__InstanceClassNameAssignment_4_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__InstanceClassNameAssignment_4_1_in_rule__DataTypeCS__Group_4__1__Impl18683);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__InstanceClassNameAssignment_4_1_in_rule__DataTypeCS__Group_4__1__Impl19525);
             rule__DataTypeCS__InstanceClassNameAssignment_4_1();
 
             state._fsp--;
@@ -28529,21 +29577,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_5__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8692:1: rule__DataTypeCS__Group_5__0 : rule__DataTypeCS__Group_5__0__Impl rule__DataTypeCS__Group_5__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9192:1: rule__DataTypeCS__Group_5__0 : rule__DataTypeCS__Group_5__0__Impl rule__DataTypeCS__Group_5__1 ;
     public final void rule__DataTypeCS__Group_5__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8696:1: ( rule__DataTypeCS__Group_5__0__Impl rule__DataTypeCS__Group_5__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8697:2: rule__DataTypeCS__Group_5__0__Impl rule__DataTypeCS__Group_5__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9196:1: ( rule__DataTypeCS__Group_5__0__Impl rule__DataTypeCS__Group_5__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9197:2: rule__DataTypeCS__Group_5__0__Impl rule__DataTypeCS__Group_5__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__0__Impl_in_rule__DataTypeCS__Group_5__018717);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__0__Impl_in_rule__DataTypeCS__Group_5__019559);
             rule__DataTypeCS__Group_5__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__1_in_rule__DataTypeCS__Group_5__018720);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__1_in_rule__DataTypeCS__Group_5__019562);
             rule__DataTypeCS__Group_5__1();
 
             state._fsp--;
@@ -28567,22 +29615,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_5__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8704:1: rule__DataTypeCS__Group_5__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9204:1: rule__DataTypeCS__Group_5__0__Impl : ( '{' ) ;
     public final void rule__DataTypeCS__Group_5__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8708:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8709:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9208:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9209:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8709:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8710:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9209:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9210:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_5_0()); 
             }
-            match(input,99,FollowSets000.FOLLOW_99_in_rule__DataTypeCS__Group_5__0__Impl18748); if (state.failed) return ;
+            match(input,108,FollowSets000.FOLLOW_108_in_rule__DataTypeCS__Group_5__0__Impl19590); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_5_0()); 
             }
@@ -28608,21 +29656,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_5__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8723:1: rule__DataTypeCS__Group_5__1 : rule__DataTypeCS__Group_5__1__Impl rule__DataTypeCS__Group_5__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9223:1: rule__DataTypeCS__Group_5__1 : rule__DataTypeCS__Group_5__1__Impl rule__DataTypeCS__Group_5__2 ;
     public final void rule__DataTypeCS__Group_5__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8727:1: ( rule__DataTypeCS__Group_5__1__Impl rule__DataTypeCS__Group_5__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8728:2: rule__DataTypeCS__Group_5__1__Impl rule__DataTypeCS__Group_5__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9227:1: ( rule__DataTypeCS__Group_5__1__Impl rule__DataTypeCS__Group_5__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9228:2: rule__DataTypeCS__Group_5__1__Impl rule__DataTypeCS__Group_5__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__1__Impl_in_rule__DataTypeCS__Group_5__118779);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__1__Impl_in_rule__DataTypeCS__Group_5__119621);
             rule__DataTypeCS__Group_5__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__2_in_rule__DataTypeCS__Group_5__118782);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__2_in_rule__DataTypeCS__Group_5__119624);
             rule__DataTypeCS__Group_5__2();
 
             state._fsp--;
@@ -28646,33 +29694,33 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_5__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8735:1: rule__DataTypeCS__Group_5__1__Impl : ( ( rule__DataTypeCS__Alternatives_5_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9235:1: rule__DataTypeCS__Group_5__1__Impl : ( ( rule__DataTypeCS__Alternatives_5_1 )? ) ;
     public final void rule__DataTypeCS__Group_5__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8739:1: ( ( ( rule__DataTypeCS__Alternatives_5_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8740:1: ( ( rule__DataTypeCS__Alternatives_5_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9239:1: ( ( ( rule__DataTypeCS__Alternatives_5_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9240:1: ( ( rule__DataTypeCS__Alternatives_5_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8740:1: ( ( rule__DataTypeCS__Alternatives_5_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8741:1: ( rule__DataTypeCS__Alternatives_5_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9240:1: ( ( rule__DataTypeCS__Alternatives_5_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9241:1: ( rule__DataTypeCS__Alternatives_5_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getAlternatives_5_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8742:1: ( rule__DataTypeCS__Alternatives_5_1 )?
-            int alt111=2;
-            int LA111_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9242:1: ( rule__DataTypeCS__Alternatives_5_1 )?
+            int alt131=2;
+            int LA131_0 = input.LA(1);
 
-            if ( (LA111_0==54||LA111_0==59) ) {
-                alt111=1;
+            if ( (LA131_0==61||LA131_0==68) ) {
+                alt131=1;
             }
-            switch (alt111) {
+            switch (alt131) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8742:2: rule__DataTypeCS__Alternatives_5_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9242:2: rule__DataTypeCS__Alternatives_5_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Alternatives_5_1_in_rule__DataTypeCS__Group_5__1__Impl18809);
+                    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Alternatives_5_1_in_rule__DataTypeCS__Group_5__1__Impl19651);
                     rule__DataTypeCS__Alternatives_5_1();
 
                     state._fsp--;
@@ -28708,16 +29756,16 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_5__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8752:1: rule__DataTypeCS__Group_5__2 : rule__DataTypeCS__Group_5__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9252:1: rule__DataTypeCS__Group_5__2 : rule__DataTypeCS__Group_5__2__Impl ;
     public final void rule__DataTypeCS__Group_5__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8756:1: ( rule__DataTypeCS__Group_5__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8757:2: rule__DataTypeCS__Group_5__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9256:1: ( rule__DataTypeCS__Group_5__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9257:2: rule__DataTypeCS__Group_5__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__2__Impl_in_rule__DataTypeCS__Group_5__218840);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_5__2__Impl_in_rule__DataTypeCS__Group_5__219682);
             rule__DataTypeCS__Group_5__2__Impl();
 
             state._fsp--;
@@ -28741,22 +29789,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_5__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8763:1: rule__DataTypeCS__Group_5__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9263:1: rule__DataTypeCS__Group_5__2__Impl : ( '}' ) ;
     public final void rule__DataTypeCS__Group_5__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8767:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8768:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9267:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9268:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8768:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8769:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9268:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9269:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_5_2()); 
             }
-            match(input,100,FollowSets000.FOLLOW_100_in_rule__DataTypeCS__Group_5__2__Impl18868); if (state.failed) return ;
+            match(input,109,FollowSets000.FOLLOW_109_in_rule__DataTypeCS__Group_5__2__Impl19710); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_5_2()); 
             }
@@ -28782,21 +29830,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_6_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8788:1: rule__DataTypeCS__Group_6_0__0 : rule__DataTypeCS__Group_6_0__0__Impl rule__DataTypeCS__Group_6_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9288:1: rule__DataTypeCS__Group_6_0__0 : rule__DataTypeCS__Group_6_0__0__Impl rule__DataTypeCS__Group_6_0__1 ;
     public final void rule__DataTypeCS__Group_6_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8792:1: ( rule__DataTypeCS__Group_6_0__0__Impl rule__DataTypeCS__Group_6_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8793:2: rule__DataTypeCS__Group_6_0__0__Impl rule__DataTypeCS__Group_6_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9292:1: ( rule__DataTypeCS__Group_6_0__0__Impl rule__DataTypeCS__Group_6_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9293:2: rule__DataTypeCS__Group_6_0__0__Impl rule__DataTypeCS__Group_6_0__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__0__Impl_in_rule__DataTypeCS__Group_6_0__018905);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__0__Impl_in_rule__DataTypeCS__Group_6_0__019747);
             rule__DataTypeCS__Group_6_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__1_in_rule__DataTypeCS__Group_6_0__018908);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__1_in_rule__DataTypeCS__Group_6_0__019750);
             rule__DataTypeCS__Group_6_0__1();
 
             state._fsp--;
@@ -28820,22 +29868,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_6_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8800:1: rule__DataTypeCS__Group_6_0__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9300:1: rule__DataTypeCS__Group_6_0__0__Impl : ( '{' ) ;
     public final void rule__DataTypeCS__Group_6_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8804:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8805:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9304:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9305:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8805:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8806:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9305:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9306:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_6_0_0()); 
             }
-            match(input,99,FollowSets000.FOLLOW_99_in_rule__DataTypeCS__Group_6_0__0__Impl18936); if (state.failed) return ;
+            match(input,108,FollowSets000.FOLLOW_108_in_rule__DataTypeCS__Group_6_0__0__Impl19778); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_6_0_0()); 
             }
@@ -28861,21 +29909,21 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_6_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8819:1: rule__DataTypeCS__Group_6_0__1 : rule__DataTypeCS__Group_6_0__1__Impl rule__DataTypeCS__Group_6_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9319:1: rule__DataTypeCS__Group_6_0__1 : rule__DataTypeCS__Group_6_0__1__Impl rule__DataTypeCS__Group_6_0__2 ;
     public final void rule__DataTypeCS__Group_6_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8823:1: ( rule__DataTypeCS__Group_6_0__1__Impl rule__DataTypeCS__Group_6_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8824:2: rule__DataTypeCS__Group_6_0__1__Impl rule__DataTypeCS__Group_6_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9323:1: ( rule__DataTypeCS__Group_6_0__1__Impl rule__DataTypeCS__Group_6_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9324:2: rule__DataTypeCS__Group_6_0__1__Impl rule__DataTypeCS__Group_6_0__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__1__Impl_in_rule__DataTypeCS__Group_6_0__118967);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__1__Impl_in_rule__DataTypeCS__Group_6_0__119809);
             rule__DataTypeCS__Group_6_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__2_in_rule__DataTypeCS__Group_6_0__118970);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__2_in_rule__DataTypeCS__Group_6_0__119812);
             rule__DataTypeCS__Group_6_0__2();
 
             state._fsp--;
@@ -28899,37 +29947,37 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_6_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8831:1: rule__DataTypeCS__Group_6_0__1__Impl : ( ( rule__DataTypeCS__Alternatives_6_0_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9331:1: rule__DataTypeCS__Group_6_0__1__Impl : ( ( rule__DataTypeCS__Alternatives_6_0_1 )* ) ;
     public final void rule__DataTypeCS__Group_6_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8835:1: ( ( ( rule__DataTypeCS__Alternatives_6_0_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8836:1: ( ( rule__DataTypeCS__Alternatives_6_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9335:1: ( ( ( rule__DataTypeCS__Alternatives_6_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9336:1: ( ( rule__DataTypeCS__Alternatives_6_0_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8836:1: ( ( rule__DataTypeCS__Alternatives_6_0_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8837:1: ( rule__DataTypeCS__Alternatives_6_0_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9336:1: ( ( rule__DataTypeCS__Alternatives_6_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9337:1: ( rule__DataTypeCS__Alternatives_6_0_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getAlternatives_6_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8838:1: ( rule__DataTypeCS__Alternatives_6_0_1 )*
-            loop112:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9338:1: ( rule__DataTypeCS__Alternatives_6_0_1 )*
+            loop132:
             do {
-                int alt112=2;
-                int LA112_0 = input.LA(1);
+                int alt132=2;
+                int LA132_0 = input.LA(1);
 
-                if ( (LA112_0==20||(LA112_0>=55 && LA112_0<=57)||LA112_0==60) ) {
-                    alt112=1;
+                if ( (LA132_0==20||(LA132_0>=64 && LA132_0<=66)||LA132_0==69) ) {
+                    alt132=1;
                 }
 
 
-                switch (alt112) {
+                switch (alt132) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8838:2: rule__DataTypeCS__Alternatives_6_0_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9338:2: rule__DataTypeCS__Alternatives_6_0_1
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Alternatives_6_0_1_in_rule__DataTypeCS__Group_6_0__1__Impl18997);
+            	    pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Alternatives_6_0_1_in_rule__DataTypeCS__Group_6_0__1__Impl19839);
             	    rule__DataTypeCS__Alternatives_6_0_1();
 
             	    state._fsp--;
@@ -28939,7 +29987,7 @@
             	    break;
 
             	default :
-            	    break loop112;
+            	    break loop132;
                 }
             } while (true);
 
@@ -28968,16 +30016,16 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_6_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8848:1: rule__DataTypeCS__Group_6_0__2 : rule__DataTypeCS__Group_6_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9348:1: rule__DataTypeCS__Group_6_0__2 : rule__DataTypeCS__Group_6_0__2__Impl ;
     public final void rule__DataTypeCS__Group_6_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8852:1: ( rule__DataTypeCS__Group_6_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8853:2: rule__DataTypeCS__Group_6_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9352:1: ( rule__DataTypeCS__Group_6_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9353:2: rule__DataTypeCS__Group_6_0__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__2__Impl_in_rule__DataTypeCS__Group_6_0__219028);
+            pushFollow(FollowSets000.FOLLOW_rule__DataTypeCS__Group_6_0__2__Impl_in_rule__DataTypeCS__Group_6_0__219870);
             rule__DataTypeCS__Group_6_0__2__Impl();
 
             state._fsp--;
@@ -29001,22 +30049,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__Group_6_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8859:1: rule__DataTypeCS__Group_6_0__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9359:1: rule__DataTypeCS__Group_6_0__2__Impl : ( '}' ) ;
     public final void rule__DataTypeCS__Group_6_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8863:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8864:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9363:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9364:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8864:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8865:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9364:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9365:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_6_0_2()); 
             }
-            match(input,100,FollowSets000.FOLLOW_100_in_rule__DataTypeCS__Group_6_0__2__Impl19056); if (state.failed) return ;
+            match(input,109,FollowSets000.FOLLOW_109_in_rule__DataTypeCS__Group_6_0__2__Impl19898); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_6_0_2()); 
             }
@@ -29042,21 +30090,21 @@
 
 
     // $ANTLR start "rule__DetailCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8884:1: rule__DetailCS__Group__0 : rule__DetailCS__Group__0__Impl rule__DetailCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9384:1: rule__DetailCS__Group__0 : rule__DetailCS__Group__0__Impl rule__DetailCS__Group__1 ;
     public final void rule__DetailCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8888:1: ( rule__DetailCS__Group__0__Impl rule__DetailCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8889:2: rule__DetailCS__Group__0__Impl rule__DetailCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9388:1: ( rule__DetailCS__Group__0__Impl rule__DetailCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9389:2: rule__DetailCS__Group__0__Impl rule__DetailCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__0__Impl_in_rule__DetailCS__Group__019093);
+            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__0__Impl_in_rule__DetailCS__Group__019935);
             rule__DetailCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__1_in_rule__DetailCS__Group__019096);
+            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__1_in_rule__DetailCS__Group__019938);
             rule__DetailCS__Group__1();
 
             state._fsp--;
@@ -29080,25 +30128,25 @@
 
 
     // $ANTLR start "rule__DetailCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8896:1: rule__DetailCS__Group__0__Impl : ( ( rule__DetailCS__NameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9396:1: rule__DetailCS__Group__0__Impl : ( ( rule__DetailCS__NameAssignment_0 ) ) ;
     public final void rule__DetailCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8900:1: ( ( ( rule__DetailCS__NameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8901:1: ( ( rule__DetailCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9400:1: ( ( ( rule__DetailCS__NameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9401:1: ( ( rule__DetailCS__NameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8901:1: ( ( rule__DetailCS__NameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8902:1: ( rule__DetailCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9401:1: ( ( rule__DetailCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9402:1: ( rule__DetailCS__NameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDetailCSAccess().getNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8903:1: ( rule__DetailCS__NameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8903:2: rule__DetailCS__NameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9403:1: ( rule__DetailCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9403:2: rule__DetailCS__NameAssignment_0
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__NameAssignment_0_in_rule__DetailCS__Group__0__Impl19123);
+            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__NameAssignment_0_in_rule__DetailCS__Group__0__Impl19965);
             rule__DetailCS__NameAssignment_0();
 
             state._fsp--;
@@ -29131,21 +30179,21 @@
 
 
     // $ANTLR start "rule__DetailCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8913:1: rule__DetailCS__Group__1 : rule__DetailCS__Group__1__Impl rule__DetailCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9413:1: rule__DetailCS__Group__1 : rule__DetailCS__Group__1__Impl rule__DetailCS__Group__2 ;
     public final void rule__DetailCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8917:1: ( rule__DetailCS__Group__1__Impl rule__DetailCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8918:2: rule__DetailCS__Group__1__Impl rule__DetailCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9417:1: ( rule__DetailCS__Group__1__Impl rule__DetailCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9418:2: rule__DetailCS__Group__1__Impl rule__DetailCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__1__Impl_in_rule__DetailCS__Group__119153);
+            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__1__Impl_in_rule__DetailCS__Group__119995);
             rule__DetailCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__2_in_rule__DetailCS__Group__119156);
+            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__2_in_rule__DetailCS__Group__119998);
             rule__DetailCS__Group__2();
 
             state._fsp--;
@@ -29169,22 +30217,22 @@
 
 
     // $ANTLR start "rule__DetailCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8925:1: rule__DetailCS__Group__1__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9425:1: rule__DetailCS__Group__1__Impl : ( '=' ) ;
     public final void rule__DetailCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8929:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8930:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9429:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9430:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8930:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8931:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9430:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9431:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDetailCSAccess().getEqualsSignKeyword_1()); 
             }
-            match(input,70,FollowSets000.FOLLOW_70_in_rule__DetailCS__Group__1__Impl19184); if (state.failed) return ;
+            match(input,79,FollowSets000.FOLLOW_79_in_rule__DetailCS__Group__1__Impl20026); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDetailCSAccess().getEqualsSignKeyword_1()); 
             }
@@ -29210,16 +30258,16 @@
 
 
     // $ANTLR start "rule__DetailCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8944:1: rule__DetailCS__Group__2 : rule__DetailCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9444:1: rule__DetailCS__Group__2 : rule__DetailCS__Group__2__Impl ;
     public final void rule__DetailCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8948:1: ( rule__DetailCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8949:2: rule__DetailCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9448:1: ( rule__DetailCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9449:2: rule__DetailCS__Group__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__2__Impl_in_rule__DetailCS__Group__219215);
+            pushFollow(FollowSets000.FOLLOW_rule__DetailCS__Group__2__Impl_in_rule__DetailCS__Group__220057);
             rule__DetailCS__Group__2__Impl();
 
             state._fsp--;
@@ -29243,37 +30291,37 @@
 
 
     // $ANTLR start "rule__DetailCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8955:1: rule__DetailCS__Group__2__Impl : ( ( rule__DetailCS__ValuesAssignment_2 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9455:1: rule__DetailCS__Group__2__Impl : ( ( rule__DetailCS__ValuesAssignment_2 )* ) ;
     public final void rule__DetailCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8959:1: ( ( ( rule__DetailCS__ValuesAssignment_2 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8960:1: ( ( rule__DetailCS__ValuesAssignment_2 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9459:1: ( ( ( rule__DetailCS__ValuesAssignment_2 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9460:1: ( ( rule__DetailCS__ValuesAssignment_2 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8960:1: ( ( rule__DetailCS__ValuesAssignment_2 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8961:1: ( rule__DetailCS__ValuesAssignment_2 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9460:1: ( ( rule__DetailCS__ValuesAssignment_2 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9461:1: ( rule__DetailCS__ValuesAssignment_2 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDetailCSAccess().getValuesAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8962:1: ( rule__DetailCS__ValuesAssignment_2 )*
-            loop113:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9462:1: ( rule__DetailCS__ValuesAssignment_2 )*
+            loop133:
             do {
-                int alt113=2;
-                int LA113_0 = input.LA(1);
+                int alt133=2;
+                int LA133_0 = input.LA(1);
 
-                if ( ((LA113_0>=RULE_SINGLE_QUOTED_STRING && LA113_0<=RULE_ML_SINGLE_QUOTED_STRING)) ) {
-                    alt113=1;
+                if ( ((LA133_0>=RULE_SINGLE_QUOTED_STRING && LA133_0<=RULE_ML_SINGLE_QUOTED_STRING)) ) {
+                    alt133=1;
                 }
 
 
-                switch (alt113) {
+                switch (alt133) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8962:2: rule__DetailCS__ValuesAssignment_2
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9462:2: rule__DetailCS__ValuesAssignment_2
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__DetailCS__ValuesAssignment_2_in_rule__DetailCS__Group__2__Impl19242);
+            	    pushFollow(FollowSets000.FOLLOW_rule__DetailCS__ValuesAssignment_2_in_rule__DetailCS__Group__2__Impl20084);
             	    rule__DetailCS__ValuesAssignment_2();
 
             	    state._fsp--;
@@ -29283,7 +30331,7 @@
             	    break;
 
             	default :
-            	    break loop113;
+            	    break loop133;
                 }
             } while (true);
 
@@ -29312,21 +30360,21 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8978:1: rule__DocumentationCS__Group__0 : rule__DocumentationCS__Group__0__Impl rule__DocumentationCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9478:1: rule__DocumentationCS__Group__0 : rule__DocumentationCS__Group__0__Impl rule__DocumentationCS__Group__1 ;
     public final void rule__DocumentationCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8982:1: ( rule__DocumentationCS__Group__0__Impl rule__DocumentationCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8983:2: rule__DocumentationCS__Group__0__Impl rule__DocumentationCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9482:1: ( rule__DocumentationCS__Group__0__Impl rule__DocumentationCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9483:2: rule__DocumentationCS__Group__0__Impl rule__DocumentationCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__0__Impl_in_rule__DocumentationCS__Group__019279);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__0__Impl_in_rule__DocumentationCS__Group__020121);
             rule__DocumentationCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__1_in_rule__DocumentationCS__Group__019282);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__1_in_rule__DocumentationCS__Group__020124);
             rule__DocumentationCS__Group__1();
 
             state._fsp--;
@@ -29350,23 +30398,23 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8990:1: rule__DocumentationCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9490:1: rule__DocumentationCS__Group__0__Impl : ( () ) ;
     public final void rule__DocumentationCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8994:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8995:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9494:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9495:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8995:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8996:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9495:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9496:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getDocumentationCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8997:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:8999:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9497:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9499:1: 
             {
             }
 
@@ -29391,21 +30439,21 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9009:1: rule__DocumentationCS__Group__1 : rule__DocumentationCS__Group__1__Impl rule__DocumentationCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9509:1: rule__DocumentationCS__Group__1 : rule__DocumentationCS__Group__1__Impl rule__DocumentationCS__Group__2 ;
     public final void rule__DocumentationCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9013:1: ( rule__DocumentationCS__Group__1__Impl rule__DocumentationCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9014:2: rule__DocumentationCS__Group__1__Impl rule__DocumentationCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9513:1: ( rule__DocumentationCS__Group__1__Impl rule__DocumentationCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9514:2: rule__DocumentationCS__Group__1__Impl rule__DocumentationCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__1__Impl_in_rule__DocumentationCS__Group__119340);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__1__Impl_in_rule__DocumentationCS__Group__120182);
             rule__DocumentationCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__2_in_rule__DocumentationCS__Group__119343);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__2_in_rule__DocumentationCS__Group__120185);
             rule__DocumentationCS__Group__2();
 
             state._fsp--;
@@ -29429,22 +30477,22 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9021:1: rule__DocumentationCS__Group__1__Impl : ( 'documentation' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9521:1: rule__DocumentationCS__Group__1__Impl : ( 'documentation' ) ;
     public final void rule__DocumentationCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9025:1: ( ( 'documentation' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9026:1: ( 'documentation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9525:1: ( ( 'documentation' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9526:1: ( 'documentation' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9026:1: ( 'documentation' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9027:1: 'documentation'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9526:1: ( 'documentation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9527:1: 'documentation'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getDocumentationKeyword_1()); 
             }
-            match(input,56,FollowSets000.FOLLOW_56_in_rule__DocumentationCS__Group__1__Impl19371); if (state.failed) return ;
+            match(input,65,FollowSets000.FOLLOW_65_in_rule__DocumentationCS__Group__1__Impl20213); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDocumentationCSAccess().getDocumentationKeyword_1()); 
             }
@@ -29470,21 +30518,21 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9040:1: rule__DocumentationCS__Group__2 : rule__DocumentationCS__Group__2__Impl rule__DocumentationCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9540:1: rule__DocumentationCS__Group__2 : rule__DocumentationCS__Group__2__Impl rule__DocumentationCS__Group__3 ;
     public final void rule__DocumentationCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9044:1: ( rule__DocumentationCS__Group__2__Impl rule__DocumentationCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9045:2: rule__DocumentationCS__Group__2__Impl rule__DocumentationCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9544:1: ( rule__DocumentationCS__Group__2__Impl rule__DocumentationCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9545:2: rule__DocumentationCS__Group__2__Impl rule__DocumentationCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__2__Impl_in_rule__DocumentationCS__Group__219402);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__2__Impl_in_rule__DocumentationCS__Group__220244);
             rule__DocumentationCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__3_in_rule__DocumentationCS__Group__219405);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__3_in_rule__DocumentationCS__Group__220247);
             rule__DocumentationCS__Group__3();
 
             state._fsp--;
@@ -29508,33 +30556,33 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9052:1: rule__DocumentationCS__Group__2__Impl : ( ( rule__DocumentationCS__ValueAssignment_2 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9552:1: rule__DocumentationCS__Group__2__Impl : ( ( rule__DocumentationCS__ValueAssignment_2 )? ) ;
     public final void rule__DocumentationCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9056:1: ( ( ( rule__DocumentationCS__ValueAssignment_2 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9057:1: ( ( rule__DocumentationCS__ValueAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9556:1: ( ( ( rule__DocumentationCS__ValueAssignment_2 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9557:1: ( ( rule__DocumentationCS__ValueAssignment_2 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9057:1: ( ( rule__DocumentationCS__ValueAssignment_2 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9058:1: ( rule__DocumentationCS__ValueAssignment_2 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9557:1: ( ( rule__DocumentationCS__ValueAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9558:1: ( rule__DocumentationCS__ValueAssignment_2 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getValueAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9059:1: ( rule__DocumentationCS__ValueAssignment_2 )?
-            int alt114=2;
-            int LA114_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9559:1: ( rule__DocumentationCS__ValueAssignment_2 )?
+            int alt134=2;
+            int LA134_0 = input.LA(1);
 
-            if ( (LA114_0==RULE_SINGLE_QUOTED_STRING) ) {
-                alt114=1;
+            if ( (LA134_0==RULE_SINGLE_QUOTED_STRING) ) {
+                alt134=1;
             }
-            switch (alt114) {
+            switch (alt134) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9059:2: rule__DocumentationCS__ValueAssignment_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9559:2: rule__DocumentationCS__ValueAssignment_2
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__ValueAssignment_2_in_rule__DocumentationCS__Group__2__Impl19432);
+                    pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__ValueAssignment_2_in_rule__DocumentationCS__Group__2__Impl20274);
                     rule__DocumentationCS__ValueAssignment_2();
 
                     state._fsp--;
@@ -29570,21 +30618,21 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9069:1: rule__DocumentationCS__Group__3 : rule__DocumentationCS__Group__3__Impl rule__DocumentationCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9569:1: rule__DocumentationCS__Group__3 : rule__DocumentationCS__Group__3__Impl rule__DocumentationCS__Group__4 ;
     public final void rule__DocumentationCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9073:1: ( rule__DocumentationCS__Group__3__Impl rule__DocumentationCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9074:2: rule__DocumentationCS__Group__3__Impl rule__DocumentationCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9573:1: ( rule__DocumentationCS__Group__3__Impl rule__DocumentationCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9574:2: rule__DocumentationCS__Group__3__Impl rule__DocumentationCS__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__3__Impl_in_rule__DocumentationCS__Group__319463);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__3__Impl_in_rule__DocumentationCS__Group__320305);
             rule__DocumentationCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__4_in_rule__DocumentationCS__Group__319466);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__4_in_rule__DocumentationCS__Group__320308);
             rule__DocumentationCS__Group__4();
 
             state._fsp--;
@@ -29608,33 +30656,33 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9081:1: rule__DocumentationCS__Group__3__Impl : ( ( rule__DocumentationCS__Group_3__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9581:1: rule__DocumentationCS__Group__3__Impl : ( ( rule__DocumentationCS__Group_3__0 )? ) ;
     public final void rule__DocumentationCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9085:1: ( ( ( rule__DocumentationCS__Group_3__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9086:1: ( ( rule__DocumentationCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9585:1: ( ( ( rule__DocumentationCS__Group_3__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9586:1: ( ( rule__DocumentationCS__Group_3__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9086:1: ( ( rule__DocumentationCS__Group_3__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9087:1: ( rule__DocumentationCS__Group_3__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9586:1: ( ( rule__DocumentationCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9587:1: ( rule__DocumentationCS__Group_3__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getGroup_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9088:1: ( rule__DocumentationCS__Group_3__0 )?
-            int alt115=2;
-            int LA115_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9588:1: ( rule__DocumentationCS__Group_3__0 )?
+            int alt135=2;
+            int LA135_0 = input.LA(1);
 
-            if ( (LA115_0==95) ) {
-                alt115=1;
+            if ( (LA135_0==104) ) {
+                alt135=1;
             }
-            switch (alt115) {
+            switch (alt135) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9088:2: rule__DocumentationCS__Group_3__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9588:2: rule__DocumentationCS__Group_3__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__0_in_rule__DocumentationCS__Group__3__Impl19493);
+                    pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__0_in_rule__DocumentationCS__Group__3__Impl20335);
                     rule__DocumentationCS__Group_3__0();
 
                     state._fsp--;
@@ -29670,16 +30718,16 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9098:1: rule__DocumentationCS__Group__4 : rule__DocumentationCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9598:1: rule__DocumentationCS__Group__4 : rule__DocumentationCS__Group__4__Impl ;
     public final void rule__DocumentationCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9102:1: ( rule__DocumentationCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9103:2: rule__DocumentationCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9602:1: ( rule__DocumentationCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9603:2: rule__DocumentationCS__Group__4__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__4__Impl_in_rule__DocumentationCS__Group__419524);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group__4__Impl_in_rule__DocumentationCS__Group__420366);
             rule__DocumentationCS__Group__4__Impl();
 
             state._fsp--;
@@ -29703,22 +30751,22 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9109:1: rule__DocumentationCS__Group__4__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9609:1: rule__DocumentationCS__Group__4__Impl : ( ';' ) ;
     public final void rule__DocumentationCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9113:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9114:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9613:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9614:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9114:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9115:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9614:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9615:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getSemicolonKeyword_4()); 
             }
-            match(input,53,FollowSets000.FOLLOW_53_in_rule__DocumentationCS__Group__4__Impl19552); if (state.failed) return ;
+            match(input,53,FollowSets000.FOLLOW_53_in_rule__DocumentationCS__Group__4__Impl20394); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDocumentationCSAccess().getSemicolonKeyword_4()); 
             }
@@ -29744,21 +30792,21 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9138:1: rule__DocumentationCS__Group_3__0 : rule__DocumentationCS__Group_3__0__Impl rule__DocumentationCS__Group_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9638:1: rule__DocumentationCS__Group_3__0 : rule__DocumentationCS__Group_3__0__Impl rule__DocumentationCS__Group_3__1 ;
     public final void rule__DocumentationCS__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9142:1: ( rule__DocumentationCS__Group_3__0__Impl rule__DocumentationCS__Group_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9143:2: rule__DocumentationCS__Group_3__0__Impl rule__DocumentationCS__Group_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9642:1: ( rule__DocumentationCS__Group_3__0__Impl rule__DocumentationCS__Group_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9643:2: rule__DocumentationCS__Group_3__0__Impl rule__DocumentationCS__Group_3__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__0__Impl_in_rule__DocumentationCS__Group_3__019593);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__0__Impl_in_rule__DocumentationCS__Group_3__020435);
             rule__DocumentationCS__Group_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__1_in_rule__DocumentationCS__Group_3__019596);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__1_in_rule__DocumentationCS__Group_3__020438);
             rule__DocumentationCS__Group_3__1();
 
             state._fsp--;
@@ -29782,22 +30830,22 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9150:1: rule__DocumentationCS__Group_3__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9650:1: rule__DocumentationCS__Group_3__0__Impl : ( '(' ) ;
     public final void rule__DocumentationCS__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9154:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9155:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9654:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9655:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9155:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9156:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9655:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9656:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getLeftParenthesisKeyword_3_0()); 
             }
-            match(input,95,FollowSets000.FOLLOW_95_in_rule__DocumentationCS__Group_3__0__Impl19624); if (state.failed) return ;
+            match(input,104,FollowSets000.FOLLOW_104_in_rule__DocumentationCS__Group_3__0__Impl20466); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDocumentationCSAccess().getLeftParenthesisKeyword_3_0()); 
             }
@@ -29823,21 +30871,21 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9169:1: rule__DocumentationCS__Group_3__1 : rule__DocumentationCS__Group_3__1__Impl rule__DocumentationCS__Group_3__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9669:1: rule__DocumentationCS__Group_3__1 : rule__DocumentationCS__Group_3__1__Impl rule__DocumentationCS__Group_3__2 ;
     public final void rule__DocumentationCS__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9173:1: ( rule__DocumentationCS__Group_3__1__Impl rule__DocumentationCS__Group_3__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9174:2: rule__DocumentationCS__Group_3__1__Impl rule__DocumentationCS__Group_3__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9673:1: ( rule__DocumentationCS__Group_3__1__Impl rule__DocumentationCS__Group_3__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9674:2: rule__DocumentationCS__Group_3__1__Impl rule__DocumentationCS__Group_3__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__1__Impl_in_rule__DocumentationCS__Group_3__119655);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__1__Impl_in_rule__DocumentationCS__Group_3__120497);
             rule__DocumentationCS__Group_3__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__2_in_rule__DocumentationCS__Group_3__119658);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__2_in_rule__DocumentationCS__Group_3__120500);
             rule__DocumentationCS__Group_3__2();
 
             state._fsp--;
@@ -29861,25 +30909,25 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9181:1: rule__DocumentationCS__Group_3__1__Impl : ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9681:1: rule__DocumentationCS__Group_3__1__Impl : ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 ) ) ;
     public final void rule__DocumentationCS__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9185:1: ( ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9186:1: ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9685:1: ( ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9686:1: ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9186:1: ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9187:1: ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9686:1: ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9687:1: ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getOwnedDetailsAssignment_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9188:1: ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9188:2: rule__DocumentationCS__OwnedDetailsAssignment_3_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9688:1: ( rule__DocumentationCS__OwnedDetailsAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9688:2: rule__DocumentationCS__OwnedDetailsAssignment_3_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__OwnedDetailsAssignment_3_1_in_rule__DocumentationCS__Group_3__1__Impl19685);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__OwnedDetailsAssignment_3_1_in_rule__DocumentationCS__Group_3__1__Impl20527);
             rule__DocumentationCS__OwnedDetailsAssignment_3_1();
 
             state._fsp--;
@@ -29912,21 +30960,21 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9198:1: rule__DocumentationCS__Group_3__2 : rule__DocumentationCS__Group_3__2__Impl rule__DocumentationCS__Group_3__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9698:1: rule__DocumentationCS__Group_3__2 : rule__DocumentationCS__Group_3__2__Impl rule__DocumentationCS__Group_3__3 ;
     public final void rule__DocumentationCS__Group_3__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9202:1: ( rule__DocumentationCS__Group_3__2__Impl rule__DocumentationCS__Group_3__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9203:2: rule__DocumentationCS__Group_3__2__Impl rule__DocumentationCS__Group_3__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9702:1: ( rule__DocumentationCS__Group_3__2__Impl rule__DocumentationCS__Group_3__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9703:2: rule__DocumentationCS__Group_3__2__Impl rule__DocumentationCS__Group_3__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__2__Impl_in_rule__DocumentationCS__Group_3__219715);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__2__Impl_in_rule__DocumentationCS__Group_3__220557);
             rule__DocumentationCS__Group_3__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__3_in_rule__DocumentationCS__Group_3__219718);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__3_in_rule__DocumentationCS__Group_3__220560);
             rule__DocumentationCS__Group_3__3();
 
             state._fsp--;
@@ -29950,37 +30998,37 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9210:1: rule__DocumentationCS__Group_3__2__Impl : ( ( rule__DocumentationCS__Group_3_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9710:1: rule__DocumentationCS__Group_3__2__Impl : ( ( rule__DocumentationCS__Group_3_2__0 )* ) ;
     public final void rule__DocumentationCS__Group_3__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9214:1: ( ( ( rule__DocumentationCS__Group_3_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9215:1: ( ( rule__DocumentationCS__Group_3_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9714:1: ( ( ( rule__DocumentationCS__Group_3_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9715:1: ( ( rule__DocumentationCS__Group_3_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9215:1: ( ( rule__DocumentationCS__Group_3_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9216:1: ( rule__DocumentationCS__Group_3_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9715:1: ( ( rule__DocumentationCS__Group_3_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9716:1: ( rule__DocumentationCS__Group_3_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getGroup_3_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9217:1: ( rule__DocumentationCS__Group_3_2__0 )*
-            loop116:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9717:1: ( rule__DocumentationCS__Group_3_2__0 )*
+            loop136:
             do {
-                int alt116=2;
-                int LA116_0 = input.LA(1);
+                int alt136=2;
+                int LA136_0 = input.LA(1);
 
-                if ( (LA116_0==98) ) {
-                    alt116=1;
+                if ( (LA136_0==107) ) {
+                    alt136=1;
                 }
 
 
-                switch (alt116) {
+                switch (alt136) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9217:2: rule__DocumentationCS__Group_3_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9717:2: rule__DocumentationCS__Group_3_2__0
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3_2__0_in_rule__DocumentationCS__Group_3__2__Impl19745);
+            	    pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3_2__0_in_rule__DocumentationCS__Group_3__2__Impl20587);
             	    rule__DocumentationCS__Group_3_2__0();
 
             	    state._fsp--;
@@ -29990,7 +31038,7 @@
             	    break;
 
             	default :
-            	    break loop116;
+            	    break loop136;
                 }
             } while (true);
 
@@ -30019,16 +31067,16 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9227:1: rule__DocumentationCS__Group_3__3 : rule__DocumentationCS__Group_3__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9727:1: rule__DocumentationCS__Group_3__3 : rule__DocumentationCS__Group_3__3__Impl ;
     public final void rule__DocumentationCS__Group_3__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9231:1: ( rule__DocumentationCS__Group_3__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9232:2: rule__DocumentationCS__Group_3__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9731:1: ( rule__DocumentationCS__Group_3__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9732:2: rule__DocumentationCS__Group_3__3__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__3__Impl_in_rule__DocumentationCS__Group_3__319776);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3__3__Impl_in_rule__DocumentationCS__Group_3__320618);
             rule__DocumentationCS__Group_3__3__Impl();
 
             state._fsp--;
@@ -30052,22 +31100,22 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9238:1: rule__DocumentationCS__Group_3__3__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9738:1: rule__DocumentationCS__Group_3__3__Impl : ( ')' ) ;
     public final void rule__DocumentationCS__Group_3__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9242:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9243:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9742:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9743:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9243:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9244:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9743:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9744:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getRightParenthesisKeyword_3_3()); 
             }
-            match(input,96,FollowSets000.FOLLOW_96_in_rule__DocumentationCS__Group_3__3__Impl19804); if (state.failed) return ;
+            match(input,105,FollowSets000.FOLLOW_105_in_rule__DocumentationCS__Group_3__3__Impl20646); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDocumentationCSAccess().getRightParenthesisKeyword_3_3()); 
             }
@@ -30093,21 +31141,21 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9265:1: rule__DocumentationCS__Group_3_2__0 : rule__DocumentationCS__Group_3_2__0__Impl rule__DocumentationCS__Group_3_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9765:1: rule__DocumentationCS__Group_3_2__0 : rule__DocumentationCS__Group_3_2__0__Impl rule__DocumentationCS__Group_3_2__1 ;
     public final void rule__DocumentationCS__Group_3_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9269:1: ( rule__DocumentationCS__Group_3_2__0__Impl rule__DocumentationCS__Group_3_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9270:2: rule__DocumentationCS__Group_3_2__0__Impl rule__DocumentationCS__Group_3_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9769:1: ( rule__DocumentationCS__Group_3_2__0__Impl rule__DocumentationCS__Group_3_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9770:2: rule__DocumentationCS__Group_3_2__0__Impl rule__DocumentationCS__Group_3_2__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3_2__0__Impl_in_rule__DocumentationCS__Group_3_2__019843);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3_2__0__Impl_in_rule__DocumentationCS__Group_3_2__020685);
             rule__DocumentationCS__Group_3_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3_2__1_in_rule__DocumentationCS__Group_3_2__019846);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3_2__1_in_rule__DocumentationCS__Group_3_2__020688);
             rule__DocumentationCS__Group_3_2__1();
 
             state._fsp--;
@@ -30131,22 +31179,22 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9277:1: rule__DocumentationCS__Group_3_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9777:1: rule__DocumentationCS__Group_3_2__0__Impl : ( ',' ) ;
     public final void rule__DocumentationCS__Group_3_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9281:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9282:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9781:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9782:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9282:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9283:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9782:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9783:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getCommaKeyword_3_2_0()); 
             }
-            match(input,98,FollowSets000.FOLLOW_98_in_rule__DocumentationCS__Group_3_2__0__Impl19874); if (state.failed) return ;
+            match(input,107,FollowSets000.FOLLOW_107_in_rule__DocumentationCS__Group_3_2__0__Impl20716); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDocumentationCSAccess().getCommaKeyword_3_2_0()); 
             }
@@ -30172,16 +31220,16 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9296:1: rule__DocumentationCS__Group_3_2__1 : rule__DocumentationCS__Group_3_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9796:1: rule__DocumentationCS__Group_3_2__1 : rule__DocumentationCS__Group_3_2__1__Impl ;
     public final void rule__DocumentationCS__Group_3_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9300:1: ( rule__DocumentationCS__Group_3_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9301:2: rule__DocumentationCS__Group_3_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9800:1: ( rule__DocumentationCS__Group_3_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9801:2: rule__DocumentationCS__Group_3_2__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3_2__1__Impl_in_rule__DocumentationCS__Group_3_2__119905);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__Group_3_2__1__Impl_in_rule__DocumentationCS__Group_3_2__120747);
             rule__DocumentationCS__Group_3_2__1__Impl();
 
             state._fsp--;
@@ -30205,25 +31253,25 @@
 
 
     // $ANTLR start "rule__DocumentationCS__Group_3_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9307:1: rule__DocumentationCS__Group_3_2__1__Impl : ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9807:1: rule__DocumentationCS__Group_3_2__1__Impl : ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 ) ) ;
     public final void rule__DocumentationCS__Group_3_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9311:1: ( ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9312:1: ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9811:1: ( ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9812:1: ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9312:1: ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9313:1: ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9812:1: ( ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9813:1: ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getOwnedDetailsAssignment_3_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9314:1: ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9314:2: rule__DocumentationCS__OwnedDetailsAssignment_3_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9814:1: ( rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9814:2: rule__DocumentationCS__OwnedDetailsAssignment_3_2_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__OwnedDetailsAssignment_3_2_1_in_rule__DocumentationCS__Group_3_2__1__Impl19932);
+            pushFollow(FollowSets000.FOLLOW_rule__DocumentationCS__OwnedDetailsAssignment_3_2_1_in_rule__DocumentationCS__Group_3_2__1__Impl20774);
             rule__DocumentationCS__OwnedDetailsAssignment_3_2_1();
 
             state._fsp--;
@@ -30256,21 +31304,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9328:1: rule__EnumerationCS__Group__0 : rule__EnumerationCS__Group__0__Impl rule__EnumerationCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9828:1: rule__EnumerationCS__Group__0 : rule__EnumerationCS__Group__0__Impl rule__EnumerationCS__Group__1 ;
     public final void rule__EnumerationCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9332:1: ( rule__EnumerationCS__Group__0__Impl rule__EnumerationCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9333:2: rule__EnumerationCS__Group__0__Impl rule__EnumerationCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9832:1: ( rule__EnumerationCS__Group__0__Impl rule__EnumerationCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9833:2: rule__EnumerationCS__Group__0__Impl rule__EnumerationCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__0__Impl_in_rule__EnumerationCS__Group__019966);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__0__Impl_in_rule__EnumerationCS__Group__020808);
             rule__EnumerationCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__1_in_rule__EnumerationCS__Group__019969);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__1_in_rule__EnumerationCS__Group__020811);
             rule__EnumerationCS__Group__1();
 
             state._fsp--;
@@ -30294,22 +31342,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9340:1: rule__EnumerationCS__Group__0__Impl : ( 'enum' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9840:1: rule__EnumerationCS__Group__0__Impl : ( 'enum' ) ;
     public final void rule__EnumerationCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9344:1: ( ( 'enum' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9345:1: ( 'enum' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9844:1: ( ( 'enum' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9845:1: ( 'enum' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9345:1: ( 'enum' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9346:1: 'enum'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9845:1: ( 'enum' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9846:1: 'enum'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getEnumKeyword_0()); 
             }
-            match(input,27,FollowSets000.FOLLOW_27_in_rule__EnumerationCS__Group__0__Impl19997); if (state.failed) return ;
+            match(input,27,FollowSets000.FOLLOW_27_in_rule__EnumerationCS__Group__0__Impl20839); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationCSAccess().getEnumKeyword_0()); 
             }
@@ -30335,21 +31383,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9359:1: rule__EnumerationCS__Group__1 : rule__EnumerationCS__Group__1__Impl rule__EnumerationCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9859:1: rule__EnumerationCS__Group__1 : rule__EnumerationCS__Group__1__Impl rule__EnumerationCS__Group__2 ;
     public final void rule__EnumerationCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9363:1: ( rule__EnumerationCS__Group__1__Impl rule__EnumerationCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9364:2: rule__EnumerationCS__Group__1__Impl rule__EnumerationCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9863:1: ( rule__EnumerationCS__Group__1__Impl rule__EnumerationCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9864:2: rule__EnumerationCS__Group__1__Impl rule__EnumerationCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__1__Impl_in_rule__EnumerationCS__Group__120028);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__1__Impl_in_rule__EnumerationCS__Group__120870);
             rule__EnumerationCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__2_in_rule__EnumerationCS__Group__120031);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__2_in_rule__EnumerationCS__Group__120873);
             rule__EnumerationCS__Group__2();
 
             state._fsp--;
@@ -30373,25 +31421,25 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9371:1: rule__EnumerationCS__Group__1__Impl : ( ( rule__EnumerationCS__NameAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9871:1: rule__EnumerationCS__Group__1__Impl : ( ( rule__EnumerationCS__NameAssignment_1 ) ) ;
     public final void rule__EnumerationCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9375:1: ( ( ( rule__EnumerationCS__NameAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9376:1: ( ( rule__EnumerationCS__NameAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9875:1: ( ( ( rule__EnumerationCS__NameAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9876:1: ( ( rule__EnumerationCS__NameAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9376:1: ( ( rule__EnumerationCS__NameAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9377:1: ( rule__EnumerationCS__NameAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9876:1: ( ( rule__EnumerationCS__NameAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9877:1: ( rule__EnumerationCS__NameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getNameAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9378:1: ( rule__EnumerationCS__NameAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9378:2: rule__EnumerationCS__NameAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9878:1: ( rule__EnumerationCS__NameAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9878:2: rule__EnumerationCS__NameAssignment_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__NameAssignment_1_in_rule__EnumerationCS__Group__1__Impl20058);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__NameAssignment_1_in_rule__EnumerationCS__Group__1__Impl20900);
             rule__EnumerationCS__NameAssignment_1();
 
             state._fsp--;
@@ -30424,21 +31472,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9388:1: rule__EnumerationCS__Group__2 : rule__EnumerationCS__Group__2__Impl rule__EnumerationCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9888:1: rule__EnumerationCS__Group__2 : rule__EnumerationCS__Group__2__Impl rule__EnumerationCS__Group__3 ;
     public final void rule__EnumerationCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9392:1: ( rule__EnumerationCS__Group__2__Impl rule__EnumerationCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9393:2: rule__EnumerationCS__Group__2__Impl rule__EnumerationCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9892:1: ( rule__EnumerationCS__Group__2__Impl rule__EnumerationCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9893:2: rule__EnumerationCS__Group__2__Impl rule__EnumerationCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__2__Impl_in_rule__EnumerationCS__Group__220088);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__2__Impl_in_rule__EnumerationCS__Group__220930);
             rule__EnumerationCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__3_in_rule__EnumerationCS__Group__220091);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__3_in_rule__EnumerationCS__Group__220933);
             rule__EnumerationCS__Group__3();
 
             state._fsp--;
@@ -30462,33 +31510,33 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9400:1: rule__EnumerationCS__Group__2__Impl : ( ( rule__EnumerationCS__OwnedSignatureAssignment_2 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9900:1: rule__EnumerationCS__Group__2__Impl : ( ( rule__EnumerationCS__OwnedSignatureAssignment_2 )? ) ;
     public final void rule__EnumerationCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9404:1: ( ( ( rule__EnumerationCS__OwnedSignatureAssignment_2 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9405:1: ( ( rule__EnumerationCS__OwnedSignatureAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9904:1: ( ( ( rule__EnumerationCS__OwnedSignatureAssignment_2 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9905:1: ( ( rule__EnumerationCS__OwnedSignatureAssignment_2 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9405:1: ( ( rule__EnumerationCS__OwnedSignatureAssignment_2 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9406:1: ( rule__EnumerationCS__OwnedSignatureAssignment_2 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9905:1: ( ( rule__EnumerationCS__OwnedSignatureAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9906:1: ( rule__EnumerationCS__OwnedSignatureAssignment_2 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getOwnedSignatureAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9407:1: ( rule__EnumerationCS__OwnedSignatureAssignment_2 )?
-            int alt117=2;
-            int LA117_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9907:1: ( rule__EnumerationCS__OwnedSignatureAssignment_2 )?
+            int alt137=2;
+            int LA137_0 = input.LA(1);
 
-            if ( (LA117_0==67||LA117_0==95) ) {
-                alt117=1;
+            if ( (LA137_0==76||LA137_0==104) ) {
+                alt137=1;
             }
-            switch (alt117) {
+            switch (alt137) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9407:2: rule__EnumerationCS__OwnedSignatureAssignment_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9907:2: rule__EnumerationCS__OwnedSignatureAssignment_2
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__OwnedSignatureAssignment_2_in_rule__EnumerationCS__Group__2__Impl20118);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__OwnedSignatureAssignment_2_in_rule__EnumerationCS__Group__2__Impl20960);
                     rule__EnumerationCS__OwnedSignatureAssignment_2();
 
                     state._fsp--;
@@ -30524,21 +31572,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9417:1: rule__EnumerationCS__Group__3 : rule__EnumerationCS__Group__3__Impl rule__EnumerationCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9917:1: rule__EnumerationCS__Group__3 : rule__EnumerationCS__Group__3__Impl rule__EnumerationCS__Group__4 ;
     public final void rule__EnumerationCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9421:1: ( rule__EnumerationCS__Group__3__Impl rule__EnumerationCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9422:2: rule__EnumerationCS__Group__3__Impl rule__EnumerationCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9921:1: ( rule__EnumerationCS__Group__3__Impl rule__EnumerationCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9922:2: rule__EnumerationCS__Group__3__Impl rule__EnumerationCS__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__3__Impl_in_rule__EnumerationCS__Group__320149);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__3__Impl_in_rule__EnumerationCS__Group__320991);
             rule__EnumerationCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__4_in_rule__EnumerationCS__Group__320152);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__4_in_rule__EnumerationCS__Group__320994);
             rule__EnumerationCS__Group__4();
 
             state._fsp--;
@@ -30562,33 +31610,33 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9429:1: rule__EnumerationCS__Group__3__Impl : ( ( rule__EnumerationCS__Group_3__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9929:1: rule__EnumerationCS__Group__3__Impl : ( ( rule__EnumerationCS__Group_3__0 )? ) ;
     public final void rule__EnumerationCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9433:1: ( ( ( rule__EnumerationCS__Group_3__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9434:1: ( ( rule__EnumerationCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9933:1: ( ( ( rule__EnumerationCS__Group_3__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9934:1: ( ( rule__EnumerationCS__Group_3__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9434:1: ( ( rule__EnumerationCS__Group_3__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9435:1: ( rule__EnumerationCS__Group_3__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9934:1: ( ( rule__EnumerationCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9935:1: ( rule__EnumerationCS__Group_3__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getGroup_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9436:1: ( rule__EnumerationCS__Group_3__0 )?
-            int alt118=2;
-            int LA118_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9936:1: ( rule__EnumerationCS__Group_3__0 )?
+            int alt138=2;
+            int LA138_0 = input.LA(1);
 
-            if ( (LA118_0==97) ) {
-                alt118=1;
+            if ( (LA138_0==106) ) {
+                alt138=1;
             }
-            switch (alt118) {
+            switch (alt138) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9436:2: rule__EnumerationCS__Group_3__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9936:2: rule__EnumerationCS__Group_3__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_3__0_in_rule__EnumerationCS__Group__3__Impl20179);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_3__0_in_rule__EnumerationCS__Group__3__Impl21021);
                     rule__EnumerationCS__Group_3__0();
 
                     state._fsp--;
@@ -30624,21 +31672,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9446:1: rule__EnumerationCS__Group__4 : rule__EnumerationCS__Group__4__Impl rule__EnumerationCS__Group__5 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9946:1: rule__EnumerationCS__Group__4 : rule__EnumerationCS__Group__4__Impl rule__EnumerationCS__Group__5 ;
     public final void rule__EnumerationCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9450:1: ( rule__EnumerationCS__Group__4__Impl rule__EnumerationCS__Group__5 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9451:2: rule__EnumerationCS__Group__4__Impl rule__EnumerationCS__Group__5
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9950:1: ( rule__EnumerationCS__Group__4__Impl rule__EnumerationCS__Group__5 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9951:2: rule__EnumerationCS__Group__4__Impl rule__EnumerationCS__Group__5
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__4__Impl_in_rule__EnumerationCS__Group__420210);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__4__Impl_in_rule__EnumerationCS__Group__421052);
             rule__EnumerationCS__Group__4__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__5_in_rule__EnumerationCS__Group__420213);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__5_in_rule__EnumerationCS__Group__421055);
             rule__EnumerationCS__Group__5();
 
             state._fsp--;
@@ -30662,44 +31710,44 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9458:1: rule__EnumerationCS__Group__4__Impl : ( ( rule__EnumerationCS__Group_4__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9958:1: rule__EnumerationCS__Group__4__Impl : ( ( rule__EnumerationCS__Group_4__0 )? ) ;
     public final void rule__EnumerationCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9462:1: ( ( ( rule__EnumerationCS__Group_4__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9463:1: ( ( rule__EnumerationCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9962:1: ( ( ( rule__EnumerationCS__Group_4__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9963:1: ( ( rule__EnumerationCS__Group_4__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9463:1: ( ( rule__EnumerationCS__Group_4__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9464:1: ( rule__EnumerationCS__Group_4__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9963:1: ( ( rule__EnumerationCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9964:1: ( rule__EnumerationCS__Group_4__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getGroup_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9465:1: ( rule__EnumerationCS__Group_4__0 )?
-            int alt119=2;
-            int LA119_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9965:1: ( rule__EnumerationCS__Group_4__0 )?
+            int alt139=2;
+            int LA139_0 = input.LA(1);
 
-            if ( (LA119_0==99) ) {
-                int LA119_1 = input.LA(2);
+            if ( (LA139_0==108) ) {
+                int LA139_1 = input.LA(2);
 
-                if ( (LA119_1==100) ) {
-                    int LA119_3 = input.LA(3);
+                if ( (LA139_1==109) ) {
+                    int LA139_3 = input.LA(3);
 
-                    if ( (LA119_3==53||LA119_3==99) ) {
-                        alt119=1;
+                    if ( (LA139_3==53||LA139_3==108) ) {
+                        alt139=1;
                     }
                 }
-                else if ( (LA119_1==54||LA119_1==59) ) {
-                    alt119=1;
+                else if ( (LA139_1==61||LA139_1==68) ) {
+                    alt139=1;
                 }
             }
-            switch (alt119) {
+            switch (alt139) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9465:2: rule__EnumerationCS__Group_4__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9965:2: rule__EnumerationCS__Group_4__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__0_in_rule__EnumerationCS__Group__4__Impl20240);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__0_in_rule__EnumerationCS__Group__4__Impl21082);
                     rule__EnumerationCS__Group_4__0();
 
                     state._fsp--;
@@ -30735,16 +31783,16 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9475:1: rule__EnumerationCS__Group__5 : rule__EnumerationCS__Group__5__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9975:1: rule__EnumerationCS__Group__5 : rule__EnumerationCS__Group__5__Impl ;
     public final void rule__EnumerationCS__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9479:1: ( rule__EnumerationCS__Group__5__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9480:2: rule__EnumerationCS__Group__5__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9979:1: ( rule__EnumerationCS__Group__5__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9980:2: rule__EnumerationCS__Group__5__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__5__Impl_in_rule__EnumerationCS__Group__520271);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group__5__Impl_in_rule__EnumerationCS__Group__521113);
             rule__EnumerationCS__Group__5__Impl();
 
             state._fsp--;
@@ -30768,25 +31816,25 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group__5__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9486:1: rule__EnumerationCS__Group__5__Impl : ( ( rule__EnumerationCS__Alternatives_5 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9986:1: rule__EnumerationCS__Group__5__Impl : ( ( rule__EnumerationCS__Alternatives_5 ) ) ;
     public final void rule__EnumerationCS__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9490:1: ( ( ( rule__EnumerationCS__Alternatives_5 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9491:1: ( ( rule__EnumerationCS__Alternatives_5 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9990:1: ( ( ( rule__EnumerationCS__Alternatives_5 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9991:1: ( ( rule__EnumerationCS__Alternatives_5 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9491:1: ( ( rule__EnumerationCS__Alternatives_5 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9492:1: ( rule__EnumerationCS__Alternatives_5 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9991:1: ( ( rule__EnumerationCS__Alternatives_5 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9992:1: ( rule__EnumerationCS__Alternatives_5 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getAlternatives_5()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9493:1: ( rule__EnumerationCS__Alternatives_5 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9493:2: rule__EnumerationCS__Alternatives_5
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9993:1: ( rule__EnumerationCS__Alternatives_5 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9993:2: rule__EnumerationCS__Alternatives_5
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Alternatives_5_in_rule__EnumerationCS__Group__5__Impl20298);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Alternatives_5_in_rule__EnumerationCS__Group__5__Impl21140);
             rule__EnumerationCS__Alternatives_5();
 
             state._fsp--;
@@ -30819,21 +31867,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9515:1: rule__EnumerationCS__Group_3__0 : rule__EnumerationCS__Group_3__0__Impl rule__EnumerationCS__Group_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10015:1: rule__EnumerationCS__Group_3__0 : rule__EnumerationCS__Group_3__0__Impl rule__EnumerationCS__Group_3__1 ;
     public final void rule__EnumerationCS__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9519:1: ( rule__EnumerationCS__Group_3__0__Impl rule__EnumerationCS__Group_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9520:2: rule__EnumerationCS__Group_3__0__Impl rule__EnumerationCS__Group_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10019:1: ( rule__EnumerationCS__Group_3__0__Impl rule__EnumerationCS__Group_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10020:2: rule__EnumerationCS__Group_3__0__Impl rule__EnumerationCS__Group_3__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_3__0__Impl_in_rule__EnumerationCS__Group_3__020340);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_3__0__Impl_in_rule__EnumerationCS__Group_3__021182);
             rule__EnumerationCS__Group_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_3__1_in_rule__EnumerationCS__Group_3__020343);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_3__1_in_rule__EnumerationCS__Group_3__021185);
             rule__EnumerationCS__Group_3__1();
 
             state._fsp--;
@@ -30857,22 +31905,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9527:1: rule__EnumerationCS__Group_3__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10027:1: rule__EnumerationCS__Group_3__0__Impl : ( ':' ) ;
     public final void rule__EnumerationCS__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9531:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9532:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10031:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10032:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9532:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9533:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10032:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10033:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getColonKeyword_3_0()); 
             }
-            match(input,97,FollowSets000.FOLLOW_97_in_rule__EnumerationCS__Group_3__0__Impl20371); if (state.failed) return ;
+            match(input,106,FollowSets000.FOLLOW_106_in_rule__EnumerationCS__Group_3__0__Impl21213); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationCSAccess().getColonKeyword_3_0()); 
             }
@@ -30898,16 +31946,16 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9546:1: rule__EnumerationCS__Group_3__1 : rule__EnumerationCS__Group_3__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10046:1: rule__EnumerationCS__Group_3__1 : rule__EnumerationCS__Group_3__1__Impl ;
     public final void rule__EnumerationCS__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9550:1: ( rule__EnumerationCS__Group_3__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9551:2: rule__EnumerationCS__Group_3__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10050:1: ( rule__EnumerationCS__Group_3__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10051:2: rule__EnumerationCS__Group_3__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_3__1__Impl_in_rule__EnumerationCS__Group_3__120402);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_3__1__Impl_in_rule__EnumerationCS__Group_3__121244);
             rule__EnumerationCS__Group_3__1__Impl();
 
             state._fsp--;
@@ -30931,25 +31979,25 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9557:1: rule__EnumerationCS__Group_3__1__Impl : ( ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10057:1: rule__EnumerationCS__Group_3__1__Impl : ( ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 ) ) ;
     public final void rule__EnumerationCS__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9561:1: ( ( ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9562:1: ( ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10061:1: ( ( ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10062:1: ( ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9562:1: ( ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9563:1: ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10062:1: ( ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10063:1: ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getInstanceClassNameAssignment_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9564:1: ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9564:2: rule__EnumerationCS__InstanceClassNameAssignment_3_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10064:1: ( rule__EnumerationCS__InstanceClassNameAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10064:2: rule__EnumerationCS__InstanceClassNameAssignment_3_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__InstanceClassNameAssignment_3_1_in_rule__EnumerationCS__Group_3__1__Impl20429);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__InstanceClassNameAssignment_3_1_in_rule__EnumerationCS__Group_3__1__Impl21271);
             rule__EnumerationCS__InstanceClassNameAssignment_3_1();
 
             state._fsp--;
@@ -30982,21 +32030,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_4__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9578:1: rule__EnumerationCS__Group_4__0 : rule__EnumerationCS__Group_4__0__Impl rule__EnumerationCS__Group_4__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10078:1: rule__EnumerationCS__Group_4__0 : rule__EnumerationCS__Group_4__0__Impl rule__EnumerationCS__Group_4__1 ;
     public final void rule__EnumerationCS__Group_4__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9582:1: ( rule__EnumerationCS__Group_4__0__Impl rule__EnumerationCS__Group_4__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9583:2: rule__EnumerationCS__Group_4__0__Impl rule__EnumerationCS__Group_4__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10082:1: ( rule__EnumerationCS__Group_4__0__Impl rule__EnumerationCS__Group_4__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10083:2: rule__EnumerationCS__Group_4__0__Impl rule__EnumerationCS__Group_4__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__0__Impl_in_rule__EnumerationCS__Group_4__020463);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__0__Impl_in_rule__EnumerationCS__Group_4__021305);
             rule__EnumerationCS__Group_4__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__1_in_rule__EnumerationCS__Group_4__020466);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__1_in_rule__EnumerationCS__Group_4__021308);
             rule__EnumerationCS__Group_4__1();
 
             state._fsp--;
@@ -31020,22 +32068,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_4__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9590:1: rule__EnumerationCS__Group_4__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10090:1: rule__EnumerationCS__Group_4__0__Impl : ( '{' ) ;
     public final void rule__EnumerationCS__Group_4__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9594:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9595:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10094:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10095:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9595:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9596:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10095:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10096:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getLeftCurlyBracketKeyword_4_0()); 
             }
-            match(input,99,FollowSets000.FOLLOW_99_in_rule__EnumerationCS__Group_4__0__Impl20494); if (state.failed) return ;
+            match(input,108,FollowSets000.FOLLOW_108_in_rule__EnumerationCS__Group_4__0__Impl21336); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationCSAccess().getLeftCurlyBracketKeyword_4_0()); 
             }
@@ -31061,21 +32109,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_4__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9609:1: rule__EnumerationCS__Group_4__1 : rule__EnumerationCS__Group_4__1__Impl rule__EnumerationCS__Group_4__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10109:1: rule__EnumerationCS__Group_4__1 : rule__EnumerationCS__Group_4__1__Impl rule__EnumerationCS__Group_4__2 ;
     public final void rule__EnumerationCS__Group_4__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9613:1: ( rule__EnumerationCS__Group_4__1__Impl rule__EnumerationCS__Group_4__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9614:2: rule__EnumerationCS__Group_4__1__Impl rule__EnumerationCS__Group_4__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10113:1: ( rule__EnumerationCS__Group_4__1__Impl rule__EnumerationCS__Group_4__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10114:2: rule__EnumerationCS__Group_4__1__Impl rule__EnumerationCS__Group_4__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__1__Impl_in_rule__EnumerationCS__Group_4__120525);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__1__Impl_in_rule__EnumerationCS__Group_4__121367);
             rule__EnumerationCS__Group_4__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__2_in_rule__EnumerationCS__Group_4__120528);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__2_in_rule__EnumerationCS__Group_4__121370);
             rule__EnumerationCS__Group_4__2();
 
             state._fsp--;
@@ -31099,33 +32147,33 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_4__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9621:1: rule__EnumerationCS__Group_4__1__Impl : ( ( rule__EnumerationCS__Alternatives_4_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10121:1: rule__EnumerationCS__Group_4__1__Impl : ( ( rule__EnumerationCS__Alternatives_4_1 )? ) ;
     public final void rule__EnumerationCS__Group_4__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9625:1: ( ( ( rule__EnumerationCS__Alternatives_4_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9626:1: ( ( rule__EnumerationCS__Alternatives_4_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10125:1: ( ( ( rule__EnumerationCS__Alternatives_4_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10126:1: ( ( rule__EnumerationCS__Alternatives_4_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9626:1: ( ( rule__EnumerationCS__Alternatives_4_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9627:1: ( rule__EnumerationCS__Alternatives_4_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10126:1: ( ( rule__EnumerationCS__Alternatives_4_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10127:1: ( rule__EnumerationCS__Alternatives_4_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getAlternatives_4_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9628:1: ( rule__EnumerationCS__Alternatives_4_1 )?
-            int alt120=2;
-            int LA120_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10128:1: ( rule__EnumerationCS__Alternatives_4_1 )?
+            int alt140=2;
+            int LA140_0 = input.LA(1);
 
-            if ( (LA120_0==54||LA120_0==59) ) {
-                alt120=1;
+            if ( (LA140_0==61||LA140_0==68) ) {
+                alt140=1;
             }
-            switch (alt120) {
+            switch (alt140) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9628:2: rule__EnumerationCS__Alternatives_4_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10128:2: rule__EnumerationCS__Alternatives_4_1
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Alternatives_4_1_in_rule__EnumerationCS__Group_4__1__Impl20555);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Alternatives_4_1_in_rule__EnumerationCS__Group_4__1__Impl21397);
                     rule__EnumerationCS__Alternatives_4_1();
 
                     state._fsp--;
@@ -31161,16 +32209,16 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_4__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9638:1: rule__EnumerationCS__Group_4__2 : rule__EnumerationCS__Group_4__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10138:1: rule__EnumerationCS__Group_4__2 : rule__EnumerationCS__Group_4__2__Impl ;
     public final void rule__EnumerationCS__Group_4__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9642:1: ( rule__EnumerationCS__Group_4__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9643:2: rule__EnumerationCS__Group_4__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10142:1: ( rule__EnumerationCS__Group_4__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10143:2: rule__EnumerationCS__Group_4__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__2__Impl_in_rule__EnumerationCS__Group_4__220586);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_4__2__Impl_in_rule__EnumerationCS__Group_4__221428);
             rule__EnumerationCS__Group_4__2__Impl();
 
             state._fsp--;
@@ -31194,22 +32242,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_4__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9649:1: rule__EnumerationCS__Group_4__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10149:1: rule__EnumerationCS__Group_4__2__Impl : ( '}' ) ;
     public final void rule__EnumerationCS__Group_4__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9653:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9654:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10153:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10154:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9654:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9655:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10154:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10155:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getRightCurlyBracketKeyword_4_2()); 
             }
-            match(input,100,FollowSets000.FOLLOW_100_in_rule__EnumerationCS__Group_4__2__Impl20614); if (state.failed) return ;
+            match(input,109,FollowSets000.FOLLOW_109_in_rule__EnumerationCS__Group_4__2__Impl21456); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationCSAccess().getRightCurlyBracketKeyword_4_2()); 
             }
@@ -31235,21 +32283,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_5_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9674:1: rule__EnumerationCS__Group_5_0__0 : rule__EnumerationCS__Group_5_0__0__Impl rule__EnumerationCS__Group_5_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10174:1: rule__EnumerationCS__Group_5_0__0 : rule__EnumerationCS__Group_5_0__0__Impl rule__EnumerationCS__Group_5_0__1 ;
     public final void rule__EnumerationCS__Group_5_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9678:1: ( rule__EnumerationCS__Group_5_0__0__Impl rule__EnumerationCS__Group_5_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9679:2: rule__EnumerationCS__Group_5_0__0__Impl rule__EnumerationCS__Group_5_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10178:1: ( rule__EnumerationCS__Group_5_0__0__Impl rule__EnumerationCS__Group_5_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10179:2: rule__EnumerationCS__Group_5_0__0__Impl rule__EnumerationCS__Group_5_0__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__0__Impl_in_rule__EnumerationCS__Group_5_0__020651);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__0__Impl_in_rule__EnumerationCS__Group_5_0__021493);
             rule__EnumerationCS__Group_5_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__1_in_rule__EnumerationCS__Group_5_0__020654);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__1_in_rule__EnumerationCS__Group_5_0__021496);
             rule__EnumerationCS__Group_5_0__1();
 
             state._fsp--;
@@ -31273,22 +32321,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_5_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9686:1: rule__EnumerationCS__Group_5_0__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10186:1: rule__EnumerationCS__Group_5_0__0__Impl : ( '{' ) ;
     public final void rule__EnumerationCS__Group_5_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9690:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9691:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10190:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10191:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9691:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9692:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10191:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10192:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getLeftCurlyBracketKeyword_5_0_0()); 
             }
-            match(input,99,FollowSets000.FOLLOW_99_in_rule__EnumerationCS__Group_5_0__0__Impl20682); if (state.failed) return ;
+            match(input,108,FollowSets000.FOLLOW_108_in_rule__EnumerationCS__Group_5_0__0__Impl21524); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationCSAccess().getLeftCurlyBracketKeyword_5_0_0()); 
             }
@@ -31314,21 +32362,21 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_5_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9705:1: rule__EnumerationCS__Group_5_0__1 : rule__EnumerationCS__Group_5_0__1__Impl rule__EnumerationCS__Group_5_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10205:1: rule__EnumerationCS__Group_5_0__1 : rule__EnumerationCS__Group_5_0__1__Impl rule__EnumerationCS__Group_5_0__2 ;
     public final void rule__EnumerationCS__Group_5_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9709:1: ( rule__EnumerationCS__Group_5_0__1__Impl rule__EnumerationCS__Group_5_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9710:2: rule__EnumerationCS__Group_5_0__1__Impl rule__EnumerationCS__Group_5_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10209:1: ( rule__EnumerationCS__Group_5_0__1__Impl rule__EnumerationCS__Group_5_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10210:2: rule__EnumerationCS__Group_5_0__1__Impl rule__EnumerationCS__Group_5_0__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__1__Impl_in_rule__EnumerationCS__Group_5_0__120713);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__1__Impl_in_rule__EnumerationCS__Group_5_0__121555);
             rule__EnumerationCS__Group_5_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__2_in_rule__EnumerationCS__Group_5_0__120716);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__2_in_rule__EnumerationCS__Group_5_0__121558);
             rule__EnumerationCS__Group_5_0__2();
 
             state._fsp--;
@@ -31352,37 +32400,37 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_5_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9717:1: rule__EnumerationCS__Group_5_0__1__Impl : ( ( rule__EnumerationCS__Alternatives_5_0_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10217:1: rule__EnumerationCS__Group_5_0__1__Impl : ( ( rule__EnumerationCS__Alternatives_5_0_1 )* ) ;
     public final void rule__EnumerationCS__Group_5_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9721:1: ( ( ( rule__EnumerationCS__Alternatives_5_0_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9722:1: ( ( rule__EnumerationCS__Alternatives_5_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10221:1: ( ( ( rule__EnumerationCS__Alternatives_5_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10222:1: ( ( rule__EnumerationCS__Alternatives_5_0_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9722:1: ( ( rule__EnumerationCS__Alternatives_5_0_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9723:1: ( rule__EnumerationCS__Alternatives_5_0_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10222:1: ( ( rule__EnumerationCS__Alternatives_5_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10223:1: ( rule__EnumerationCS__Alternatives_5_0_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getAlternatives_5_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9724:1: ( rule__EnumerationCS__Alternatives_5_0_1 )*
-            loop121:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10224:1: ( rule__EnumerationCS__Alternatives_5_0_1 )*
+            loop141:
             do {
-                int alt121=2;
-                int LA121_0 = input.LA(1);
+                int alt141=2;
+                int LA141_0 = input.LA(1);
 
-                if ( ((LA121_0>=RULE_SIMPLE_ID && LA121_0<=RULE_ESCAPED_ID)||(LA121_0>=17 && LA121_0<=52)||(LA121_0>=55 && LA121_0<=58)||LA121_0==60) ) {
-                    alt121=1;
+                if ( ((LA141_0>=RULE_SIMPLE_ID && LA141_0<=RULE_ESCAPED_ID)||(LA141_0>=17 && LA141_0<=52)||(LA141_0>=64 && LA141_0<=67)||LA141_0==69) ) {
+                    alt141=1;
                 }
 
 
-                switch (alt121) {
+                switch (alt141) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9724:2: rule__EnumerationCS__Alternatives_5_0_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10224:2: rule__EnumerationCS__Alternatives_5_0_1
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Alternatives_5_0_1_in_rule__EnumerationCS__Group_5_0__1__Impl20743);
+            	    pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Alternatives_5_0_1_in_rule__EnumerationCS__Group_5_0__1__Impl21585);
             	    rule__EnumerationCS__Alternatives_5_0_1();
 
             	    state._fsp--;
@@ -31392,7 +32440,7 @@
             	    break;
 
             	default :
-            	    break loop121;
+            	    break loop141;
                 }
             } while (true);
 
@@ -31421,16 +32469,16 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_5_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9734:1: rule__EnumerationCS__Group_5_0__2 : rule__EnumerationCS__Group_5_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10234:1: rule__EnumerationCS__Group_5_0__2 : rule__EnumerationCS__Group_5_0__2__Impl ;
     public final void rule__EnumerationCS__Group_5_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9738:1: ( rule__EnumerationCS__Group_5_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9739:2: rule__EnumerationCS__Group_5_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10238:1: ( rule__EnumerationCS__Group_5_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10239:2: rule__EnumerationCS__Group_5_0__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__2__Impl_in_rule__EnumerationCS__Group_5_0__220774);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationCS__Group_5_0__2__Impl_in_rule__EnumerationCS__Group_5_0__221616);
             rule__EnumerationCS__Group_5_0__2__Impl();
 
             state._fsp--;
@@ -31454,22 +32502,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__Group_5_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9745:1: rule__EnumerationCS__Group_5_0__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10245:1: rule__EnumerationCS__Group_5_0__2__Impl : ( '}' ) ;
     public final void rule__EnumerationCS__Group_5_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9749:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9750:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10249:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10250:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9750:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9751:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10250:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10251:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getRightCurlyBracketKeyword_5_0_2()); 
             }
-            match(input,100,FollowSets000.FOLLOW_100_in_rule__EnumerationCS__Group_5_0__2__Impl20802); if (state.failed) return ;
+            match(input,109,FollowSets000.FOLLOW_109_in_rule__EnumerationCS__Group_5_0__2__Impl21644); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationCSAccess().getRightCurlyBracketKeyword_5_0_2()); 
             }
@@ -31495,21 +32543,21 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9770:1: rule__EnumerationLiteralCS__Group__0 : rule__EnumerationLiteralCS__Group__0__Impl rule__EnumerationLiteralCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10270:1: rule__EnumerationLiteralCS__Group__0 : rule__EnumerationLiteralCS__Group__0__Impl rule__EnumerationLiteralCS__Group__1 ;
     public final void rule__EnumerationLiteralCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9774:1: ( rule__EnumerationLiteralCS__Group__0__Impl rule__EnumerationLiteralCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9775:2: rule__EnumerationLiteralCS__Group__0__Impl rule__EnumerationLiteralCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10274:1: ( rule__EnumerationLiteralCS__Group__0__Impl rule__EnumerationLiteralCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10275:2: rule__EnumerationLiteralCS__Group__0__Impl rule__EnumerationLiteralCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__0__Impl_in_rule__EnumerationLiteralCS__Group__020839);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__0__Impl_in_rule__EnumerationLiteralCS__Group__021681);
             rule__EnumerationLiteralCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__1_in_rule__EnumerationLiteralCS__Group__020842);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__1_in_rule__EnumerationLiteralCS__Group__021684);
             rule__EnumerationLiteralCS__Group__1();
 
             state._fsp--;
@@ -31533,25 +32581,25 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9782:1: rule__EnumerationLiteralCS__Group__0__Impl : ( ( rule__EnumerationLiteralCS__Alternatives_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10282:1: rule__EnumerationLiteralCS__Group__0__Impl : ( ( rule__EnumerationLiteralCS__Alternatives_0 ) ) ;
     public final void rule__EnumerationLiteralCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9786:1: ( ( ( rule__EnumerationLiteralCS__Alternatives_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9787:1: ( ( rule__EnumerationLiteralCS__Alternatives_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10286:1: ( ( ( rule__EnumerationLiteralCS__Alternatives_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10287:1: ( ( rule__EnumerationLiteralCS__Alternatives_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9787:1: ( ( rule__EnumerationLiteralCS__Alternatives_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9788:1: ( rule__EnumerationLiteralCS__Alternatives_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10287:1: ( ( rule__EnumerationLiteralCS__Alternatives_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10288:1: ( rule__EnumerationLiteralCS__Alternatives_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getAlternatives_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9789:1: ( rule__EnumerationLiteralCS__Alternatives_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9789:2: rule__EnumerationLiteralCS__Alternatives_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10289:1: ( rule__EnumerationLiteralCS__Alternatives_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10289:2: rule__EnumerationLiteralCS__Alternatives_0
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Alternatives_0_in_rule__EnumerationLiteralCS__Group__0__Impl20869);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Alternatives_0_in_rule__EnumerationLiteralCS__Group__0__Impl21711);
             rule__EnumerationLiteralCS__Alternatives_0();
 
             state._fsp--;
@@ -31584,21 +32632,21 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9799:1: rule__EnumerationLiteralCS__Group__1 : rule__EnumerationLiteralCS__Group__1__Impl rule__EnumerationLiteralCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10299:1: rule__EnumerationLiteralCS__Group__1 : rule__EnumerationLiteralCS__Group__1__Impl rule__EnumerationLiteralCS__Group__2 ;
     public final void rule__EnumerationLiteralCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9803:1: ( rule__EnumerationLiteralCS__Group__1__Impl rule__EnumerationLiteralCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9804:2: rule__EnumerationLiteralCS__Group__1__Impl rule__EnumerationLiteralCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10303:1: ( rule__EnumerationLiteralCS__Group__1__Impl rule__EnumerationLiteralCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10304:2: rule__EnumerationLiteralCS__Group__1__Impl rule__EnumerationLiteralCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__1__Impl_in_rule__EnumerationLiteralCS__Group__120899);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__1__Impl_in_rule__EnumerationLiteralCS__Group__121741);
             rule__EnumerationLiteralCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__2_in_rule__EnumerationLiteralCS__Group__120902);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__2_in_rule__EnumerationLiteralCS__Group__121744);
             rule__EnumerationLiteralCS__Group__2();
 
             state._fsp--;
@@ -31622,33 +32670,33 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9811:1: rule__EnumerationLiteralCS__Group__1__Impl : ( ( rule__EnumerationLiteralCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10311:1: rule__EnumerationLiteralCS__Group__1__Impl : ( ( rule__EnumerationLiteralCS__Group_1__0 )? ) ;
     public final void rule__EnumerationLiteralCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9815:1: ( ( ( rule__EnumerationLiteralCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9816:1: ( ( rule__EnumerationLiteralCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10315:1: ( ( ( rule__EnumerationLiteralCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10316:1: ( ( rule__EnumerationLiteralCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9816:1: ( ( rule__EnumerationLiteralCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9817:1: ( rule__EnumerationLiteralCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10316:1: ( ( rule__EnumerationLiteralCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10317:1: ( rule__EnumerationLiteralCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9818:1: ( rule__EnumerationLiteralCS__Group_1__0 )?
-            int alt122=2;
-            int LA122_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10318:1: ( rule__EnumerationLiteralCS__Group_1__0 )?
+            int alt142=2;
+            int LA142_0 = input.LA(1);
 
-            if ( (LA122_0==70) ) {
-                alt122=1;
+            if ( (LA142_0==79) ) {
+                alt142=1;
             }
-            switch (alt122) {
+            switch (alt142) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9818:2: rule__EnumerationLiteralCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10318:2: rule__EnumerationLiteralCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_1__0_in_rule__EnumerationLiteralCS__Group__1__Impl20929);
+                    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_1__0_in_rule__EnumerationLiteralCS__Group__1__Impl21771);
                     rule__EnumerationLiteralCS__Group_1__0();
 
                     state._fsp--;
@@ -31684,16 +32732,16 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9828:1: rule__EnumerationLiteralCS__Group__2 : rule__EnumerationLiteralCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10328:1: rule__EnumerationLiteralCS__Group__2 : rule__EnumerationLiteralCS__Group__2__Impl ;
     public final void rule__EnumerationLiteralCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9832:1: ( rule__EnumerationLiteralCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9833:2: rule__EnumerationLiteralCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10332:1: ( rule__EnumerationLiteralCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10333:2: rule__EnumerationLiteralCS__Group__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__2__Impl_in_rule__EnumerationLiteralCS__Group__220960);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group__2__Impl_in_rule__EnumerationLiteralCS__Group__221802);
             rule__EnumerationLiteralCS__Group__2__Impl();
 
             state._fsp--;
@@ -31717,25 +32765,25 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9839:1: rule__EnumerationLiteralCS__Group__2__Impl : ( ( rule__EnumerationLiteralCS__Alternatives_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10339:1: rule__EnumerationLiteralCS__Group__2__Impl : ( ( rule__EnumerationLiteralCS__Alternatives_2 ) ) ;
     public final void rule__EnumerationLiteralCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9843:1: ( ( ( rule__EnumerationLiteralCS__Alternatives_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9844:1: ( ( rule__EnumerationLiteralCS__Alternatives_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10343:1: ( ( ( rule__EnumerationLiteralCS__Alternatives_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10344:1: ( ( rule__EnumerationLiteralCS__Alternatives_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9844:1: ( ( rule__EnumerationLiteralCS__Alternatives_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9845:1: ( rule__EnumerationLiteralCS__Alternatives_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10344:1: ( ( rule__EnumerationLiteralCS__Alternatives_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10345:1: ( rule__EnumerationLiteralCS__Alternatives_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getAlternatives_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9846:1: ( rule__EnumerationLiteralCS__Alternatives_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9846:2: rule__EnumerationLiteralCS__Alternatives_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10346:1: ( rule__EnumerationLiteralCS__Alternatives_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10346:2: rule__EnumerationLiteralCS__Alternatives_2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Alternatives_2_in_rule__EnumerationLiteralCS__Group__2__Impl20987);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Alternatives_2_in_rule__EnumerationLiteralCS__Group__2__Impl21829);
             rule__EnumerationLiteralCS__Alternatives_2();
 
             state._fsp--;
@@ -31768,21 +32816,21 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_0_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9862:1: rule__EnumerationLiteralCS__Group_0_0__0 : rule__EnumerationLiteralCS__Group_0_0__0__Impl rule__EnumerationLiteralCS__Group_0_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10362:1: rule__EnumerationLiteralCS__Group_0_0__0 : rule__EnumerationLiteralCS__Group_0_0__0__Impl rule__EnumerationLiteralCS__Group_0_0__1 ;
     public final void rule__EnumerationLiteralCS__Group_0_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9866:1: ( rule__EnumerationLiteralCS__Group_0_0__0__Impl rule__EnumerationLiteralCS__Group_0_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9867:2: rule__EnumerationLiteralCS__Group_0_0__0__Impl rule__EnumerationLiteralCS__Group_0_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10366:1: ( rule__EnumerationLiteralCS__Group_0_0__0__Impl rule__EnumerationLiteralCS__Group_0_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10367:2: rule__EnumerationLiteralCS__Group_0_0__0__Impl rule__EnumerationLiteralCS__Group_0_0__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_0_0__0__Impl_in_rule__EnumerationLiteralCS__Group_0_0__021023);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_0_0__0__Impl_in_rule__EnumerationLiteralCS__Group_0_0__021865);
             rule__EnumerationLiteralCS__Group_0_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_0_0__1_in_rule__EnumerationLiteralCS__Group_0_0__021026);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_0_0__1_in_rule__EnumerationLiteralCS__Group_0_0__021868);
             rule__EnumerationLiteralCS__Group_0_0__1();
 
             state._fsp--;
@@ -31806,22 +32854,22 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_0_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9874:1: rule__EnumerationLiteralCS__Group_0_0__0__Impl : ( 'literal' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10374:1: rule__EnumerationLiteralCS__Group_0_0__0__Impl : ( 'literal' ) ;
     public final void rule__EnumerationLiteralCS__Group_0_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9878:1: ( ( 'literal' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9879:1: ( 'literal' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10378:1: ( ( 'literal' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10379:1: ( 'literal' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9879:1: ( 'literal' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9880:1: 'literal'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10379:1: ( 'literal' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10380:1: 'literal'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getLiteralKeyword_0_0_0()); 
             }
-            match(input,58,FollowSets000.FOLLOW_58_in_rule__EnumerationLiteralCS__Group_0_0__0__Impl21054); if (state.failed) return ;
+            match(input,67,FollowSets000.FOLLOW_67_in_rule__EnumerationLiteralCS__Group_0_0__0__Impl21896); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationLiteralCSAccess().getLiteralKeyword_0_0_0()); 
             }
@@ -31847,16 +32895,16 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_0_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9893:1: rule__EnumerationLiteralCS__Group_0_0__1 : rule__EnumerationLiteralCS__Group_0_0__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10393:1: rule__EnumerationLiteralCS__Group_0_0__1 : rule__EnumerationLiteralCS__Group_0_0__1__Impl ;
     public final void rule__EnumerationLiteralCS__Group_0_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9897:1: ( rule__EnumerationLiteralCS__Group_0_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9898:2: rule__EnumerationLiteralCS__Group_0_0__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10397:1: ( rule__EnumerationLiteralCS__Group_0_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10398:2: rule__EnumerationLiteralCS__Group_0_0__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_0_0__1__Impl_in_rule__EnumerationLiteralCS__Group_0_0__121085);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_0_0__1__Impl_in_rule__EnumerationLiteralCS__Group_0_0__121927);
             rule__EnumerationLiteralCS__Group_0_0__1__Impl();
 
             state._fsp--;
@@ -31880,25 +32928,25 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_0_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9904:1: rule__EnumerationLiteralCS__Group_0_0__1__Impl : ( ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10404:1: rule__EnumerationLiteralCS__Group_0_0__1__Impl : ( ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 ) ) ;
     public final void rule__EnumerationLiteralCS__Group_0_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9908:1: ( ( ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9909:1: ( ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10408:1: ( ( ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10409:1: ( ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9909:1: ( ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9910:1: ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10409:1: ( ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10410:1: ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getNameAssignment_0_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9911:1: ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9911:2: rule__EnumerationLiteralCS__NameAssignment_0_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10411:1: ( rule__EnumerationLiteralCS__NameAssignment_0_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10411:2: rule__EnumerationLiteralCS__NameAssignment_0_0_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__NameAssignment_0_0_1_in_rule__EnumerationLiteralCS__Group_0_0__1__Impl21112);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__NameAssignment_0_0_1_in_rule__EnumerationLiteralCS__Group_0_0__1__Impl21954);
             rule__EnumerationLiteralCS__NameAssignment_0_0_1();
 
             state._fsp--;
@@ -31931,21 +32979,21 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9925:1: rule__EnumerationLiteralCS__Group_1__0 : rule__EnumerationLiteralCS__Group_1__0__Impl rule__EnumerationLiteralCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10425:1: rule__EnumerationLiteralCS__Group_1__0 : rule__EnumerationLiteralCS__Group_1__0__Impl rule__EnumerationLiteralCS__Group_1__1 ;
     public final void rule__EnumerationLiteralCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9929:1: ( rule__EnumerationLiteralCS__Group_1__0__Impl rule__EnumerationLiteralCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9930:2: rule__EnumerationLiteralCS__Group_1__0__Impl rule__EnumerationLiteralCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10429:1: ( rule__EnumerationLiteralCS__Group_1__0__Impl rule__EnumerationLiteralCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10430:2: rule__EnumerationLiteralCS__Group_1__0__Impl rule__EnumerationLiteralCS__Group_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_1__0__Impl_in_rule__EnumerationLiteralCS__Group_1__021146);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_1__0__Impl_in_rule__EnumerationLiteralCS__Group_1__021988);
             rule__EnumerationLiteralCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_1__1_in_rule__EnumerationLiteralCS__Group_1__021149);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_1__1_in_rule__EnumerationLiteralCS__Group_1__021991);
             rule__EnumerationLiteralCS__Group_1__1();
 
             state._fsp--;
@@ -31969,22 +33017,22 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9937:1: rule__EnumerationLiteralCS__Group_1__0__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10437:1: rule__EnumerationLiteralCS__Group_1__0__Impl : ( '=' ) ;
     public final void rule__EnumerationLiteralCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9941:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9942:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10441:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10442:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9942:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9943:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10442:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10443:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getEqualsSignKeyword_1_0()); 
             }
-            match(input,70,FollowSets000.FOLLOW_70_in_rule__EnumerationLiteralCS__Group_1__0__Impl21177); if (state.failed) return ;
+            match(input,79,FollowSets000.FOLLOW_79_in_rule__EnumerationLiteralCS__Group_1__0__Impl22019); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationLiteralCSAccess().getEqualsSignKeyword_1_0()); 
             }
@@ -32010,16 +33058,16 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9956:1: rule__EnumerationLiteralCS__Group_1__1 : rule__EnumerationLiteralCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10456:1: rule__EnumerationLiteralCS__Group_1__1 : rule__EnumerationLiteralCS__Group_1__1__Impl ;
     public final void rule__EnumerationLiteralCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9960:1: ( rule__EnumerationLiteralCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9961:2: rule__EnumerationLiteralCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10460:1: ( rule__EnumerationLiteralCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10461:2: rule__EnumerationLiteralCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_1__1__Impl_in_rule__EnumerationLiteralCS__Group_1__121208);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_1__1__Impl_in_rule__EnumerationLiteralCS__Group_1__122050);
             rule__EnumerationLiteralCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -32043,25 +33091,25 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9967:1: rule__EnumerationLiteralCS__Group_1__1__Impl : ( ( rule__EnumerationLiteralCS__ValueAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10467:1: rule__EnumerationLiteralCS__Group_1__1__Impl : ( ( rule__EnumerationLiteralCS__ValueAssignment_1_1 ) ) ;
     public final void rule__EnumerationLiteralCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9971:1: ( ( ( rule__EnumerationLiteralCS__ValueAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9972:1: ( ( rule__EnumerationLiteralCS__ValueAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10471:1: ( ( ( rule__EnumerationLiteralCS__ValueAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10472:1: ( ( rule__EnumerationLiteralCS__ValueAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9972:1: ( ( rule__EnumerationLiteralCS__ValueAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9973:1: ( rule__EnumerationLiteralCS__ValueAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10472:1: ( ( rule__EnumerationLiteralCS__ValueAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10473:1: ( rule__EnumerationLiteralCS__ValueAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getValueAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9974:1: ( rule__EnumerationLiteralCS__ValueAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9974:2: rule__EnumerationLiteralCS__ValueAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10474:1: ( rule__EnumerationLiteralCS__ValueAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10474:2: rule__EnumerationLiteralCS__ValueAssignment_1_1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__ValueAssignment_1_1_in_rule__EnumerationLiteralCS__Group_1__1__Impl21235);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__ValueAssignment_1_1_in_rule__EnumerationLiteralCS__Group_1__1__Impl22077);
             rule__EnumerationLiteralCS__ValueAssignment_1_1();
 
             state._fsp--;
@@ -32094,21 +33142,21 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_2_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9988:1: rule__EnumerationLiteralCS__Group_2_0__0 : rule__EnumerationLiteralCS__Group_2_0__0__Impl rule__EnumerationLiteralCS__Group_2_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10488:1: rule__EnumerationLiteralCS__Group_2_0__0 : rule__EnumerationLiteralCS__Group_2_0__0__Impl rule__EnumerationLiteralCS__Group_2_0__1 ;
     public final void rule__EnumerationLiteralCS__Group_2_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9992:1: ( rule__EnumerationLiteralCS__Group_2_0__0__Impl rule__EnumerationLiteralCS__Group_2_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:9993:2: rule__EnumerationLiteralCS__Group_2_0__0__Impl rule__EnumerationLiteralCS__Group_2_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10492:1: ( rule__EnumerationLiteralCS__Group_2_0__0__Impl rule__EnumerationLiteralCS__Group_2_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10493:2: rule__EnumerationLiteralCS__Group_2_0__0__Impl rule__EnumerationLiteralCS__Group_2_0__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__0__Impl_in_rule__EnumerationLiteralCS__Group_2_0__021269);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__0__Impl_in_rule__EnumerationLiteralCS__Group_2_0__022111);
             rule__EnumerationLiteralCS__Group_2_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__1_in_rule__EnumerationLiteralCS__Group_2_0__021272);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__1_in_rule__EnumerationLiteralCS__Group_2_0__022114);
             rule__EnumerationLiteralCS__Group_2_0__1();
 
             state._fsp--;
@@ -32132,22 +33180,22 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_2_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10000:1: rule__EnumerationLiteralCS__Group_2_0__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10500:1: rule__EnumerationLiteralCS__Group_2_0__0__Impl : ( '{' ) ;
     public final void rule__EnumerationLiteralCS__Group_2_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10004:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10005:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10504:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10505:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10005:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10006:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10505:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10506:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getLeftCurlyBracketKeyword_2_0_0()); 
             }
-            match(input,99,FollowSets000.FOLLOW_99_in_rule__EnumerationLiteralCS__Group_2_0__0__Impl21300); if (state.failed) return ;
+            match(input,108,FollowSets000.FOLLOW_108_in_rule__EnumerationLiteralCS__Group_2_0__0__Impl22142); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationLiteralCSAccess().getLeftCurlyBracketKeyword_2_0_0()); 
             }
@@ -32173,21 +33221,21 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_2_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10019:1: rule__EnumerationLiteralCS__Group_2_0__1 : rule__EnumerationLiteralCS__Group_2_0__1__Impl rule__EnumerationLiteralCS__Group_2_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10519:1: rule__EnumerationLiteralCS__Group_2_0__1 : rule__EnumerationLiteralCS__Group_2_0__1__Impl rule__EnumerationLiteralCS__Group_2_0__2 ;
     public final void rule__EnumerationLiteralCS__Group_2_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10023:1: ( rule__EnumerationLiteralCS__Group_2_0__1__Impl rule__EnumerationLiteralCS__Group_2_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10024:2: rule__EnumerationLiteralCS__Group_2_0__1__Impl rule__EnumerationLiteralCS__Group_2_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10523:1: ( rule__EnumerationLiteralCS__Group_2_0__1__Impl rule__EnumerationLiteralCS__Group_2_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10524:2: rule__EnumerationLiteralCS__Group_2_0__1__Impl rule__EnumerationLiteralCS__Group_2_0__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__1__Impl_in_rule__EnumerationLiteralCS__Group_2_0__121331);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__1__Impl_in_rule__EnumerationLiteralCS__Group_2_0__122173);
             rule__EnumerationLiteralCS__Group_2_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__2_in_rule__EnumerationLiteralCS__Group_2_0__121334);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__2_in_rule__EnumerationLiteralCS__Group_2_0__122176);
             rule__EnumerationLiteralCS__Group_2_0__2();
 
             state._fsp--;
@@ -32211,37 +33259,37 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_2_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10031:1: rule__EnumerationLiteralCS__Group_2_0__1__Impl : ( ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10531:1: rule__EnumerationLiteralCS__Group_2_0__1__Impl : ( ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )* ) ;
     public final void rule__EnumerationLiteralCS__Group_2_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10035:1: ( ( ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10036:1: ( ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10535:1: ( ( ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10536:1: ( ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10036:1: ( ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10037:1: ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10536:1: ( ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10537:1: ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getOwnedAnnotationsAssignment_2_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10038:1: ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )*
-            loop123:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10538:1: ( rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 )*
+            loop143:
             do {
-                int alt123=2;
-                int LA123_0 = input.LA(1);
+                int alt143=2;
+                int LA143_0 = input.LA(1);
 
-                if ( ((LA123_0>=55 && LA123_0<=56)||LA123_0==60) ) {
-                    alt123=1;
+                if ( ((LA143_0>=64 && LA143_0<=65)||LA143_0==69) ) {
+                    alt143=1;
                 }
 
 
-                switch (alt123) {
+                switch (alt143) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10038:2: rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10538:2: rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1_in_rule__EnumerationLiteralCS__Group_2_0__1__Impl21361);
+            	    pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1_in_rule__EnumerationLiteralCS__Group_2_0__1__Impl22203);
             	    rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1();
 
             	    state._fsp--;
@@ -32251,7 +33299,7 @@
             	    break;
 
             	default :
-            	    break loop123;
+            	    break loop143;
                 }
             } while (true);
 
@@ -32280,16 +33328,16 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_2_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10048:1: rule__EnumerationLiteralCS__Group_2_0__2 : rule__EnumerationLiteralCS__Group_2_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10548:1: rule__EnumerationLiteralCS__Group_2_0__2 : rule__EnumerationLiteralCS__Group_2_0__2__Impl ;
     public final void rule__EnumerationLiteralCS__Group_2_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10052:1: ( rule__EnumerationLiteralCS__Group_2_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10053:2: rule__EnumerationLiteralCS__Group_2_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10552:1: ( rule__EnumerationLiteralCS__Group_2_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10553:2: rule__EnumerationLiteralCS__Group_2_0__2__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__2__Impl_in_rule__EnumerationLiteralCS__Group_2_0__221392);
+            pushFollow(FollowSets000.FOLLOW_rule__EnumerationLiteralCS__Group_2_0__2__Impl_in_rule__EnumerationLiteralCS__Group_2_0__222234);
             rule__EnumerationLiteralCS__Group_2_0__2__Impl();
 
             state._fsp--;
@@ -32313,22 +33361,22 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__Group_2_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10059:1: rule__EnumerationLiteralCS__Group_2_0__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10559:1: rule__EnumerationLiteralCS__Group_2_0__2__Impl : ( '}' ) ;
     public final void rule__EnumerationLiteralCS__Group_2_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10063:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10064:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10563:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10564:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10064:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10065:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10564:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10565:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getRightCurlyBracketKeyword_2_0_2()); 
             }
-            match(input,100,FollowSets000.FOLLOW_100_in_rule__EnumerationLiteralCS__Group_2_0__2__Impl21420); if (state.failed) return ;
+            match(input,109,FollowSets000.FOLLOW_109_in_rule__EnumerationLiteralCS__Group_2_0__2__Impl22262); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationLiteralCSAccess().getRightCurlyBracketKeyword_2_0_2()); 
             }
@@ -32354,21 +33402,21 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10084:1: rule__ImportCS__Group__0 : rule__ImportCS__Group__0__Impl rule__ImportCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10584:1: rule__ImportCS__Group__0 : rule__ImportCS__Group__0__Impl rule__ImportCS__Group__1 ;
     public final void rule__ImportCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10088:1: ( rule__ImportCS__Group__0__Impl rule__ImportCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10089:2: rule__ImportCS__Group__0__Impl rule__ImportCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10588:1: ( rule__ImportCS__Group__0__Impl rule__ImportCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10589:2: rule__ImportCS__Group__0__Impl rule__ImportCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__0__Impl_in_rule__ImportCS__Group__021457);
+            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__0__Impl_in_rule__ImportCS__Group__022299);
             rule__ImportCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__1_in_rule__ImportCS__Group__021460);
+            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__1_in_rule__ImportCS__Group__022302);
             rule__ImportCS__Group__1();
 
             state._fsp--;
@@ -32392,22 +33440,22 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10096:1: rule__ImportCS__Group__0__Impl : ( 'import' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10596:1: rule__ImportCS__Group__0__Impl : ( 'import' ) ;
     public final void rule__ImportCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10100:1: ( ( 'import' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10101:1: ( 'import' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10600:1: ( ( 'import' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10601:1: ( 'import' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10101:1: ( 'import' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10102:1: 'import'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10601:1: ( 'import' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10602:1: 'import'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getImportKeyword_0()); 
             }
-            match(input,30,FollowSets000.FOLLOW_30_in_rule__ImportCS__Group__0__Impl21488); if (state.failed) return ;
+            match(input,30,FollowSets000.FOLLOW_30_in_rule__ImportCS__Group__0__Impl22330); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getImportCSAccess().getImportKeyword_0()); 
             }
@@ -32433,21 +33481,21 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10115:1: rule__ImportCS__Group__1 : rule__ImportCS__Group__1__Impl rule__ImportCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10615:1: rule__ImportCS__Group__1 : rule__ImportCS__Group__1__Impl rule__ImportCS__Group__2 ;
     public final void rule__ImportCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10119:1: ( rule__ImportCS__Group__1__Impl rule__ImportCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10120:2: rule__ImportCS__Group__1__Impl rule__ImportCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10619:1: ( rule__ImportCS__Group__1__Impl rule__ImportCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10620:2: rule__ImportCS__Group__1__Impl rule__ImportCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__1__Impl_in_rule__ImportCS__Group__121519);
+            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__1__Impl_in_rule__ImportCS__Group__122361);
             rule__ImportCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__2_in_rule__ImportCS__Group__121522);
+            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__2_in_rule__ImportCS__Group__122364);
             rule__ImportCS__Group__2();
 
             state._fsp--;
@@ -32471,29 +33519,29 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10127:1: rule__ImportCS__Group__1__Impl : ( ( rule__ImportCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10627:1: rule__ImportCS__Group__1__Impl : ( ( rule__ImportCS__Group_1__0 )? ) ;
     public final void rule__ImportCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10131:1: ( ( ( rule__ImportCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10132:1: ( ( rule__ImportCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10631:1: ( ( ( rule__ImportCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10632:1: ( ( rule__ImportCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10132:1: ( ( rule__ImportCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10133:1: ( rule__ImportCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10632:1: ( ( rule__ImportCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10633:1: ( rule__ImportCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10134:1: ( rule__ImportCS__Group_1__0 )?
-            int alt124=2;
-            alt124 = dfa124.predict(input);
-            switch (alt124) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10634:1: ( rule__ImportCS__Group_1__0 )?
+            int alt144=2;
+            alt144 = dfa144.predict(input);
+            switch (alt144) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10134:2: rule__ImportCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10634:2: rule__ImportCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group_1__0_in_rule__ImportCS__Group__1__Impl21549);
+                    pushFollow(FollowSets001.FOLLOW_rule__ImportCS__Group_1__0_in_rule__ImportCS__Group__1__Impl22391);
                     rule__ImportCS__Group_1__0();
 
                     state._fsp--;
@@ -32529,21 +33577,21 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10144:1: rule__ImportCS__Group__2 : rule__ImportCS__Group__2__Impl rule__ImportCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10644:1: rule__ImportCS__Group__2 : rule__ImportCS__Group__2__Impl rule__ImportCS__Group__3 ;
     public final void rule__ImportCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10148:1: ( rule__ImportCS__Group__2__Impl rule__ImportCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10149:2: rule__ImportCS__Group__2__Impl rule__ImportCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10648:1: ( rule__ImportCS__Group__2__Impl rule__ImportCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10649:2: rule__ImportCS__Group__2__Impl rule__ImportCS__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__2__Impl_in_rule__ImportCS__Group__221580);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__Group__2__Impl_in_rule__ImportCS__Group__222422);
             rule__ImportCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__3_in_rule__ImportCS__Group__221583);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__Group__3_in_rule__ImportCS__Group__222425);
             rule__ImportCS__Group__3();
 
             state._fsp--;
@@ -32567,25 +33615,25 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10156:1: rule__ImportCS__Group__2__Impl : ( ( rule__ImportCS__OwnedPathNameAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10656:1: rule__ImportCS__Group__2__Impl : ( ( rule__ImportCS__OwnedPathNameAssignment_2 ) ) ;
     public final void rule__ImportCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10160:1: ( ( ( rule__ImportCS__OwnedPathNameAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10161:1: ( ( rule__ImportCS__OwnedPathNameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10660:1: ( ( ( rule__ImportCS__OwnedPathNameAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10661:1: ( ( rule__ImportCS__OwnedPathNameAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10161:1: ( ( rule__ImportCS__OwnedPathNameAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10162:1: ( rule__ImportCS__OwnedPathNameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10661:1: ( ( rule__ImportCS__OwnedPathNameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10662:1: ( rule__ImportCS__OwnedPathNameAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getOwnedPathNameAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10163:1: ( rule__ImportCS__OwnedPathNameAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10163:2: rule__ImportCS__OwnedPathNameAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10663:1: ( rule__ImportCS__OwnedPathNameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10663:2: rule__ImportCS__OwnedPathNameAssignment_2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__OwnedPathNameAssignment_2_in_rule__ImportCS__Group__2__Impl21610);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__OwnedPathNameAssignment_2_in_rule__ImportCS__Group__2__Impl22452);
             rule__ImportCS__OwnedPathNameAssignment_2();
 
             state._fsp--;
@@ -32618,21 +33666,21 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10173:1: rule__ImportCS__Group__3 : rule__ImportCS__Group__3__Impl rule__ImportCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10673:1: rule__ImportCS__Group__3 : rule__ImportCS__Group__3__Impl rule__ImportCS__Group__4 ;
     public final void rule__ImportCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10177:1: ( rule__ImportCS__Group__3__Impl rule__ImportCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10178:2: rule__ImportCS__Group__3__Impl rule__ImportCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10677:1: ( rule__ImportCS__Group__3__Impl rule__ImportCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10678:2: rule__ImportCS__Group__3__Impl rule__ImportCS__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__3__Impl_in_rule__ImportCS__Group__321640);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__Group__3__Impl_in_rule__ImportCS__Group__322482);
             rule__ImportCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__4_in_rule__ImportCS__Group__321643);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__Group__4_in_rule__ImportCS__Group__322485);
             rule__ImportCS__Group__4();
 
             state._fsp--;
@@ -32656,33 +33704,33 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10185:1: rule__ImportCS__Group__3__Impl : ( ( rule__ImportCS__IsAllAssignment_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10685:1: rule__ImportCS__Group__3__Impl : ( ( rule__ImportCS__IsAllAssignment_3 )? ) ;
     public final void rule__ImportCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10189:1: ( ( ( rule__ImportCS__IsAllAssignment_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10190:1: ( ( rule__ImportCS__IsAllAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10689:1: ( ( ( rule__ImportCS__IsAllAssignment_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10690:1: ( ( rule__ImportCS__IsAllAssignment_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10190:1: ( ( rule__ImportCS__IsAllAssignment_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10191:1: ( rule__ImportCS__IsAllAssignment_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10690:1: ( ( rule__ImportCS__IsAllAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10691:1: ( rule__ImportCS__IsAllAssignment_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getIsAllAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10192:1: ( rule__ImportCS__IsAllAssignment_3 )?
-            int alt125=2;
-            int LA125_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10692:1: ( rule__ImportCS__IsAllAssignment_3 )?
+            int alt145=2;
+            int LA145_0 = input.LA(1);
 
-            if ( (LA125_0==128) ) {
-                alt125=1;
+            if ( (LA145_0==130) ) {
+                alt145=1;
             }
-            switch (alt125) {
+            switch (alt145) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10192:2: rule__ImportCS__IsAllAssignment_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10692:2: rule__ImportCS__IsAllAssignment_3
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__ImportCS__IsAllAssignment_3_in_rule__ImportCS__Group__3__Impl21670);
+                    pushFollow(FollowSets001.FOLLOW_rule__ImportCS__IsAllAssignment_3_in_rule__ImportCS__Group__3__Impl22512);
                     rule__ImportCS__IsAllAssignment_3();
 
                     state._fsp--;
@@ -32718,16 +33766,16 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10202:1: rule__ImportCS__Group__4 : rule__ImportCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10702:1: rule__ImportCS__Group__4 : rule__ImportCS__Group__4__Impl ;
     public final void rule__ImportCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10206:1: ( rule__ImportCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10207:2: rule__ImportCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10706:1: ( rule__ImportCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10707:2: rule__ImportCS__Group__4__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group__4__Impl_in_rule__ImportCS__Group__421701);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__Group__4__Impl_in_rule__ImportCS__Group__422543);
             rule__ImportCS__Group__4__Impl();
 
             state._fsp--;
@@ -32751,22 +33799,22 @@
 
 
     // $ANTLR start "rule__ImportCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10213:1: rule__ImportCS__Group__4__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10713:1: rule__ImportCS__Group__4__Impl : ( ';' ) ;
     public final void rule__ImportCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10217:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10218:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10717:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10718:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10218:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10219:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10718:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10719:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getSemicolonKeyword_4()); 
             }
-            match(input,53,FollowSets000.FOLLOW_53_in_rule__ImportCS__Group__4__Impl21729); if (state.failed) return ;
+            match(input,53,FollowSets001.FOLLOW_53_in_rule__ImportCS__Group__4__Impl22571); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getImportCSAccess().getSemicolonKeyword_4()); 
             }
@@ -32792,21 +33840,21 @@
 
 
     // $ANTLR start "rule__ImportCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10242:1: rule__ImportCS__Group_1__0 : rule__ImportCS__Group_1__0__Impl rule__ImportCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10742:1: rule__ImportCS__Group_1__0 : rule__ImportCS__Group_1__0__Impl rule__ImportCS__Group_1__1 ;
     public final void rule__ImportCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10246:1: ( rule__ImportCS__Group_1__0__Impl rule__ImportCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10247:2: rule__ImportCS__Group_1__0__Impl rule__ImportCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10746:1: ( rule__ImportCS__Group_1__0__Impl rule__ImportCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10747:2: rule__ImportCS__Group_1__0__Impl rule__ImportCS__Group_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group_1__0__Impl_in_rule__ImportCS__Group_1__021770);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__Group_1__0__Impl_in_rule__ImportCS__Group_1__022612);
             rule__ImportCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group_1__1_in_rule__ImportCS__Group_1__021773);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__Group_1__1_in_rule__ImportCS__Group_1__022615);
             rule__ImportCS__Group_1__1();
 
             state._fsp--;
@@ -32830,25 +33878,25 @@
 
 
     // $ANTLR start "rule__ImportCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10254:1: rule__ImportCS__Group_1__0__Impl : ( ( rule__ImportCS__NameAssignment_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10754:1: rule__ImportCS__Group_1__0__Impl : ( ( rule__ImportCS__NameAssignment_1_0 ) ) ;
     public final void rule__ImportCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10258:1: ( ( ( rule__ImportCS__NameAssignment_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10259:1: ( ( rule__ImportCS__NameAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10758:1: ( ( ( rule__ImportCS__NameAssignment_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10759:1: ( ( rule__ImportCS__NameAssignment_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10259:1: ( ( rule__ImportCS__NameAssignment_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10260:1: ( rule__ImportCS__NameAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10759:1: ( ( rule__ImportCS__NameAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10760:1: ( rule__ImportCS__NameAssignment_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getNameAssignment_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10261:1: ( rule__ImportCS__NameAssignment_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10261:2: rule__ImportCS__NameAssignment_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10761:1: ( rule__ImportCS__NameAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10761:2: rule__ImportCS__NameAssignment_1_0
             {
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__NameAssignment_1_0_in_rule__ImportCS__Group_1__0__Impl21800);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__NameAssignment_1_0_in_rule__ImportCS__Group_1__0__Impl22642);
             rule__ImportCS__NameAssignment_1_0();
 
             state._fsp--;
@@ -32881,16 +33929,16 @@
 
 
     // $ANTLR start "rule__ImportCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10271:1: rule__ImportCS__Group_1__1 : rule__ImportCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10771:1: rule__ImportCS__Group_1__1 : rule__ImportCS__Group_1__1__Impl ;
     public final void rule__ImportCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10275:1: ( rule__ImportCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10276:2: rule__ImportCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10775:1: ( rule__ImportCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10776:2: rule__ImportCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets000.FOLLOW_rule__ImportCS__Group_1__1__Impl_in_rule__ImportCS__Group_1__121830);
+            pushFollow(FollowSets001.FOLLOW_rule__ImportCS__Group_1__1__Impl_in_rule__ImportCS__Group_1__122672);
             rule__ImportCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -32914,22 +33962,22 @@
 
 
     // $ANTLR start "rule__ImportCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10282:1: rule__ImportCS__Group_1__1__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10782:1: rule__ImportCS__Group_1__1__Impl : ( ':' ) ;
     public final void rule__ImportCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10286:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10287:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10786:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10787:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10287:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10288:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10787:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10788:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getColonKeyword_1_1()); 
             }
-            match(input,97,FollowSets000.FOLLOW_97_in_rule__ImportCS__Group_1__1__Impl21858); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__ImportCS__Group_1__1__Impl22700); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getImportCSAccess().getColonKeyword_1_1()); 
             }
@@ -32955,21 +34003,21 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10305:1: rule__LibraryCS__Group__0 : rule__LibraryCS__Group__0__Impl rule__LibraryCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10805:1: rule__LibraryCS__Group__0 : rule__LibraryCS__Group__0__Impl rule__LibraryCS__Group__1 ;
     public final void rule__LibraryCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10309:1: ( rule__LibraryCS__Group__0__Impl rule__LibraryCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10310:2: rule__LibraryCS__Group__0__Impl rule__LibraryCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10809:1: ( rule__LibraryCS__Group__0__Impl rule__LibraryCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10810:2: rule__LibraryCS__Group__0__Impl rule__LibraryCS__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_rule__LibraryCS__Group__0__Impl_in_rule__LibraryCS__Group__021893);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__0__Impl_in_rule__LibraryCS__Group__022735);
             rule__LibraryCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__LibraryCS__Group__1_in_rule__LibraryCS__Group__021896);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__1_in_rule__LibraryCS__Group__022738);
             rule__LibraryCS__Group__1();
 
             state._fsp--;
@@ -32993,22 +34041,22 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10317:1: rule__LibraryCS__Group__0__Impl : ( 'library' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10817:1: rule__LibraryCS__Group__0__Impl : ( 'library' ) ;
     public final void rule__LibraryCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10321:1: ( ( 'library' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10322:1: ( 'library' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10821:1: ( ( 'library' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10822:1: ( 'library' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10322:1: ( 'library' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10323:1: 'library'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10822:1: ( 'library' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10823:1: 'library'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLibraryCSAccess().getLibraryKeyword_0()); 
             }
-            match(input,34,FollowSets000.FOLLOW_34_in_rule__LibraryCS__Group__0__Impl21924); if (state.failed) return ;
+            match(input,34,FollowSets001.FOLLOW_34_in_rule__LibraryCS__Group__0__Impl22766); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLibraryCSAccess().getLibraryKeyword_0()); 
             }
@@ -33034,21 +34082,21 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10336:1: rule__LibraryCS__Group__1 : rule__LibraryCS__Group__1__Impl rule__LibraryCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10836:1: rule__LibraryCS__Group__1 : rule__LibraryCS__Group__1__Impl rule__LibraryCS__Group__2 ;
     public final void rule__LibraryCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10340:1: ( rule__LibraryCS__Group__1__Impl rule__LibraryCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10341:2: rule__LibraryCS__Group__1__Impl rule__LibraryCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10840:1: ( rule__LibraryCS__Group__1__Impl rule__LibraryCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10841:2: rule__LibraryCS__Group__1__Impl rule__LibraryCS__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_rule__LibraryCS__Group__1__Impl_in_rule__LibraryCS__Group__121955);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__1__Impl_in_rule__LibraryCS__Group__122797);
             rule__LibraryCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets000.FOLLOW_rule__LibraryCS__Group__2_in_rule__LibraryCS__Group__121958);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__2_in_rule__LibraryCS__Group__122800);
             rule__LibraryCS__Group__2();
 
             state._fsp--;
@@ -33072,33 +34120,33 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10348:1: rule__LibraryCS__Group__1__Impl : ( ( rule__LibraryCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10848:1: rule__LibraryCS__Group__1__Impl : ( ( rule__LibraryCS__Group_1__0 )? ) ;
     public final void rule__LibraryCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10352:1: ( ( ( rule__LibraryCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10353:1: ( ( rule__LibraryCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10852:1: ( ( ( rule__LibraryCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10853:1: ( ( rule__LibraryCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10353:1: ( ( rule__LibraryCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10354:1: ( rule__LibraryCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10853:1: ( ( rule__LibraryCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10854:1: ( rule__LibraryCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLibraryCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10355:1: ( rule__LibraryCS__Group_1__0 )?
-            int alt126=2;
-            int LA126_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10855:1: ( rule__LibraryCS__Group_1__0 )?
+            int alt146=2;
+            int LA146_0 = input.LA(1);
 
-            if ( ((LA126_0>=RULE_SIMPLE_ID && LA126_0<=RULE_ESCAPED_ID)||(LA126_0>=17 && LA126_0<=52)||(LA126_0>=55 && LA126_0<=60)) ) {
-                alt126=1;
+            if ( ((LA146_0>=RULE_SIMPLE_ID && LA146_0<=RULE_ESCAPED_ID)||(LA146_0>=17 && LA146_0<=52)||(LA146_0>=64 && LA146_0<=69)) ) {
+                alt146=1;
             }
-            switch (alt126) {
+            switch (alt146) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10355:2: rule__LibraryCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10855:2: rule__LibraryCS__Group_1__0
                     {
-                    pushFollow(FollowSets000.FOLLOW_rule__LibraryCS__Group_1__0_in_rule__LibraryCS__Group__1__Impl21985);
+                    pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group_1__0_in_rule__LibraryCS__Group__1__Impl22827);
                     rule__LibraryCS__Group_1__0();
 
                     state._fsp--;
@@ -33134,21 +34182,21 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10365:1: rule__LibraryCS__Group__2 : rule__LibraryCS__Group__2__Impl rule__LibraryCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10865:1: rule__LibraryCS__Group__2 : rule__LibraryCS__Group__2__Impl rule__LibraryCS__Group__3 ;
     public final void rule__LibraryCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10369:1: ( rule__LibraryCS__Group__2__Impl rule__LibraryCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10370:2: rule__LibraryCS__Group__2__Impl rule__LibraryCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10869:1: ( rule__LibraryCS__Group__2__Impl rule__LibraryCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10870:2: rule__LibraryCS__Group__2__Impl rule__LibraryCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__2__Impl_in_rule__LibraryCS__Group__222016);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__2__Impl_in_rule__LibraryCS__Group__222858);
             rule__LibraryCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__3_in_rule__LibraryCS__Group__222019);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__3_in_rule__LibraryCS__Group__222861);
             rule__LibraryCS__Group__3();
 
             state._fsp--;
@@ -33172,25 +34220,25 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10377:1: rule__LibraryCS__Group__2__Impl : ( ( rule__LibraryCS__ReferredPackageAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10877:1: rule__LibraryCS__Group__2__Impl : ( ( rule__LibraryCS__ReferredPackageAssignment_2 ) ) ;
     public final void rule__LibraryCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10381:1: ( ( ( rule__LibraryCS__ReferredPackageAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10382:1: ( ( rule__LibraryCS__ReferredPackageAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10881:1: ( ( ( rule__LibraryCS__ReferredPackageAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10882:1: ( ( rule__LibraryCS__ReferredPackageAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10382:1: ( ( rule__LibraryCS__ReferredPackageAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10383:1: ( rule__LibraryCS__ReferredPackageAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10882:1: ( ( rule__LibraryCS__ReferredPackageAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10883:1: ( rule__LibraryCS__ReferredPackageAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLibraryCSAccess().getReferredPackageAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10384:1: ( rule__LibraryCS__ReferredPackageAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10384:2: rule__LibraryCS__ReferredPackageAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10884:1: ( rule__LibraryCS__ReferredPackageAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10884:2: rule__LibraryCS__ReferredPackageAssignment_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__ReferredPackageAssignment_2_in_rule__LibraryCS__Group__2__Impl22046);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__ReferredPackageAssignment_2_in_rule__LibraryCS__Group__2__Impl22888);
             rule__LibraryCS__ReferredPackageAssignment_2();
 
             state._fsp--;
@@ -33223,16 +34271,16 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10394:1: rule__LibraryCS__Group__3 : rule__LibraryCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10894:1: rule__LibraryCS__Group__3 : rule__LibraryCS__Group__3__Impl ;
     public final void rule__LibraryCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10398:1: ( rule__LibraryCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10399:2: rule__LibraryCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10898:1: ( rule__LibraryCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10899:2: rule__LibraryCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__3__Impl_in_rule__LibraryCS__Group__322076);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group__3__Impl_in_rule__LibraryCS__Group__322918);
             rule__LibraryCS__Group__3__Impl();
 
             state._fsp--;
@@ -33256,22 +34304,22 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10405:1: rule__LibraryCS__Group__3__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10905:1: rule__LibraryCS__Group__3__Impl : ( ';' ) ;
     public final void rule__LibraryCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10409:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10410:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10909:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10910:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10410:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10411:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10910:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10911:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLibraryCSAccess().getSemicolonKeyword_3()); 
             }
-            match(input,53,FollowSets001.FOLLOW_53_in_rule__LibraryCS__Group__3__Impl22104); if (state.failed) return ;
+            match(input,53,FollowSets001.FOLLOW_53_in_rule__LibraryCS__Group__3__Impl22946); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLibraryCSAccess().getSemicolonKeyword_3()); 
             }
@@ -33297,21 +34345,21 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10432:1: rule__LibraryCS__Group_1__0 : rule__LibraryCS__Group_1__0__Impl rule__LibraryCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10932:1: rule__LibraryCS__Group_1__0 : rule__LibraryCS__Group_1__0__Impl rule__LibraryCS__Group_1__1 ;
     public final void rule__LibraryCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10436:1: ( rule__LibraryCS__Group_1__0__Impl rule__LibraryCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10437:2: rule__LibraryCS__Group_1__0__Impl rule__LibraryCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10936:1: ( rule__LibraryCS__Group_1__0__Impl rule__LibraryCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10937:2: rule__LibraryCS__Group_1__0__Impl rule__LibraryCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group_1__0__Impl_in_rule__LibraryCS__Group_1__022143);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group_1__0__Impl_in_rule__LibraryCS__Group_1__022985);
             rule__LibraryCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group_1__1_in_rule__LibraryCS__Group_1__022146);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group_1__1_in_rule__LibraryCS__Group_1__022988);
             rule__LibraryCS__Group_1__1();
 
             state._fsp--;
@@ -33335,25 +34383,25 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10444:1: rule__LibraryCS__Group_1__0__Impl : ( ( rule__LibraryCS__NameAssignment_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10944:1: rule__LibraryCS__Group_1__0__Impl : ( ( rule__LibraryCS__NameAssignment_1_0 ) ) ;
     public final void rule__LibraryCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10448:1: ( ( ( rule__LibraryCS__NameAssignment_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10449:1: ( ( rule__LibraryCS__NameAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10948:1: ( ( ( rule__LibraryCS__NameAssignment_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10949:1: ( ( rule__LibraryCS__NameAssignment_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10449:1: ( ( rule__LibraryCS__NameAssignment_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10450:1: ( rule__LibraryCS__NameAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10949:1: ( ( rule__LibraryCS__NameAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10950:1: ( rule__LibraryCS__NameAssignment_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLibraryCSAccess().getNameAssignment_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10451:1: ( rule__LibraryCS__NameAssignment_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10451:2: rule__LibraryCS__NameAssignment_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10951:1: ( rule__LibraryCS__NameAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10951:2: rule__LibraryCS__NameAssignment_1_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__NameAssignment_1_0_in_rule__LibraryCS__Group_1__0__Impl22173);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__NameAssignment_1_0_in_rule__LibraryCS__Group_1__0__Impl23015);
             rule__LibraryCS__NameAssignment_1_0();
 
             state._fsp--;
@@ -33386,16 +34434,16 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10461:1: rule__LibraryCS__Group_1__1 : rule__LibraryCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10961:1: rule__LibraryCS__Group_1__1 : rule__LibraryCS__Group_1__1__Impl ;
     public final void rule__LibraryCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10465:1: ( rule__LibraryCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10466:2: rule__LibraryCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10965:1: ( rule__LibraryCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10966:2: rule__LibraryCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group_1__1__Impl_in_rule__LibraryCS__Group_1__122203);
+            pushFollow(FollowSets001.FOLLOW_rule__LibraryCS__Group_1__1__Impl_in_rule__LibraryCS__Group_1__123045);
             rule__LibraryCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -33419,22 +34467,22 @@
 
 
     // $ANTLR start "rule__LibraryCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10472:1: rule__LibraryCS__Group_1__1__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10972:1: rule__LibraryCS__Group_1__1__Impl : ( ':' ) ;
     public final void rule__LibraryCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10476:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10477:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10976:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10977:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10477:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10478:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10977:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10978:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLibraryCSAccess().getColonKeyword_1_1()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__LibraryCS__Group_1__1__Impl22231); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__LibraryCS__Group_1__1__Impl23073); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLibraryCSAccess().getColonKeyword_1_1()); 
             }
@@ -33460,21 +34508,21 @@
 
 
     // $ANTLR start "rule__ModelElementRefCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10495:1: rule__ModelElementRefCS__Group__0 : rule__ModelElementRefCS__Group__0__Impl rule__ModelElementRefCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10995:1: rule__ModelElementRefCS__Group__0 : rule__ModelElementRefCS__Group__0__Impl rule__ModelElementRefCS__Group__1 ;
     public final void rule__ModelElementRefCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10499:1: ( rule__ModelElementRefCS__Group__0__Impl rule__ModelElementRefCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10500:2: rule__ModelElementRefCS__Group__0__Impl rule__ModelElementRefCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10999:1: ( rule__ModelElementRefCS__Group__0__Impl rule__ModelElementRefCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11000:2: rule__ModelElementRefCS__Group__0__Impl rule__ModelElementRefCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__0__Impl_in_rule__ModelElementRefCS__Group__022266);
+            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__0__Impl_in_rule__ModelElementRefCS__Group__023108);
             rule__ModelElementRefCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__1_in_rule__ModelElementRefCS__Group__022269);
+            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__1_in_rule__ModelElementRefCS__Group__023111);
             rule__ModelElementRefCS__Group__1();
 
             state._fsp--;
@@ -33498,22 +34546,22 @@
 
 
     // $ANTLR start "rule__ModelElementRefCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10507:1: rule__ModelElementRefCS__Group__0__Impl : ( 'reference' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11007:1: rule__ModelElementRefCS__Group__0__Impl : ( 'reference' ) ;
     public final void rule__ModelElementRefCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10511:1: ( ( 'reference' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10512:1: ( 'reference' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11011:1: ( ( 'reference' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11012:1: ( 'reference' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10512:1: ( 'reference' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10513:1: 'reference'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11012:1: ( 'reference' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11013:1: 'reference'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getModelElementRefCSAccess().getReferenceKeyword_0()); 
             }
-            match(input,44,FollowSets001.FOLLOW_44_in_rule__ModelElementRefCS__Group__0__Impl22297); if (state.failed) return ;
+            match(input,44,FollowSets001.FOLLOW_44_in_rule__ModelElementRefCS__Group__0__Impl23139); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getModelElementRefCSAccess().getReferenceKeyword_0()); 
             }
@@ -33539,21 +34587,21 @@
 
 
     // $ANTLR start "rule__ModelElementRefCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10526:1: rule__ModelElementRefCS__Group__1 : rule__ModelElementRefCS__Group__1__Impl rule__ModelElementRefCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11026:1: rule__ModelElementRefCS__Group__1 : rule__ModelElementRefCS__Group__1__Impl rule__ModelElementRefCS__Group__2 ;
     public final void rule__ModelElementRefCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10530:1: ( rule__ModelElementRefCS__Group__1__Impl rule__ModelElementRefCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10531:2: rule__ModelElementRefCS__Group__1__Impl rule__ModelElementRefCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11030:1: ( rule__ModelElementRefCS__Group__1__Impl rule__ModelElementRefCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11031:2: rule__ModelElementRefCS__Group__1__Impl rule__ModelElementRefCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__1__Impl_in_rule__ModelElementRefCS__Group__122328);
+            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__1__Impl_in_rule__ModelElementRefCS__Group__123170);
             rule__ModelElementRefCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__2_in_rule__ModelElementRefCS__Group__122331);
+            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__2_in_rule__ModelElementRefCS__Group__123173);
             rule__ModelElementRefCS__Group__2();
 
             state._fsp--;
@@ -33577,25 +34625,25 @@
 
 
     // $ANTLR start "rule__ModelElementRefCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10538:1: rule__ModelElementRefCS__Group__1__Impl : ( ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11038:1: rule__ModelElementRefCS__Group__1__Impl : ( ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 ) ) ;
     public final void rule__ModelElementRefCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10542:1: ( ( ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10543:1: ( ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11042:1: ( ( ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11043:1: ( ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10543:1: ( ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10544:1: ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11043:1: ( ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11044:1: ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getModelElementRefCSAccess().getOwnedPathNameAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10545:1: ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10545:2: rule__ModelElementRefCS__OwnedPathNameAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11045:1: ( rule__ModelElementRefCS__OwnedPathNameAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11045:2: rule__ModelElementRefCS__OwnedPathNameAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__OwnedPathNameAssignment_1_in_rule__ModelElementRefCS__Group__1__Impl22358);
+            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__OwnedPathNameAssignment_1_in_rule__ModelElementRefCS__Group__1__Impl23200);
             rule__ModelElementRefCS__OwnedPathNameAssignment_1();
 
             state._fsp--;
@@ -33628,16 +34676,16 @@
 
 
     // $ANTLR start "rule__ModelElementRefCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10555:1: rule__ModelElementRefCS__Group__2 : rule__ModelElementRefCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11055:1: rule__ModelElementRefCS__Group__2 : rule__ModelElementRefCS__Group__2__Impl ;
     public final void rule__ModelElementRefCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10559:1: ( rule__ModelElementRefCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10560:2: rule__ModelElementRefCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11059:1: ( rule__ModelElementRefCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11060:2: rule__ModelElementRefCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__2__Impl_in_rule__ModelElementRefCS__Group__222388);
+            pushFollow(FollowSets001.FOLLOW_rule__ModelElementRefCS__Group__2__Impl_in_rule__ModelElementRefCS__Group__223230);
             rule__ModelElementRefCS__Group__2__Impl();
 
             state._fsp--;
@@ -33661,22 +34709,22 @@
 
 
     // $ANTLR start "rule__ModelElementRefCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10566:1: rule__ModelElementRefCS__Group__2__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11066:1: rule__ModelElementRefCS__Group__2__Impl : ( ';' ) ;
     public final void rule__ModelElementRefCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10570:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10571:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11070:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11071:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10571:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10572:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11071:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11072:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getModelElementRefCSAccess().getSemicolonKeyword_2()); 
             }
-            match(input,53,FollowSets001.FOLLOW_53_in_rule__ModelElementRefCS__Group__2__Impl22416); if (state.failed) return ;
+            match(input,53,FollowSets001.FOLLOW_53_in_rule__ModelElementRefCS__Group__2__Impl23258); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getModelElementRefCSAccess().getSemicolonKeyword_2()); 
             }
@@ -33702,21 +34750,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10591:1: rule__OperationCS__Group__0 : rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11091:1: rule__OperationCS__Group__0 : rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1 ;
     public final void rule__OperationCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10595:1: ( rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10596:2: rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11095:1: ( rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11096:2: rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__0__Impl_in_rule__OperationCS__Group__022453);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__0__Impl_in_rule__OperationCS__Group__023295);
             rule__OperationCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__1_in_rule__OperationCS__Group__022456);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__1_in_rule__OperationCS__Group__023298);
             rule__OperationCS__Group__1();
 
             state._fsp--;
@@ -33740,45 +34788,34 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10603:1: rule__OperationCS__Group__0__Impl : ( ( rule__OperationCS__Alternatives_0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11103:1: rule__OperationCS__Group__0__Impl : ( ( rule__OperationCS__UnorderedGroup_0 ) ) ;
     public final void rule__OperationCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10607:1: ( ( ( rule__OperationCS__Alternatives_0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10608:1: ( ( rule__OperationCS__Alternatives_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11107:1: ( ( ( rule__OperationCS__UnorderedGroup_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11108:1: ( ( rule__OperationCS__UnorderedGroup_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10608:1: ( ( rule__OperationCS__Alternatives_0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10609:1: ( rule__OperationCS__Alternatives_0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11108:1: ( ( rule__OperationCS__UnorderedGroup_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11109:1: ( rule__OperationCS__UnorderedGroup_0 )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getAlternatives_0()); 
+               before(grammarAccess.getOperationCSAccess().getUnorderedGroup_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10610:1: ( rule__OperationCS__Alternatives_0 )?
-            int alt127=2;
-            int LA127_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11110:1: ( rule__OperationCS__UnorderedGroup_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11110:2: rule__OperationCS__UnorderedGroup_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__UnorderedGroup_0_in_rule__OperationCS__Group__0__Impl23325);
+            rule__OperationCS__UnorderedGroup_0();
 
-            if ( (LA127_0==24||LA127_0==46) ) {
-                alt127=1;
-            }
-            switch (alt127) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10610:2: rule__OperationCS__Alternatives_0
-                    {
-                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Alternatives_0_in_rule__OperationCS__Group__0__Impl22483);
-                    rule__OperationCS__Alternatives_0();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-                    break;
+            state._fsp--;
+            if (state.failed) return ;
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getAlternatives_0()); 
+               after(grammarAccess.getOperationCSAccess().getUnorderedGroup_0()); 
             }
 
             }
@@ -33802,21 +34839,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10620:1: rule__OperationCS__Group__1 : rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11120:1: rule__OperationCS__Group__1 : rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2 ;
     public final void rule__OperationCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10624:1: ( rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10625:2: rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11124:1: ( rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11125:2: rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__1__Impl_in_rule__OperationCS__Group__122514);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__1__Impl_in_rule__OperationCS__Group__123355);
             rule__OperationCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__2_in_rule__OperationCS__Group__122517);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__2_in_rule__OperationCS__Group__123358);
             rule__OperationCS__Group__2();
 
             state._fsp--;
@@ -33840,22 +34877,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10632:1: rule__OperationCS__Group__1__Impl : ( 'operation' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11132:1: rule__OperationCS__Group__1__Impl : ( 'operation' ) ;
     public final void rule__OperationCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10636:1: ( ( 'operation' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10637:1: ( 'operation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11136:1: ( ( 'operation' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11137:1: ( 'operation' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10637:1: ( 'operation' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10638:1: 'operation'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11137:1: ( 'operation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11138:1: 'operation'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOperationKeyword_1()); 
             }
-            match(input,36,FollowSets001.FOLLOW_36_in_rule__OperationCS__Group__1__Impl22545); if (state.failed) return ;
+            match(input,36,FollowSets001.FOLLOW_36_in_rule__OperationCS__Group__1__Impl23386); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getOperationKeyword_1()); 
             }
@@ -33881,21 +34918,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10651:1: rule__OperationCS__Group__2 : rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11151:1: rule__OperationCS__Group__2 : rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3 ;
     public final void rule__OperationCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10655:1: ( rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10656:2: rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11155:1: ( rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11156:2: rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__2__Impl_in_rule__OperationCS__Group__222576);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__2__Impl_in_rule__OperationCS__Group__223417);
             rule__OperationCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__3_in_rule__OperationCS__Group__222579);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__3_in_rule__OperationCS__Group__223420);
             rule__OperationCS__Group__3();
 
             state._fsp--;
@@ -33919,33 +34956,33 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10663:1: rule__OperationCS__Group__2__Impl : ( ( rule__OperationCS__OwnedSignatureAssignment_2 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11163:1: rule__OperationCS__Group__2__Impl : ( ( rule__OperationCS__OwnedSignatureAssignment_2 )? ) ;
     public final void rule__OperationCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10667:1: ( ( ( rule__OperationCS__OwnedSignatureAssignment_2 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10668:1: ( ( rule__OperationCS__OwnedSignatureAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11167:1: ( ( ( rule__OperationCS__OwnedSignatureAssignment_2 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11168:1: ( ( rule__OperationCS__OwnedSignatureAssignment_2 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10668:1: ( ( rule__OperationCS__OwnedSignatureAssignment_2 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10669:1: ( rule__OperationCS__OwnedSignatureAssignment_2 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11168:1: ( ( rule__OperationCS__OwnedSignatureAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11169:1: ( rule__OperationCS__OwnedSignatureAssignment_2 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedSignatureAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10670:1: ( rule__OperationCS__OwnedSignatureAssignment_2 )?
-            int alt128=2;
-            int LA128_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11170:1: ( rule__OperationCS__OwnedSignatureAssignment_2 )?
+            int alt147=2;
+            int LA147_0 = input.LA(1);
 
-            if ( (LA128_0==67||LA128_0==95) ) {
-                alt128=1;
+            if ( (LA147_0==76||LA147_0==104) ) {
+                alt147=1;
             }
-            switch (alt128) {
+            switch (alt147) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10670:2: rule__OperationCS__OwnedSignatureAssignment_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11170:2: rule__OperationCS__OwnedSignatureAssignment_2
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedSignatureAssignment_2_in_rule__OperationCS__Group__2__Impl22606);
+                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedSignatureAssignment_2_in_rule__OperationCS__Group__2__Impl23447);
                     rule__OperationCS__OwnedSignatureAssignment_2();
 
                     state._fsp--;
@@ -33981,21 +35018,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10680:1: rule__OperationCS__Group__3 : rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11180:1: rule__OperationCS__Group__3 : rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4 ;
     public final void rule__OperationCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10684:1: ( rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10685:2: rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11184:1: ( rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11185:2: rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__3__Impl_in_rule__OperationCS__Group__322637);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__3__Impl_in_rule__OperationCS__Group__323478);
             rule__OperationCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__4_in_rule__OperationCS__Group__322640);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__4_in_rule__OperationCS__Group__323481);
             rule__OperationCS__Group__4();
 
             state._fsp--;
@@ -34019,25 +35056,25 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10692:1: rule__OperationCS__Group__3__Impl : ( ( rule__OperationCS__NameAssignment_3 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11192:1: rule__OperationCS__Group__3__Impl : ( ( rule__OperationCS__NameAssignment_3 ) ) ;
     public final void rule__OperationCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10696:1: ( ( ( rule__OperationCS__NameAssignment_3 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10697:1: ( ( rule__OperationCS__NameAssignment_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11196:1: ( ( ( rule__OperationCS__NameAssignment_3 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11197:1: ( ( rule__OperationCS__NameAssignment_3 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10697:1: ( ( rule__OperationCS__NameAssignment_3 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10698:1: ( rule__OperationCS__NameAssignment_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11197:1: ( ( rule__OperationCS__NameAssignment_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11198:1: ( rule__OperationCS__NameAssignment_3 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getNameAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10699:1: ( rule__OperationCS__NameAssignment_3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10699:2: rule__OperationCS__NameAssignment_3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11199:1: ( rule__OperationCS__NameAssignment_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11199:2: rule__OperationCS__NameAssignment_3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__NameAssignment_3_in_rule__OperationCS__Group__3__Impl22667);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__NameAssignment_3_in_rule__OperationCS__Group__3__Impl23508);
             rule__OperationCS__NameAssignment_3();
 
             state._fsp--;
@@ -34070,21 +35107,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10709:1: rule__OperationCS__Group__4 : rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11209:1: rule__OperationCS__Group__4 : rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5 ;
     public final void rule__OperationCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10713:1: ( rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10714:2: rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11213:1: ( rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11214:2: rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__4__Impl_in_rule__OperationCS__Group__422697);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__4__Impl_in_rule__OperationCS__Group__423538);
             rule__OperationCS__Group__4__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__5_in_rule__OperationCS__Group__422700);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__5_in_rule__OperationCS__Group__423541);
             rule__OperationCS__Group__5();
 
             state._fsp--;
@@ -34108,22 +35145,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10721:1: rule__OperationCS__Group__4__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11221:1: rule__OperationCS__Group__4__Impl : ( '(' ) ;
     public final void rule__OperationCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10725:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10726:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11225:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11226:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10726:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10727:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11226:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11227:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_4()); 
             }
-            match(input,95,FollowSets001.FOLLOW_95_in_rule__OperationCS__Group__4__Impl22728); if (state.failed) return ;
+            match(input,104,FollowSets001.FOLLOW_104_in_rule__OperationCS__Group__4__Impl23569); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_4()); 
             }
@@ -34149,21 +35186,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10740:1: rule__OperationCS__Group__5 : rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11240:1: rule__OperationCS__Group__5 : rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6 ;
     public final void rule__OperationCS__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10744:1: ( rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10745:2: rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11244:1: ( rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11245:2: rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__5__Impl_in_rule__OperationCS__Group__522759);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__5__Impl_in_rule__OperationCS__Group__523600);
             rule__OperationCS__Group__5__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__6_in_rule__OperationCS__Group__522762);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__6_in_rule__OperationCS__Group__523603);
             rule__OperationCS__Group__6();
 
             state._fsp--;
@@ -34187,33 +35224,33 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__5__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10752:1: rule__OperationCS__Group__5__Impl : ( ( rule__OperationCS__Group_5__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11252:1: rule__OperationCS__Group__5__Impl : ( ( rule__OperationCS__Group_5__0 )? ) ;
     public final void rule__OperationCS__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10756:1: ( ( ( rule__OperationCS__Group_5__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10757:1: ( ( rule__OperationCS__Group_5__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11256:1: ( ( ( rule__OperationCS__Group_5__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11257:1: ( ( rule__OperationCS__Group_5__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10757:1: ( ( rule__OperationCS__Group_5__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10758:1: ( rule__OperationCS__Group_5__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11257:1: ( ( rule__OperationCS__Group_5__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11258:1: ( rule__OperationCS__Group_5__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getGroup_5()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10759:1: ( rule__OperationCS__Group_5__0 )?
-            int alt129=2;
-            int LA129_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11259:1: ( rule__OperationCS__Group_5__0 )?
+            int alt148=2;
+            int LA148_0 = input.LA(1);
 
-            if ( ((LA129_0>=RULE_SIMPLE_ID && LA129_0<=RULE_ESCAPED_ID)||(LA129_0>=17 && LA129_0<=52)||(LA129_0>=55 && LA129_0<=60)) ) {
-                alt129=1;
+            if ( ((LA148_0>=RULE_SIMPLE_ID && LA148_0<=RULE_ESCAPED_ID)||(LA148_0>=17 && LA148_0<=52)||(LA148_0>=64 && LA148_0<=69)) ) {
+                alt148=1;
             }
-            switch (alt129) {
+            switch (alt148) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10759:2: rule__OperationCS__Group_5__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11259:2: rule__OperationCS__Group_5__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5__0_in_rule__OperationCS__Group__5__Impl22789);
+                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5__0_in_rule__OperationCS__Group__5__Impl23630);
                     rule__OperationCS__Group_5__0();
 
                     state._fsp--;
@@ -34249,21 +35286,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10769:1: rule__OperationCS__Group__6 : rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11269:1: rule__OperationCS__Group__6 : rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7 ;
     public final void rule__OperationCS__Group__6() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10773:1: ( rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10774:2: rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11273:1: ( rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11274:2: rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__6__Impl_in_rule__OperationCS__Group__622820);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__6__Impl_in_rule__OperationCS__Group__623661);
             rule__OperationCS__Group__6__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__7_in_rule__OperationCS__Group__622823);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__7_in_rule__OperationCS__Group__623664);
             rule__OperationCS__Group__7();
 
             state._fsp--;
@@ -34287,22 +35324,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__6__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10781:1: rule__OperationCS__Group__6__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11281:1: rule__OperationCS__Group__6__Impl : ( ')' ) ;
     public final void rule__OperationCS__Group__6__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10785:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10786:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11285:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11286:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10786:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10787:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11286:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11287:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_6()); 
             }
-            match(input,96,FollowSets001.FOLLOW_96_in_rule__OperationCS__Group__6__Impl22851); if (state.failed) return ;
+            match(input,105,FollowSets001.FOLLOW_105_in_rule__OperationCS__Group__6__Impl23692); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_6()); 
             }
@@ -34328,21 +35365,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__7"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10800:1: rule__OperationCS__Group__7 : rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11300:1: rule__OperationCS__Group__7 : rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8 ;
     public final void rule__OperationCS__Group__7() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10804:1: ( rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10805:2: rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11304:1: ( rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11305:2: rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__7__Impl_in_rule__OperationCS__Group__722882);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__7__Impl_in_rule__OperationCS__Group__723723);
             rule__OperationCS__Group__7__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__8_in_rule__OperationCS__Group__722885);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__8_in_rule__OperationCS__Group__723726);
             rule__OperationCS__Group__8();
 
             state._fsp--;
@@ -34366,33 +35403,33 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__7__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10812:1: rule__OperationCS__Group__7__Impl : ( ( rule__OperationCS__Group_7__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11312:1: rule__OperationCS__Group__7__Impl : ( ( rule__OperationCS__Group_7__0 )? ) ;
     public final void rule__OperationCS__Group__7__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10816:1: ( ( ( rule__OperationCS__Group_7__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10817:1: ( ( rule__OperationCS__Group_7__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11316:1: ( ( ( rule__OperationCS__Group_7__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11317:1: ( ( rule__OperationCS__Group_7__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10817:1: ( ( rule__OperationCS__Group_7__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10818:1: ( rule__OperationCS__Group_7__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11317:1: ( ( rule__OperationCS__Group_7__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11318:1: ( rule__OperationCS__Group_7__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getGroup_7()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10819:1: ( rule__OperationCS__Group_7__0 )?
-            int alt130=2;
-            int LA130_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11319:1: ( rule__OperationCS__Group_7__0 )?
+            int alt149=2;
+            int LA149_0 = input.LA(1);
 
-            if ( (LA130_0==97) ) {
-                alt130=1;
+            if ( (LA149_0==106) ) {
+                alt149=1;
             }
-            switch (alt130) {
+            switch (alt149) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10819:2: rule__OperationCS__Group_7__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11319:2: rule__OperationCS__Group_7__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_7__0_in_rule__OperationCS__Group__7__Impl22912);
+                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_7__0_in_rule__OperationCS__Group__7__Impl23753);
                     rule__OperationCS__Group_7__0();
 
                     state._fsp--;
@@ -34428,21 +35465,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__8"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10829:1: rule__OperationCS__Group__8 : rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11329:1: rule__OperationCS__Group__8 : rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9 ;
     public final void rule__OperationCS__Group__8() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10833:1: ( rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10834:2: rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11333:1: ( rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11334:2: rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__8__Impl_in_rule__OperationCS__Group__822943);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__8__Impl_in_rule__OperationCS__Group__823784);
             rule__OperationCS__Group__8__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__9_in_rule__OperationCS__Group__822946);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__9_in_rule__OperationCS__Group__823787);
             rule__OperationCS__Group__9();
 
             state._fsp--;
@@ -34466,33 +35503,33 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__8__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10841:1: rule__OperationCS__Group__8__Impl : ( ( rule__OperationCS__Group_8__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11341:1: rule__OperationCS__Group__8__Impl : ( ( rule__OperationCS__Group_8__0 )? ) ;
     public final void rule__OperationCS__Group__8__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10845:1: ( ( ( rule__OperationCS__Group_8__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10846:1: ( ( rule__OperationCS__Group_8__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11345:1: ( ( ( rule__OperationCS__Group_8__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11346:1: ( ( rule__OperationCS__Group_8__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10846:1: ( ( rule__OperationCS__Group_8__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10847:1: ( rule__OperationCS__Group_8__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11346:1: ( ( rule__OperationCS__Group_8__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11347:1: ( rule__OperationCS__Group_8__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getGroup_8()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10848:1: ( rule__OperationCS__Group_8__0 )?
-            int alt131=2;
-            int LA131_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11348:1: ( rule__OperationCS__Group_8__0 )?
+            int alt150=2;
+            int LA150_0 = input.LA(1);
 
-            if ( (LA131_0==48) ) {
-                alt131=1;
+            if ( (LA150_0==48) ) {
+                alt150=1;
             }
-            switch (alt131) {
+            switch (alt150) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10848:2: rule__OperationCS__Group_8__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11348:2: rule__OperationCS__Group_8__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__0_in_rule__OperationCS__Group__8__Impl22973);
+                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__0_in_rule__OperationCS__Group__8__Impl23814);
                     rule__OperationCS__Group_8__0();
 
                     state._fsp--;
@@ -34528,21 +35565,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__9"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10858:1: rule__OperationCS__Group__9 : rule__OperationCS__Group__9__Impl rule__OperationCS__Group__10 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11358:1: rule__OperationCS__Group__9 : rule__OperationCS__Group__9__Impl rule__OperationCS__Group__10 ;
     public final void rule__OperationCS__Group__9() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10862:1: ( rule__OperationCS__Group__9__Impl rule__OperationCS__Group__10 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10863:2: rule__OperationCS__Group__9__Impl rule__OperationCS__Group__10
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11362:1: ( rule__OperationCS__Group__9__Impl rule__OperationCS__Group__10 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11363:2: rule__OperationCS__Group__9__Impl rule__OperationCS__Group__10
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__9__Impl_in_rule__OperationCS__Group__923004);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__9__Impl_in_rule__OperationCS__Group__923845);
             rule__OperationCS__Group__9__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__10_in_rule__OperationCS__Group__923007);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__10_in_rule__OperationCS__Group__923848);
             rule__OperationCS__Group__10();
 
             state._fsp--;
@@ -34566,38 +35603,53 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__9__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10870:1: rule__OperationCS__Group__9__Impl : ( ( rule__OperationCS__Group_9__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11370:1: rule__OperationCS__Group__9__Impl : ( ( rule__OperationCS__UnorderedGroup_9 )? ) ;
     public final void rule__OperationCS__Group__9__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10874:1: ( ( ( rule__OperationCS__Group_9__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10875:1: ( ( rule__OperationCS__Group_9__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11374:1: ( ( ( rule__OperationCS__UnorderedGroup_9 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11375:1: ( ( rule__OperationCS__UnorderedGroup_9 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10875:1: ( ( rule__OperationCS__Group_9__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10876:1: ( rule__OperationCS__Group_9__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11375:1: ( ( rule__OperationCS__UnorderedGroup_9 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11376:1: ( rule__OperationCS__UnorderedGroup_9 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getGroup_9()); 
+               before(grammarAccess.getOperationCSAccess().getUnorderedGroup_9()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10877:1: ( rule__OperationCS__Group_9__0 )?
-            int alt132=2;
-            int LA132_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11377:1: ( rule__OperationCS__UnorderedGroup_9 )?
+            int alt151=2;
+            int LA151_0 = input.LA(1);
 
-            if ( (LA132_0==99) ) {
-                int LA132_1 = input.LA(2);
+            if ( (LA151_0==108) ) {
+                int LA151_1 = input.LA(2);
 
-                if ( (LA132_1==26||LA132_1==37||LA132_1==50||LA132_1==120||LA132_1==122||LA132_1==125) ) {
-                    alt132=1;
+                if ( synpred245_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {
+                    alt151=1;
                 }
             }
-            switch (alt132) {
+            else if ( LA151_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                alt151=1;
+            }
+            else if ( LA151_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                alt151=1;
+            }
+            else if ( LA151_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                alt151=1;
+            }
+            else if ( LA151_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                alt151=1;
+            }
+            else if ( LA151_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                alt151=1;
+            }
+            switch (alt151) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10877:2: rule__OperationCS__Group_9__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11377:2: rule__OperationCS__UnorderedGroup_9
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9__0_in_rule__OperationCS__Group__9__Impl23034);
-                    rule__OperationCS__Group_9__0();
+                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__UnorderedGroup_9_in_rule__OperationCS__Group__9__Impl23875);
+                    rule__OperationCS__UnorderedGroup_9();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -34608,7 +35660,7 @@
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getGroup_9()); 
+               after(grammarAccess.getOperationCSAccess().getUnorderedGroup_9()); 
             }
 
             }
@@ -34632,16 +35684,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__10"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10887:1: rule__OperationCS__Group__10 : rule__OperationCS__Group__10__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11387:1: rule__OperationCS__Group__10 : rule__OperationCS__Group__10__Impl ;
     public final void rule__OperationCS__Group__10() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10891:1: ( rule__OperationCS__Group__10__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10892:2: rule__OperationCS__Group__10__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11391:1: ( rule__OperationCS__Group__10__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11392:2: rule__OperationCS__Group__10__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__10__Impl_in_rule__OperationCS__Group__1023065);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group__10__Impl_in_rule__OperationCS__Group__1023906);
             rule__OperationCS__Group__10__Impl();
 
             state._fsp--;
@@ -34665,25 +35717,25 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__10__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10898:1: rule__OperationCS__Group__10__Impl : ( ( rule__OperationCS__Alternatives_10 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11398:1: rule__OperationCS__Group__10__Impl : ( ( rule__OperationCS__Alternatives_10 ) ) ;
     public final void rule__OperationCS__Group__10__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10902:1: ( ( ( rule__OperationCS__Alternatives_10 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10903:1: ( ( rule__OperationCS__Alternatives_10 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11402:1: ( ( ( rule__OperationCS__Alternatives_10 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11403:1: ( ( rule__OperationCS__Alternatives_10 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10903:1: ( ( rule__OperationCS__Alternatives_10 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10904:1: ( rule__OperationCS__Alternatives_10 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11403:1: ( ( rule__OperationCS__Alternatives_10 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11404:1: ( rule__OperationCS__Alternatives_10 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getAlternatives_10()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10905:1: ( rule__OperationCS__Alternatives_10 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10905:2: rule__OperationCS__Alternatives_10
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11405:1: ( rule__OperationCS__Alternatives_10 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11405:2: rule__OperationCS__Alternatives_10
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Alternatives_10_in_rule__OperationCS__Group__10__Impl23092);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Alternatives_10_in_rule__OperationCS__Group__10__Impl23933);
             rule__OperationCS__Alternatives_10();
 
             state._fsp--;
@@ -34715,390 +35767,22 @@
     // $ANTLR end "rule__OperationCS__Group__10__Impl"
 
 
-    // $ANTLR start "rule__OperationCS__Group_0_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10937:1: rule__OperationCS__Group_0_0__0 : rule__OperationCS__Group_0_0__0__Impl rule__OperationCS__Group_0_0__1 ;
-    public final void rule__OperationCS__Group_0_0__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10941:1: ( rule__OperationCS__Group_0_0__0__Impl rule__OperationCS__Group_0_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10942:2: rule__OperationCS__Group_0_0__0__Impl rule__OperationCS__Group_0_0__1
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_0_0__0__Impl_in_rule__OperationCS__Group_0_0__023144);
-            rule__OperationCS__Group_0_0__0__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_0_0__1_in_rule__OperationCS__Group_0_0__023147);
-            rule__OperationCS__Group_0_0__1();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_0_0__0"
-
-
-    // $ANTLR start "rule__OperationCS__Group_0_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10949:1: rule__OperationCS__Group_0_0__0__Impl : ( ( rule__OperationCS__QualifiersAssignment_0_0_0 ) ) ;
-    public final void rule__OperationCS__Group_0_0__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10953:1: ( ( ( rule__OperationCS__QualifiersAssignment_0_0_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10954:1: ( ( rule__OperationCS__QualifiersAssignment_0_0_0 ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10954:1: ( ( rule__OperationCS__QualifiersAssignment_0_0_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10955:1: ( rule__OperationCS__QualifiersAssignment_0_0_0 )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10956:1: ( rule__OperationCS__QualifiersAssignment_0_0_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10956:2: rule__OperationCS__QualifiersAssignment_0_0_0
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__QualifiersAssignment_0_0_0_in_rule__OperationCS__Group_0_0__0__Impl23174);
-            rule__OperationCS__QualifiersAssignment_0_0_0();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_0_0__0__Impl"
-
-
-    // $ANTLR start "rule__OperationCS__Group_0_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10966:1: rule__OperationCS__Group_0_0__1 : rule__OperationCS__Group_0_0__1__Impl ;
-    public final void rule__OperationCS__Group_0_0__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10970:1: ( rule__OperationCS__Group_0_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10971:2: rule__OperationCS__Group_0_0__1__Impl
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_0_0__1__Impl_in_rule__OperationCS__Group_0_0__123204);
-            rule__OperationCS__Group_0_0__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_0_0__1"
-
-
-    // $ANTLR start "rule__OperationCS__Group_0_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10977:1: rule__OperationCS__Group_0_0__1__Impl : ( ( rule__OperationCS__QualifiersAssignment_0_0_1 )? ) ;
-    public final void rule__OperationCS__Group_0_0__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10981:1: ( ( ( rule__OperationCS__QualifiersAssignment_0_0_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10982:1: ( ( rule__OperationCS__QualifiersAssignment_0_0_1 )? )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10982:1: ( ( rule__OperationCS__QualifiersAssignment_0_0_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10983:1: ( rule__OperationCS__QualifiersAssignment_0_0_1 )?
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_1()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10984:1: ( rule__OperationCS__QualifiersAssignment_0_0_1 )?
-            int alt133=2;
-            int LA133_0 = input.LA(1);
-
-            if ( (LA133_0==24) ) {
-                alt133=1;
-            }
-            switch (alt133) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10984:2: rule__OperationCS__QualifiersAssignment_0_0_1
-                    {
-                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__QualifiersAssignment_0_0_1_in_rule__OperationCS__Group_0_0__1__Impl23231);
-                    rule__OperationCS__QualifiersAssignment_0_0_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_0_1()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_0_0__1__Impl"
-
-
-    // $ANTLR start "rule__OperationCS__Group_0_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:10998:1: rule__OperationCS__Group_0_1__0 : rule__OperationCS__Group_0_1__0__Impl rule__OperationCS__Group_0_1__1 ;
-    public final void rule__OperationCS__Group_0_1__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11002:1: ( rule__OperationCS__Group_0_1__0__Impl rule__OperationCS__Group_0_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11003:2: rule__OperationCS__Group_0_1__0__Impl rule__OperationCS__Group_0_1__1
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_0_1__0__Impl_in_rule__OperationCS__Group_0_1__023266);
-            rule__OperationCS__Group_0_1__0__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_0_1__1_in_rule__OperationCS__Group_0_1__023269);
-            rule__OperationCS__Group_0_1__1();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_0_1__0"
-
-
-    // $ANTLR start "rule__OperationCS__Group_0_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11010:1: rule__OperationCS__Group_0_1__0__Impl : ( ( rule__OperationCS__QualifiersAssignment_0_1_0 ) ) ;
-    public final void rule__OperationCS__Group_0_1__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11014:1: ( ( ( rule__OperationCS__QualifiersAssignment_0_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11015:1: ( ( rule__OperationCS__QualifiersAssignment_0_1_0 ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11015:1: ( ( rule__OperationCS__QualifiersAssignment_0_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11016:1: ( rule__OperationCS__QualifiersAssignment_0_1_0 )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11017:1: ( rule__OperationCS__QualifiersAssignment_0_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11017:2: rule__OperationCS__QualifiersAssignment_0_1_0
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__QualifiersAssignment_0_1_0_in_rule__OperationCS__Group_0_1__0__Impl23296);
-            rule__OperationCS__QualifiersAssignment_0_1_0();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_0_1__0__Impl"
-
-
-    // $ANTLR start "rule__OperationCS__Group_0_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11027:1: rule__OperationCS__Group_0_1__1 : rule__OperationCS__Group_0_1__1__Impl ;
-    public final void rule__OperationCS__Group_0_1__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11031:1: ( rule__OperationCS__Group_0_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11032:2: rule__OperationCS__Group_0_1__1__Impl
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_0_1__1__Impl_in_rule__OperationCS__Group_0_1__123326);
-            rule__OperationCS__Group_0_1__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_0_1__1"
-
-
-    // $ANTLR start "rule__OperationCS__Group_0_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11038:1: rule__OperationCS__Group_0_1__1__Impl : ( ( rule__OperationCS__QualifiersAssignment_0_1_1 )? ) ;
-    public final void rule__OperationCS__Group_0_1__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11042:1: ( ( ( rule__OperationCS__QualifiersAssignment_0_1_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11043:1: ( ( rule__OperationCS__QualifiersAssignment_0_1_1 )? )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11043:1: ( ( rule__OperationCS__QualifiersAssignment_0_1_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11044:1: ( rule__OperationCS__QualifiersAssignment_0_1_1 )?
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_1()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11045:1: ( rule__OperationCS__QualifiersAssignment_0_1_1 )?
-            int alt134=2;
-            int LA134_0 = input.LA(1);
-
-            if ( (LA134_0==46) ) {
-                alt134=1;
-            }
-            switch (alt134) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11045:2: rule__OperationCS__QualifiersAssignment_0_1_1
-                    {
-                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__QualifiersAssignment_0_1_1_in_rule__OperationCS__Group_0_1__1__Impl23353);
-                    rule__OperationCS__QualifiersAssignment_0_1_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersAssignment_0_1_1()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_0_1__1__Impl"
-
-
     // $ANTLR start "rule__OperationCS__Group_5__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11059:1: rule__OperationCS__Group_5__0 : rule__OperationCS__Group_5__0__Impl rule__OperationCS__Group_5__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11437:1: rule__OperationCS__Group_5__0 : rule__OperationCS__Group_5__0__Impl rule__OperationCS__Group_5__1 ;
     public final void rule__OperationCS__Group_5__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11063:1: ( rule__OperationCS__Group_5__0__Impl rule__OperationCS__Group_5__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11064:2: rule__OperationCS__Group_5__0__Impl rule__OperationCS__Group_5__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11441:1: ( rule__OperationCS__Group_5__0__Impl rule__OperationCS__Group_5__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11442:2: rule__OperationCS__Group_5__0__Impl rule__OperationCS__Group_5__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5__0__Impl_in_rule__OperationCS__Group_5__023388);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5__0__Impl_in_rule__OperationCS__Group_5__023985);
             rule__OperationCS__Group_5__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5__1_in_rule__OperationCS__Group_5__023391);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5__1_in_rule__OperationCS__Group_5__023988);
             rule__OperationCS__Group_5__1();
 
             state._fsp--;
@@ -35122,25 +35806,25 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_5__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11071:1: rule__OperationCS__Group_5__0__Impl : ( ( rule__OperationCS__OwnedParametersAssignment_5_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11449:1: rule__OperationCS__Group_5__0__Impl : ( ( rule__OperationCS__OwnedParametersAssignment_5_0 ) ) ;
     public final void rule__OperationCS__Group_5__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11075:1: ( ( ( rule__OperationCS__OwnedParametersAssignment_5_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11076:1: ( ( rule__OperationCS__OwnedParametersAssignment_5_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11453:1: ( ( ( rule__OperationCS__OwnedParametersAssignment_5_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11454:1: ( ( rule__OperationCS__OwnedParametersAssignment_5_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11076:1: ( ( rule__OperationCS__OwnedParametersAssignment_5_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11077:1: ( rule__OperationCS__OwnedParametersAssignment_5_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11454:1: ( ( rule__OperationCS__OwnedParametersAssignment_5_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11455:1: ( rule__OperationCS__OwnedParametersAssignment_5_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedParametersAssignment_5_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11078:1: ( rule__OperationCS__OwnedParametersAssignment_5_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11078:2: rule__OperationCS__OwnedParametersAssignment_5_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11456:1: ( rule__OperationCS__OwnedParametersAssignment_5_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11456:2: rule__OperationCS__OwnedParametersAssignment_5_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedParametersAssignment_5_0_in_rule__OperationCS__Group_5__0__Impl23418);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedParametersAssignment_5_0_in_rule__OperationCS__Group_5__0__Impl24015);
             rule__OperationCS__OwnedParametersAssignment_5_0();
 
             state._fsp--;
@@ -35173,16 +35857,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_5__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11088:1: rule__OperationCS__Group_5__1 : rule__OperationCS__Group_5__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11466:1: rule__OperationCS__Group_5__1 : rule__OperationCS__Group_5__1__Impl ;
     public final void rule__OperationCS__Group_5__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11092:1: ( rule__OperationCS__Group_5__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11093:2: rule__OperationCS__Group_5__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11470:1: ( rule__OperationCS__Group_5__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11471:2: rule__OperationCS__Group_5__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5__1__Impl_in_rule__OperationCS__Group_5__123448);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5__1__Impl_in_rule__OperationCS__Group_5__124045);
             rule__OperationCS__Group_5__1__Impl();
 
             state._fsp--;
@@ -35206,37 +35890,37 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_5__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11099:1: rule__OperationCS__Group_5__1__Impl : ( ( rule__OperationCS__Group_5_1__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11477:1: rule__OperationCS__Group_5__1__Impl : ( ( rule__OperationCS__Group_5_1__0 )* ) ;
     public final void rule__OperationCS__Group_5__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11103:1: ( ( ( rule__OperationCS__Group_5_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11104:1: ( ( rule__OperationCS__Group_5_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11481:1: ( ( ( rule__OperationCS__Group_5_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11482:1: ( ( rule__OperationCS__Group_5_1__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11104:1: ( ( rule__OperationCS__Group_5_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11105:1: ( rule__OperationCS__Group_5_1__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11482:1: ( ( rule__OperationCS__Group_5_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11483:1: ( rule__OperationCS__Group_5_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getGroup_5_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11106:1: ( rule__OperationCS__Group_5_1__0 )*
-            loop135:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11484:1: ( rule__OperationCS__Group_5_1__0 )*
+            loop152:
             do {
-                int alt135=2;
-                int LA135_0 = input.LA(1);
+                int alt152=2;
+                int LA152_0 = input.LA(1);
 
-                if ( (LA135_0==98) ) {
-                    alt135=1;
+                if ( (LA152_0==107) ) {
+                    alt152=1;
                 }
 
 
-                switch (alt135) {
+                switch (alt152) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11106:2: rule__OperationCS__Group_5_1__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11484:2: rule__OperationCS__Group_5_1__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5_1__0_in_rule__OperationCS__Group_5__1__Impl23475);
+            	    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5_1__0_in_rule__OperationCS__Group_5__1__Impl24072);
             	    rule__OperationCS__Group_5_1__0();
 
             	    state._fsp--;
@@ -35246,7 +35930,7 @@
             	    break;
 
             	default :
-            	    break loop135;
+            	    break loop152;
                 }
             } while (true);
 
@@ -35275,21 +35959,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_5_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11120:1: rule__OperationCS__Group_5_1__0 : rule__OperationCS__Group_5_1__0__Impl rule__OperationCS__Group_5_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11498:1: rule__OperationCS__Group_5_1__0 : rule__OperationCS__Group_5_1__0__Impl rule__OperationCS__Group_5_1__1 ;
     public final void rule__OperationCS__Group_5_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11124:1: ( rule__OperationCS__Group_5_1__0__Impl rule__OperationCS__Group_5_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11125:2: rule__OperationCS__Group_5_1__0__Impl rule__OperationCS__Group_5_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11502:1: ( rule__OperationCS__Group_5_1__0__Impl rule__OperationCS__Group_5_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11503:2: rule__OperationCS__Group_5_1__0__Impl rule__OperationCS__Group_5_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5_1__0__Impl_in_rule__OperationCS__Group_5_1__023510);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5_1__0__Impl_in_rule__OperationCS__Group_5_1__024107);
             rule__OperationCS__Group_5_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5_1__1_in_rule__OperationCS__Group_5_1__023513);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5_1__1_in_rule__OperationCS__Group_5_1__024110);
             rule__OperationCS__Group_5_1__1();
 
             state._fsp--;
@@ -35313,22 +35997,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_5_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11132:1: rule__OperationCS__Group_5_1__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11510:1: rule__OperationCS__Group_5_1__0__Impl : ( ',' ) ;
     public final void rule__OperationCS__Group_5_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11136:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11137:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11514:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11515:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11137:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11138:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11515:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11516:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getCommaKeyword_5_1_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__OperationCS__Group_5_1__0__Impl23541); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__OperationCS__Group_5_1__0__Impl24138); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getCommaKeyword_5_1_0()); 
             }
@@ -35354,16 +36038,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_5_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11151:1: rule__OperationCS__Group_5_1__1 : rule__OperationCS__Group_5_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11529:1: rule__OperationCS__Group_5_1__1 : rule__OperationCS__Group_5_1__1__Impl ;
     public final void rule__OperationCS__Group_5_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11155:1: ( rule__OperationCS__Group_5_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11156:2: rule__OperationCS__Group_5_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11533:1: ( rule__OperationCS__Group_5_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11534:2: rule__OperationCS__Group_5_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5_1__1__Impl_in_rule__OperationCS__Group_5_1__123572);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_5_1__1__Impl_in_rule__OperationCS__Group_5_1__124169);
             rule__OperationCS__Group_5_1__1__Impl();
 
             state._fsp--;
@@ -35387,25 +36071,25 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_5_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11162:1: rule__OperationCS__Group_5_1__1__Impl : ( ( rule__OperationCS__OwnedParametersAssignment_5_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11540:1: rule__OperationCS__Group_5_1__1__Impl : ( ( rule__OperationCS__OwnedParametersAssignment_5_1_1 ) ) ;
     public final void rule__OperationCS__Group_5_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11166:1: ( ( ( rule__OperationCS__OwnedParametersAssignment_5_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11167:1: ( ( rule__OperationCS__OwnedParametersAssignment_5_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11544:1: ( ( ( rule__OperationCS__OwnedParametersAssignment_5_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11545:1: ( ( rule__OperationCS__OwnedParametersAssignment_5_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11167:1: ( ( rule__OperationCS__OwnedParametersAssignment_5_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11168:1: ( rule__OperationCS__OwnedParametersAssignment_5_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11545:1: ( ( rule__OperationCS__OwnedParametersAssignment_5_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11546:1: ( rule__OperationCS__OwnedParametersAssignment_5_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedParametersAssignment_5_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11169:1: ( rule__OperationCS__OwnedParametersAssignment_5_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11169:2: rule__OperationCS__OwnedParametersAssignment_5_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11547:1: ( rule__OperationCS__OwnedParametersAssignment_5_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11547:2: rule__OperationCS__OwnedParametersAssignment_5_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedParametersAssignment_5_1_1_in_rule__OperationCS__Group_5_1__1__Impl23599);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedParametersAssignment_5_1_1_in_rule__OperationCS__Group_5_1__1__Impl24196);
             rule__OperationCS__OwnedParametersAssignment_5_1_1();
 
             state._fsp--;
@@ -35438,21 +36122,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_7__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11183:1: rule__OperationCS__Group_7__0 : rule__OperationCS__Group_7__0__Impl rule__OperationCS__Group_7__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11561:1: rule__OperationCS__Group_7__0 : rule__OperationCS__Group_7__0__Impl rule__OperationCS__Group_7__1 ;
     public final void rule__OperationCS__Group_7__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11187:1: ( rule__OperationCS__Group_7__0__Impl rule__OperationCS__Group_7__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11188:2: rule__OperationCS__Group_7__0__Impl rule__OperationCS__Group_7__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11565:1: ( rule__OperationCS__Group_7__0__Impl rule__OperationCS__Group_7__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11566:2: rule__OperationCS__Group_7__0__Impl rule__OperationCS__Group_7__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_7__0__Impl_in_rule__OperationCS__Group_7__023633);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_7__0__Impl_in_rule__OperationCS__Group_7__024230);
             rule__OperationCS__Group_7__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_7__1_in_rule__OperationCS__Group_7__023636);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_7__1_in_rule__OperationCS__Group_7__024233);
             rule__OperationCS__Group_7__1();
 
             state._fsp--;
@@ -35476,22 +36160,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_7__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11195:1: rule__OperationCS__Group_7__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11573:1: rule__OperationCS__Group_7__0__Impl : ( ':' ) ;
     public final void rule__OperationCS__Group_7__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11199:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11200:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11577:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11578:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11200:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11201:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11578:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11579:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getColonKeyword_7_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__OperationCS__Group_7__0__Impl23664); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__OperationCS__Group_7__0__Impl24261); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getColonKeyword_7_0()); 
             }
@@ -35517,16 +36201,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_7__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11214:1: rule__OperationCS__Group_7__1 : rule__OperationCS__Group_7__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11592:1: rule__OperationCS__Group_7__1 : rule__OperationCS__Group_7__1__Impl ;
     public final void rule__OperationCS__Group_7__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11218:1: ( rule__OperationCS__Group_7__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11219:2: rule__OperationCS__Group_7__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11596:1: ( rule__OperationCS__Group_7__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11597:2: rule__OperationCS__Group_7__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_7__1__Impl_in_rule__OperationCS__Group_7__123695);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_7__1__Impl_in_rule__OperationCS__Group_7__124292);
             rule__OperationCS__Group_7__1__Impl();
 
             state._fsp--;
@@ -35550,25 +36234,25 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_7__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11225:1: rule__OperationCS__Group_7__1__Impl : ( ( rule__OperationCS__OwnedTypeAssignment_7_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11603:1: rule__OperationCS__Group_7__1__Impl : ( ( rule__OperationCS__OwnedTypeAssignment_7_1 ) ) ;
     public final void rule__OperationCS__Group_7__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11229:1: ( ( ( rule__OperationCS__OwnedTypeAssignment_7_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11230:1: ( ( rule__OperationCS__OwnedTypeAssignment_7_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11607:1: ( ( ( rule__OperationCS__OwnedTypeAssignment_7_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11608:1: ( ( rule__OperationCS__OwnedTypeAssignment_7_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11230:1: ( ( rule__OperationCS__OwnedTypeAssignment_7_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11231:1: ( rule__OperationCS__OwnedTypeAssignment_7_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11608:1: ( ( rule__OperationCS__OwnedTypeAssignment_7_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11609:1: ( rule__OperationCS__OwnedTypeAssignment_7_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedTypeAssignment_7_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11232:1: ( rule__OperationCS__OwnedTypeAssignment_7_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11232:2: rule__OperationCS__OwnedTypeAssignment_7_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11610:1: ( rule__OperationCS__OwnedTypeAssignment_7_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11610:2: rule__OperationCS__OwnedTypeAssignment_7_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedTypeAssignment_7_1_in_rule__OperationCS__Group_7__1__Impl23722);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedTypeAssignment_7_1_in_rule__OperationCS__Group_7__1__Impl24319);
             rule__OperationCS__OwnedTypeAssignment_7_1();
 
             state._fsp--;
@@ -35601,21 +36285,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11246:1: rule__OperationCS__Group_8__0 : rule__OperationCS__Group_8__0__Impl rule__OperationCS__Group_8__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11624:1: rule__OperationCS__Group_8__0 : rule__OperationCS__Group_8__0__Impl rule__OperationCS__Group_8__1 ;
     public final void rule__OperationCS__Group_8__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11250:1: ( rule__OperationCS__Group_8__0__Impl rule__OperationCS__Group_8__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11251:2: rule__OperationCS__Group_8__0__Impl rule__OperationCS__Group_8__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11628:1: ( rule__OperationCS__Group_8__0__Impl rule__OperationCS__Group_8__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11629:2: rule__OperationCS__Group_8__0__Impl rule__OperationCS__Group_8__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__0__Impl_in_rule__OperationCS__Group_8__023756);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__0__Impl_in_rule__OperationCS__Group_8__024353);
             rule__OperationCS__Group_8__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__1_in_rule__OperationCS__Group_8__023759);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__1_in_rule__OperationCS__Group_8__024356);
             rule__OperationCS__Group_8__1();
 
             state._fsp--;
@@ -35639,22 +36323,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11258:1: rule__OperationCS__Group_8__0__Impl : ( 'throws' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11636:1: rule__OperationCS__Group_8__0__Impl : ( 'throws' ) ;
     public final void rule__OperationCS__Group_8__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11262:1: ( ( 'throws' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11263:1: ( 'throws' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11640:1: ( ( 'throws' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11641:1: ( 'throws' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11263:1: ( 'throws' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11264:1: 'throws'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11641:1: ( 'throws' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11642:1: 'throws'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getThrowsKeyword_8_0()); 
             }
-            match(input,48,FollowSets001.FOLLOW_48_in_rule__OperationCS__Group_8__0__Impl23787); if (state.failed) return ;
+            match(input,48,FollowSets001.FOLLOW_48_in_rule__OperationCS__Group_8__0__Impl24384); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getThrowsKeyword_8_0()); 
             }
@@ -35680,21 +36364,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11277:1: rule__OperationCS__Group_8__1 : rule__OperationCS__Group_8__1__Impl rule__OperationCS__Group_8__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11655:1: rule__OperationCS__Group_8__1 : rule__OperationCS__Group_8__1__Impl rule__OperationCS__Group_8__2 ;
     public final void rule__OperationCS__Group_8__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11281:1: ( rule__OperationCS__Group_8__1__Impl rule__OperationCS__Group_8__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11282:2: rule__OperationCS__Group_8__1__Impl rule__OperationCS__Group_8__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11659:1: ( rule__OperationCS__Group_8__1__Impl rule__OperationCS__Group_8__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11660:2: rule__OperationCS__Group_8__1__Impl rule__OperationCS__Group_8__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__1__Impl_in_rule__OperationCS__Group_8__123818);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__1__Impl_in_rule__OperationCS__Group_8__124415);
             rule__OperationCS__Group_8__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__2_in_rule__OperationCS__Group_8__123821);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__2_in_rule__OperationCS__Group_8__124418);
             rule__OperationCS__Group_8__2();
 
             state._fsp--;
@@ -35718,25 +36402,25 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11289:1: rule__OperationCS__Group_8__1__Impl : ( ( rule__OperationCS__OwnedExceptionsAssignment_8_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11667:1: rule__OperationCS__Group_8__1__Impl : ( ( rule__OperationCS__OwnedExceptionsAssignment_8_1 ) ) ;
     public final void rule__OperationCS__Group_8__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11293:1: ( ( ( rule__OperationCS__OwnedExceptionsAssignment_8_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11294:1: ( ( rule__OperationCS__OwnedExceptionsAssignment_8_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11671:1: ( ( ( rule__OperationCS__OwnedExceptionsAssignment_8_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11672:1: ( ( rule__OperationCS__OwnedExceptionsAssignment_8_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11294:1: ( ( rule__OperationCS__OwnedExceptionsAssignment_8_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11295:1: ( rule__OperationCS__OwnedExceptionsAssignment_8_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11672:1: ( ( rule__OperationCS__OwnedExceptionsAssignment_8_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11673:1: ( rule__OperationCS__OwnedExceptionsAssignment_8_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedExceptionsAssignment_8_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11296:1: ( rule__OperationCS__OwnedExceptionsAssignment_8_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11296:2: rule__OperationCS__OwnedExceptionsAssignment_8_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11674:1: ( rule__OperationCS__OwnedExceptionsAssignment_8_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11674:2: rule__OperationCS__OwnedExceptionsAssignment_8_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedExceptionsAssignment_8_1_in_rule__OperationCS__Group_8__1__Impl23848);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedExceptionsAssignment_8_1_in_rule__OperationCS__Group_8__1__Impl24445);
             rule__OperationCS__OwnedExceptionsAssignment_8_1();
 
             state._fsp--;
@@ -35769,16 +36453,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11306:1: rule__OperationCS__Group_8__2 : rule__OperationCS__Group_8__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11684:1: rule__OperationCS__Group_8__2 : rule__OperationCS__Group_8__2__Impl ;
     public final void rule__OperationCS__Group_8__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11310:1: ( rule__OperationCS__Group_8__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11311:2: rule__OperationCS__Group_8__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11688:1: ( rule__OperationCS__Group_8__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11689:2: rule__OperationCS__Group_8__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__2__Impl_in_rule__OperationCS__Group_8__223878);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8__2__Impl_in_rule__OperationCS__Group_8__224475);
             rule__OperationCS__Group_8__2__Impl();
 
             state._fsp--;
@@ -35802,37 +36486,37 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11317:1: rule__OperationCS__Group_8__2__Impl : ( ( rule__OperationCS__Group_8_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11695:1: rule__OperationCS__Group_8__2__Impl : ( ( rule__OperationCS__Group_8_2__0 )* ) ;
     public final void rule__OperationCS__Group_8__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11321:1: ( ( ( rule__OperationCS__Group_8_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11322:1: ( ( rule__OperationCS__Group_8_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11699:1: ( ( ( rule__OperationCS__Group_8_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11700:1: ( ( rule__OperationCS__Group_8_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11322:1: ( ( rule__OperationCS__Group_8_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11323:1: ( rule__OperationCS__Group_8_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11700:1: ( ( rule__OperationCS__Group_8_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11701:1: ( rule__OperationCS__Group_8_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getGroup_8_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11324:1: ( rule__OperationCS__Group_8_2__0 )*
-            loop136:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11702:1: ( rule__OperationCS__Group_8_2__0 )*
+            loop153:
             do {
-                int alt136=2;
-                int LA136_0 = input.LA(1);
+                int alt153=2;
+                int LA153_0 = input.LA(1);
 
-                if ( (LA136_0==98) ) {
-                    alt136=1;
+                if ( (LA153_0==107) ) {
+                    alt153=1;
                 }
 
 
-                switch (alt136) {
+                switch (alt153) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11324:2: rule__OperationCS__Group_8_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11702:2: rule__OperationCS__Group_8_2__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8_2__0_in_rule__OperationCS__Group_8__2__Impl23905);
+            	    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8_2__0_in_rule__OperationCS__Group_8__2__Impl24502);
             	    rule__OperationCS__Group_8_2__0();
 
             	    state._fsp--;
@@ -35842,7 +36526,7 @@
             	    break;
 
             	default :
-            	    break loop136;
+            	    break loop153;
                 }
             } while (true);
 
@@ -35871,21 +36555,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11340:1: rule__OperationCS__Group_8_2__0 : rule__OperationCS__Group_8_2__0__Impl rule__OperationCS__Group_8_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11718:1: rule__OperationCS__Group_8_2__0 : rule__OperationCS__Group_8_2__0__Impl rule__OperationCS__Group_8_2__1 ;
     public final void rule__OperationCS__Group_8_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11344:1: ( rule__OperationCS__Group_8_2__0__Impl rule__OperationCS__Group_8_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11345:2: rule__OperationCS__Group_8_2__0__Impl rule__OperationCS__Group_8_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11722:1: ( rule__OperationCS__Group_8_2__0__Impl rule__OperationCS__Group_8_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11723:2: rule__OperationCS__Group_8_2__0__Impl rule__OperationCS__Group_8_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8_2__0__Impl_in_rule__OperationCS__Group_8_2__023942);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8_2__0__Impl_in_rule__OperationCS__Group_8_2__024539);
             rule__OperationCS__Group_8_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8_2__1_in_rule__OperationCS__Group_8_2__023945);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8_2__1_in_rule__OperationCS__Group_8_2__024542);
             rule__OperationCS__Group_8_2__1();
 
             state._fsp--;
@@ -35909,22 +36593,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11352:1: rule__OperationCS__Group_8_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11730:1: rule__OperationCS__Group_8_2__0__Impl : ( ',' ) ;
     public final void rule__OperationCS__Group_8_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11356:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11357:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11734:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11735:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11357:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11358:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11735:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11736:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getCommaKeyword_8_2_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__OperationCS__Group_8_2__0__Impl23973); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__OperationCS__Group_8_2__0__Impl24570); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getCommaKeyword_8_2_0()); 
             }
@@ -35950,16 +36634,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11371:1: rule__OperationCS__Group_8_2__1 : rule__OperationCS__Group_8_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11749:1: rule__OperationCS__Group_8_2__1 : rule__OperationCS__Group_8_2__1__Impl ;
     public final void rule__OperationCS__Group_8_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11375:1: ( rule__OperationCS__Group_8_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11376:2: rule__OperationCS__Group_8_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11753:1: ( rule__OperationCS__Group_8_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11754:2: rule__OperationCS__Group_8_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8_2__1__Impl_in_rule__OperationCS__Group_8_2__124004);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_8_2__1__Impl_in_rule__OperationCS__Group_8_2__124601);
             rule__OperationCS__Group_8_2__1__Impl();
 
             state._fsp--;
@@ -35983,25 +36667,25 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_8_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11382:1: rule__OperationCS__Group_8_2__1__Impl : ( ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11760:1: rule__OperationCS__Group_8_2__1__Impl : ( ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 ) ) ;
     public final void rule__OperationCS__Group_8_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11386:1: ( ( ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11387:1: ( ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11764:1: ( ( ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11765:1: ( ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11387:1: ( ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11388:1: ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11765:1: ( ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11766:1: ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedExceptionsAssignment_8_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11389:1: ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11389:2: rule__OperationCS__OwnedExceptionsAssignment_8_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11767:1: ( rule__OperationCS__OwnedExceptionsAssignment_8_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11767:2: rule__OperationCS__OwnedExceptionsAssignment_8_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedExceptionsAssignment_8_2_1_in_rule__OperationCS__Group_8_2__1__Impl24031);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedExceptionsAssignment_8_2_1_in_rule__OperationCS__Group_8_2__1__Impl24628);
             rule__OperationCS__OwnedExceptionsAssignment_8_2_1();
 
             state._fsp--;
@@ -36033,23 +36717,23 @@
     // $ANTLR end "rule__OperationCS__Group_8_2__1__Impl"
 
 
-    // $ANTLR start "rule__OperationCS__Group_9__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11403:1: rule__OperationCS__Group_9__0 : rule__OperationCS__Group_9__0__Impl rule__OperationCS__Group_9__1 ;
-    public final void rule__OperationCS__Group_9__0() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__Group_9_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11781:1: rule__OperationCS__Group_9_0__0 : rule__OperationCS__Group_9_0__0__Impl rule__OperationCS__Group_9_0__1 ;
+    public final void rule__OperationCS__Group_9_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11407:1: ( rule__OperationCS__Group_9__0__Impl rule__OperationCS__Group_9__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11408:2: rule__OperationCS__Group_9__0__Impl rule__OperationCS__Group_9__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11785:1: ( rule__OperationCS__Group_9_0__0__Impl rule__OperationCS__Group_9_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11786:2: rule__OperationCS__Group_9_0__0__Impl rule__OperationCS__Group_9_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9__0__Impl_in_rule__OperationCS__Group_9__024065);
-            rule__OperationCS__Group_9__0__Impl();
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_0__0__Impl_in_rule__OperationCS__Group_9_0__024662);
+            rule__OperationCS__Group_9_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9__1_in_rule__OperationCS__Group_9__024068);
-            rule__OperationCS__Group_9__1();
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_0__1_in_rule__OperationCS__Group_9_0__024665);
+            rule__OperationCS__Group_9_0__1();
 
             state._fsp--;
             if (state.failed) return ;
@@ -36068,28 +36752,28 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__Group_9__0"
+    // $ANTLR end "rule__OperationCS__Group_9_0__0"
 
 
-    // $ANTLR start "rule__OperationCS__Group_9__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11415:1: rule__OperationCS__Group_9__0__Impl : ( '{' ) ;
-    public final void rule__OperationCS__Group_9__0__Impl() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__Group_9_0__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11793:1: rule__OperationCS__Group_9_0__0__Impl : ( '{' ) ;
+    public final void rule__OperationCS__Group_9_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11419:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11420:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11797:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11798:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11420:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11421:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11798:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11799:1: '{'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0()); 
+               before(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__OperationCS__Group_9__0__Impl24096); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__OperationCS__Group_9_0__0__Impl24693); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0()); 
+               after(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0()); 
             }
 
             }
@@ -36109,26 +36793,21 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__Group_9__0__Impl"
+    // $ANTLR end "rule__OperationCS__Group_9_0__0__Impl"
 
 
-    // $ANTLR start "rule__OperationCS__Group_9__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11434:1: rule__OperationCS__Group_9__1 : rule__OperationCS__Group_9__1__Impl rule__OperationCS__Group_9__2 ;
-    public final void rule__OperationCS__Group_9__1() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__Group_9_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11812:1: rule__OperationCS__Group_9_0__1 : rule__OperationCS__Group_9_0__1__Impl ;
+    public final void rule__OperationCS__Group_9_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11438:1: ( rule__OperationCS__Group_9__1__Impl rule__OperationCS__Group_9__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11439:2: rule__OperationCS__Group_9__1__Impl rule__OperationCS__Group_9__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11816:1: ( rule__OperationCS__Group_9_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11817:2: rule__OperationCS__Group_9_0__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9__1__Impl_in_rule__OperationCS__Group_9__124127);
-            rule__OperationCS__Group_9__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9__2_in_rule__OperationCS__Group_9__124130);
-            rule__OperationCS__Group_9__2();
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_0__1__Impl_in_rule__OperationCS__Group_9_0__124724);
+            rule__OperationCS__Group_9_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
@@ -36147,159 +36826,49 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__Group_9__1"
+    // $ANTLR end "rule__OperationCS__Group_9_0__1"
 
 
-    // $ANTLR start "rule__OperationCS__Group_9__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11446:1: rule__OperationCS__Group_9__1__Impl : ( ( ( rule__OperationCS__Group_9_1__0 ) ) ( ( rule__OperationCS__Group_9_1__0 )* ) ) ;
-    public final void rule__OperationCS__Group_9__1__Impl() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__Group_9_0__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11823:1: rule__OperationCS__Group_9_0__1__Impl : ( ( rule__OperationCS__Group_9_0_1__0 )? ) ;
+    public final void rule__OperationCS__Group_9_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11450:1: ( ( ( ( rule__OperationCS__Group_9_1__0 ) ) ( ( rule__OperationCS__Group_9_1__0 )* ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11451:1: ( ( ( rule__OperationCS__Group_9_1__0 ) ) ( ( rule__OperationCS__Group_9_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11827:1: ( ( ( rule__OperationCS__Group_9_0_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11828:1: ( ( rule__OperationCS__Group_9_0_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11451:1: ( ( ( rule__OperationCS__Group_9_1__0 ) ) ( ( rule__OperationCS__Group_9_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11452:1: ( ( rule__OperationCS__Group_9_1__0 ) ) ( ( rule__OperationCS__Group_9_1__0 )* )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11452:1: ( ( rule__OperationCS__Group_9_1__0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11453:1: ( rule__OperationCS__Group_9_1__0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11828:1: ( ( rule__OperationCS__Group_9_0_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11829:1: ( rule__OperationCS__Group_9_0_1__0 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getGroup_9_1()); 
+               before(grammarAccess.getOperationCSAccess().getGroup_9_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11454:1: ( rule__OperationCS__Group_9_1__0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11454:2: rule__OperationCS__Group_9_1__0
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_1__0_in_rule__OperationCS__Group_9__1__Impl24159);
-            rule__OperationCS__Group_9_1__0();
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11830:1: ( rule__OperationCS__Group_9_0_1__0 )?
+            int alt154=2;
+            int LA154_0 = input.LA(1);
 
-            state._fsp--;
-            if (state.failed) return ;
+            if ( (LA154_0==26||LA154_0==54) ) {
+                alt154=1;
+            }
+            switch (alt154) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11830:2: rule__OperationCS__Group_9_0_1__0
+                    {
+                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_0_1__0_in_rule__OperationCS__Group_9_0__1__Impl24751);
+                    rule__OperationCS__Group_9_0_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getGroup_9_1()); 
-            }
-
-            }
-
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11457:1: ( ( rule__OperationCS__Group_9_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11458:1: ( rule__OperationCS__Group_9_1__0 )*
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getGroup_9_1()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11459:1: ( rule__OperationCS__Group_9_1__0 )*
-            loop137:
-            do {
-                int alt137=2;
-                int LA137_0 = input.LA(1);
-
-                if ( (LA137_0==26||LA137_0==37||LA137_0==50||LA137_0==120||LA137_0==122||LA137_0==125) ) {
-                    alt137=1;
-                }
-
-
-                switch (alt137) {
-            	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11459:2: rule__OperationCS__Group_9_1__0
-            	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_1__0_in_rule__OperationCS__Group_9__1__Impl24171);
-            	    rule__OperationCS__Group_9_1__0();
-
-            	    state._fsp--;
-            	    if (state.failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop137;
-                }
-            } while (true);
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getGroup_9_1()); 
-            }
-
-            }
-
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_9__1__Impl"
-
-
-    // $ANTLR start "rule__OperationCS__Group_9__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11470:1: rule__OperationCS__Group_9__2 : rule__OperationCS__Group_9__2__Impl ;
-    public final void rule__OperationCS__Group_9__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11474:1: ( rule__OperationCS__Group_9__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11475:2: rule__OperationCS__Group_9__2__Impl
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9__2__Impl_in_rule__OperationCS__Group_9__224204);
-            rule__OperationCS__Group_9__2__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__Group_9__2"
-
-
-    // $ANTLR start "rule__OperationCS__Group_9__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11481:1: rule__OperationCS__Group_9__2__Impl : ( '}' ) ;
-    public final void rule__OperationCS__Group_9__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11485:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11486:1: ( '}' )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11486:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11487:1: '}'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2()); 
-            }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__OperationCS__Group_9__2__Impl24232); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2()); 
+               after(grammarAccess.getOperationCSAccess().getGroup_9_0_1()); 
             }
 
             }
@@ -36319,25 +36888,205 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__Group_9__2__Impl"
+    // $ANTLR end "rule__OperationCS__Group_9_0__1__Impl"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_0_1__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11844:1: rule__OperationCS__Group_9_0_1__0 : rule__OperationCS__Group_9_0_1__0__Impl rule__OperationCS__Group_9_0_1__1 ;
+    public final void rule__OperationCS__Group_9_0_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11848:1: ( rule__OperationCS__Group_9_0_1__0__Impl rule__OperationCS__Group_9_0_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11849:2: rule__OperationCS__Group_9_0_1__0__Impl rule__OperationCS__Group_9_0_1__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_0_1__0__Impl_in_rule__OperationCS__Group_9_0_1__024786);
+            rule__OperationCS__Group_9_0_1__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_0_1__1_in_rule__OperationCS__Group_9_0_1__024789);
+            rule__OperationCS__Group_9_0_1__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_0_1__0"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_0_1__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11856:1: rule__OperationCS__Group_9_0_1__0__Impl : ( ( rule__OperationCS__Alternatives_9_0_1_0 ) ) ;
+    public final void rule__OperationCS__Group_9_0_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11860:1: ( ( ( rule__OperationCS__Alternatives_9_0_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11861:1: ( ( rule__OperationCS__Alternatives_9_0_1_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11861:1: ( ( rule__OperationCS__Alternatives_9_0_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11862:1: ( rule__OperationCS__Alternatives_9_0_1_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOperationCSAccess().getAlternatives_9_0_1_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11863:1: ( rule__OperationCS__Alternatives_9_0_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11863:2: rule__OperationCS__Alternatives_9_0_1_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Alternatives_9_0_1_0_in_rule__OperationCS__Group_9_0_1__0__Impl24816);
+            rule__OperationCS__Alternatives_9_0_1_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOperationCSAccess().getAlternatives_9_0_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_0_1__0__Impl"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_0_1__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11873:1: rule__OperationCS__Group_9_0_1__1 : rule__OperationCS__Group_9_0_1__1__Impl ;
+    public final void rule__OperationCS__Group_9_0_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11877:1: ( rule__OperationCS__Group_9_0_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11878:2: rule__OperationCS__Group_9_0_1__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_0_1__1__Impl_in_rule__OperationCS__Group_9_0_1__124846);
+            rule__OperationCS__Group_9_0_1__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_0_1__1"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_0_1__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11884:1: rule__OperationCS__Group_9_0_1__1__Impl : ( ( ',' )? ) ;
+    public final void rule__OperationCS__Group_9_0_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11888:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11889:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11889:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11890:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11891:1: ( ',' )?
+            int alt155=2;
+            int LA155_0 = input.LA(1);
+
+            if ( (LA155_0==107) ) {
+                alt155=1;
+            }
+            switch (alt155) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11892:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__OperationCS__Group_9_0_1__1__Impl24875); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_0_1__1__Impl"
 
 
     // $ANTLR start "rule__OperationCS__Group_9_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11506:1: rule__OperationCS__Group_9_1__0 : rule__OperationCS__Group_9_1__0__Impl rule__OperationCS__Group_9_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11907:1: rule__OperationCS__Group_9_1__0 : rule__OperationCS__Group_9_1__0__Impl rule__OperationCS__Group_9_1__1 ;
     public final void rule__OperationCS__Group_9_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11510:1: ( rule__OperationCS__Group_9_1__0__Impl rule__OperationCS__Group_9_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11511:2: rule__OperationCS__Group_9_1__0__Impl rule__OperationCS__Group_9_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11911:1: ( rule__OperationCS__Group_9_1__0__Impl rule__OperationCS__Group_9_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11912:2: rule__OperationCS__Group_9_1__0__Impl rule__OperationCS__Group_9_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_1__0__Impl_in_rule__OperationCS__Group_9_1__024269);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_1__0__Impl_in_rule__OperationCS__Group_9_1__024912);
             rule__OperationCS__Group_9_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_1__1_in_rule__OperationCS__Group_9_1__024272);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_1__1_in_rule__OperationCS__Group_9_1__024915);
             rule__OperationCS__Group_9_1__1();
 
             state._fsp--;
@@ -36361,25 +37110,25 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_9_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11518:1: rule__OperationCS__Group_9_1__0__Impl : ( ( rule__OperationCS__Alternatives_9_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11919:1: rule__OperationCS__Group_9_1__0__Impl : ( ( rule__OperationCS__Alternatives_9_1_0 ) ) ;
     public final void rule__OperationCS__Group_9_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11522:1: ( ( ( rule__OperationCS__Alternatives_9_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11523:1: ( ( rule__OperationCS__Alternatives_9_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11923:1: ( ( ( rule__OperationCS__Alternatives_9_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11924:1: ( ( rule__OperationCS__Alternatives_9_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11523:1: ( ( rule__OperationCS__Alternatives_9_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11524:1: ( rule__OperationCS__Alternatives_9_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11924:1: ( ( rule__OperationCS__Alternatives_9_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11925:1: ( rule__OperationCS__Alternatives_9_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getAlternatives_9_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11525:1: ( rule__OperationCS__Alternatives_9_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11525:2: rule__OperationCS__Alternatives_9_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11926:1: ( rule__OperationCS__Alternatives_9_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11926:2: rule__OperationCS__Alternatives_9_1_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Alternatives_9_1_0_in_rule__OperationCS__Group_9_1__0__Impl24299);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Alternatives_9_1_0_in_rule__OperationCS__Group_9_1__0__Impl24942);
             rule__OperationCS__Alternatives_9_1_0();
 
             state._fsp--;
@@ -36412,16 +37161,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_9_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11535:1: rule__OperationCS__Group_9_1__1 : rule__OperationCS__Group_9_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11936:1: rule__OperationCS__Group_9_1__1 : rule__OperationCS__Group_9_1__1__Impl ;
     public final void rule__OperationCS__Group_9_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11539:1: ( rule__OperationCS__Group_9_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11540:2: rule__OperationCS__Group_9_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11940:1: ( rule__OperationCS__Group_9_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11941:2: rule__OperationCS__Group_9_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_1__1__Impl_in_rule__OperationCS__Group_9_1__124329);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_1__1__Impl_in_rule__OperationCS__Group_9_1__124972);
             rule__OperationCS__Group_9_1__1__Impl();
 
             state._fsp--;
@@ -36445,33 +37194,33 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_9_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11546:1: rule__OperationCS__Group_9_1__1__Impl : ( ( ',' )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11947:1: rule__OperationCS__Group_9_1__1__Impl : ( ( ',' )? ) ;
     public final void rule__OperationCS__Group_9_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11550:1: ( ( ( ',' )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11551:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11951:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11952:1: ( ( ',' )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11551:1: ( ( ',' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11552:1: ( ',' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11952:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11953:1: ( ',' )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11553:1: ( ',' )?
-            int alt138=2;
-            int LA138_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11954:1: ( ',' )?
+            int alt156=2;
+            int LA156_0 = input.LA(1);
 
-            if ( (LA138_0==98) ) {
-                alt138=1;
+            if ( (LA156_0==107) ) {
+                alt156=1;
             }
-            switch (alt138) {
+            switch (alt156) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11554:2: ','
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11955:2: ','
                     {
-                    match(input,98,FollowSets001.FOLLOW_98_in_rule__OperationCS__Group_9_1__1__Impl24358); if (state.failed) return ;
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__OperationCS__Group_9_1__1__Impl25001); if (state.failed) return ;
 
                     }
                     break;
@@ -36502,22 +37251,376 @@
     // $ANTLR end "rule__OperationCS__Group_9_1__1__Impl"
 
 
+    // $ANTLR start "rule__OperationCS__Group_9_2__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11970:1: rule__OperationCS__Group_9_2__0 : rule__OperationCS__Group_9_2__0__Impl rule__OperationCS__Group_9_2__1 ;
+    public final void rule__OperationCS__Group_9_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11974:1: ( rule__OperationCS__Group_9_2__0__Impl rule__OperationCS__Group_9_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11975:2: rule__OperationCS__Group_9_2__0__Impl rule__OperationCS__Group_9_2__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_2__0__Impl_in_rule__OperationCS__Group_9_2__025038);
+            rule__OperationCS__Group_9_2__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_2__1_in_rule__OperationCS__Group_9_2__025041);
+            rule__OperationCS__Group_9_2__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_2__0"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_2__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11982:1: rule__OperationCS__Group_9_2__0__Impl : ( ( rule__OperationCS__Group_9_2_0__0 )? ) ;
+    public final void rule__OperationCS__Group_9_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11986:1: ( ( ( rule__OperationCS__Group_9_2_0__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11987:1: ( ( rule__OperationCS__Group_9_2_0__0 )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11987:1: ( ( rule__OperationCS__Group_9_2_0__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11988:1: ( rule__OperationCS__Group_9_2_0__0 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOperationCSAccess().getGroup_9_2_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11989:1: ( rule__OperationCS__Group_9_2_0__0 )?
+            int alt157=2;
+            int LA157_0 = input.LA(1);
+
+            if ( (LA157_0==50||LA157_0==129) ) {
+                alt157=1;
+            }
+            switch (alt157) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11989:2: rule__OperationCS__Group_9_2_0__0
+                    {
+                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_2_0__0_in_rule__OperationCS__Group_9_2__0__Impl25068);
+                    rule__OperationCS__Group_9_2_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOperationCSAccess().getGroup_9_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_2__0__Impl"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_2__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11999:1: rule__OperationCS__Group_9_2__1 : rule__OperationCS__Group_9_2__1__Impl ;
+    public final void rule__OperationCS__Group_9_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12003:1: ( rule__OperationCS__Group_9_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12004:2: rule__OperationCS__Group_9_2__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_2__1__Impl_in_rule__OperationCS__Group_9_2__125099);
+            rule__OperationCS__Group_9_2__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_2__1"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_2__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12010:1: rule__OperationCS__Group_9_2__1__Impl : ( '}' ) ;
+    public final void rule__OperationCS__Group_9_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12014:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12015:1: ( '}' )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12015:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12016:1: '}'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1()); 
+            }
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__OperationCS__Group_9_2__1__Impl25127); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_2__1__Impl"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_2_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12033:1: rule__OperationCS__Group_9_2_0__0 : rule__OperationCS__Group_9_2_0__0__Impl rule__OperationCS__Group_9_2_0__1 ;
+    public final void rule__OperationCS__Group_9_2_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12037:1: ( rule__OperationCS__Group_9_2_0__0__Impl rule__OperationCS__Group_9_2_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12038:2: rule__OperationCS__Group_9_2_0__0__Impl rule__OperationCS__Group_9_2_0__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_2_0__0__Impl_in_rule__OperationCS__Group_9_2_0__025162);
+            rule__OperationCS__Group_9_2_0__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_2_0__1_in_rule__OperationCS__Group_9_2_0__025165);
+            rule__OperationCS__Group_9_2_0__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_2_0__0"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_2_0__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12045:1: rule__OperationCS__Group_9_2_0__0__Impl : ( ( rule__OperationCS__Alternatives_9_2_0_0 ) ) ;
+    public final void rule__OperationCS__Group_9_2_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12049:1: ( ( ( rule__OperationCS__Alternatives_9_2_0_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12050:1: ( ( rule__OperationCS__Alternatives_9_2_0_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12050:1: ( ( rule__OperationCS__Alternatives_9_2_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12051:1: ( rule__OperationCS__Alternatives_9_2_0_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOperationCSAccess().getAlternatives_9_2_0_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12052:1: ( rule__OperationCS__Alternatives_9_2_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12052:2: rule__OperationCS__Alternatives_9_2_0_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Alternatives_9_2_0_0_in_rule__OperationCS__Group_9_2_0__0__Impl25192);
+            rule__OperationCS__Alternatives_9_2_0_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOperationCSAccess().getAlternatives_9_2_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_2_0__0__Impl"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_2_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12062:1: rule__OperationCS__Group_9_2_0__1 : rule__OperationCS__Group_9_2_0__1__Impl ;
+    public final void rule__OperationCS__Group_9_2_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12066:1: ( rule__OperationCS__Group_9_2_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12067:2: rule__OperationCS__Group_9_2_0__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_9_2_0__1__Impl_in_rule__OperationCS__Group_9_2_0__125222);
+            rule__OperationCS__Group_9_2_0__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_2_0__1"
+
+
+    // $ANTLR start "rule__OperationCS__Group_9_2_0__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12073:1: rule__OperationCS__Group_9_2_0__1__Impl : ( ( ',' )? ) ;
+    public final void rule__OperationCS__Group_9_2_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12077:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12078:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12078:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12079:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12080:1: ( ',' )?
+            int alt158=2;
+            int LA158_0 = input.LA(1);
+
+            if ( (LA158_0==107) ) {
+                alt158=1;
+            }
+            switch (alt158) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12081:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__OperationCS__Group_9_2_0__1__Impl25251); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__Group_9_2_0__1__Impl"
+
+
     // $ANTLR start "rule__OperationCS__Group_10_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11569:1: rule__OperationCS__Group_10_0__0 : rule__OperationCS__Group_10_0__0__Impl rule__OperationCS__Group_10_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12096:1: rule__OperationCS__Group_10_0__0 : rule__OperationCS__Group_10_0__0__Impl rule__OperationCS__Group_10_0__1 ;
     public final void rule__OperationCS__Group_10_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11573:1: ( rule__OperationCS__Group_10_0__0__Impl rule__OperationCS__Group_10_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11574:2: rule__OperationCS__Group_10_0__0__Impl rule__OperationCS__Group_10_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12100:1: ( rule__OperationCS__Group_10_0__0__Impl rule__OperationCS__Group_10_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12101:2: rule__OperationCS__Group_10_0__0__Impl rule__OperationCS__Group_10_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__0__Impl_in_rule__OperationCS__Group_10_0__024395);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__0__Impl_in_rule__OperationCS__Group_10_0__025288);
             rule__OperationCS__Group_10_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__1_in_rule__OperationCS__Group_10_0__024398);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__1_in_rule__OperationCS__Group_10_0__025291);
             rule__OperationCS__Group_10_0__1();
 
             state._fsp--;
@@ -36541,22 +37644,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11581:1: rule__OperationCS__Group_10_0__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12108:1: rule__OperationCS__Group_10_0__0__Impl : ( '{' ) ;
     public final void rule__OperationCS__Group_10_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11585:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11586:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12112:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12113:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11586:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11587:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12113:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12114:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_10_0_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__OperationCS__Group_10_0__0__Impl24426); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__OperationCS__Group_10_0__0__Impl25319); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_10_0_0()); 
             }
@@ -36582,21 +37685,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11600:1: rule__OperationCS__Group_10_0__1 : rule__OperationCS__Group_10_0__1__Impl rule__OperationCS__Group_10_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12127:1: rule__OperationCS__Group_10_0__1 : rule__OperationCS__Group_10_0__1__Impl rule__OperationCS__Group_10_0__2 ;
     public final void rule__OperationCS__Group_10_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11604:1: ( rule__OperationCS__Group_10_0__1__Impl rule__OperationCS__Group_10_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11605:2: rule__OperationCS__Group_10_0__1__Impl rule__OperationCS__Group_10_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12131:1: ( rule__OperationCS__Group_10_0__1__Impl rule__OperationCS__Group_10_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12132:2: rule__OperationCS__Group_10_0__1__Impl rule__OperationCS__Group_10_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__1__Impl_in_rule__OperationCS__Group_10_0__124457);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__1__Impl_in_rule__OperationCS__Group_10_0__125350);
             rule__OperationCS__Group_10_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__2_in_rule__OperationCS__Group_10_0__124460);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__2_in_rule__OperationCS__Group_10_0__125353);
             rule__OperationCS__Group_10_0__2();
 
             state._fsp--;
@@ -36620,37 +37723,37 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11612:1: rule__OperationCS__Group_10_0__1__Impl : ( ( rule__OperationCS__Alternatives_10_0_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12139:1: rule__OperationCS__Group_10_0__1__Impl : ( ( rule__OperationCS__Alternatives_10_0_1 )* ) ;
     public final void rule__OperationCS__Group_10_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11616:1: ( ( ( rule__OperationCS__Alternatives_10_0_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11617:1: ( ( rule__OperationCS__Alternatives_10_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12143:1: ( ( ( rule__OperationCS__Alternatives_10_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12144:1: ( ( rule__OperationCS__Alternatives_10_0_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11617:1: ( ( rule__OperationCS__Alternatives_10_0_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11618:1: ( rule__OperationCS__Alternatives_10_0_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12144:1: ( ( rule__OperationCS__Alternatives_10_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12145:1: ( rule__OperationCS__Alternatives_10_0_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getAlternatives_10_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11619:1: ( rule__OperationCS__Alternatives_10_0_1 )*
-            loop139:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12146:1: ( rule__OperationCS__Alternatives_10_0_1 )*
+            loop159:
             do {
-                int alt139=2;
-                int LA139_0 = input.LA(1);
+                int alt159=2;
+                int LA159_0 = input.LA(1);
 
-                if ( (LA139_0==19||(LA139_0>=39 && LA139_0<=40)||(LA139_0>=55 && LA139_0<=56)||LA139_0==60) ) {
-                    alt139=1;
+                if ( (LA159_0==19||(LA159_0>=39 && LA159_0<=40)||(LA159_0>=64 && LA159_0<=65)||LA159_0==69) ) {
+                    alt159=1;
                 }
 
 
-                switch (alt139) {
+                switch (alt159) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11619:2: rule__OperationCS__Alternatives_10_0_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12146:2: rule__OperationCS__Alternatives_10_0_1
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Alternatives_10_0_1_in_rule__OperationCS__Group_10_0__1__Impl24487);
+            	    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Alternatives_10_0_1_in_rule__OperationCS__Group_10_0__1__Impl25380);
             	    rule__OperationCS__Alternatives_10_0_1();
 
             	    state._fsp--;
@@ -36660,7 +37763,7 @@
             	    break;
 
             	default :
-            	    break loop139;
+            	    break loop159;
                 }
             } while (true);
 
@@ -36689,16 +37792,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11629:1: rule__OperationCS__Group_10_0__2 : rule__OperationCS__Group_10_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12156:1: rule__OperationCS__Group_10_0__2 : rule__OperationCS__Group_10_0__2__Impl ;
     public final void rule__OperationCS__Group_10_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11633:1: ( rule__OperationCS__Group_10_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11634:2: rule__OperationCS__Group_10_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12160:1: ( rule__OperationCS__Group_10_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12161:2: rule__OperationCS__Group_10_0__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__2__Impl_in_rule__OperationCS__Group_10_0__224518);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0__2__Impl_in_rule__OperationCS__Group_10_0__225411);
             rule__OperationCS__Group_10_0__2__Impl();
 
             state._fsp--;
@@ -36722,22 +37825,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11640:1: rule__OperationCS__Group_10_0__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12167:1: rule__OperationCS__Group_10_0__2__Impl : ( '}' ) ;
     public final void rule__OperationCS__Group_10_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11644:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11645:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12171:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12172:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11645:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11646:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12172:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12173:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_10_0_2()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__OperationCS__Group_10_0__2__Impl24546); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__OperationCS__Group_10_0__2__Impl25439); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_10_0_2()); 
             }
@@ -36763,21 +37866,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11665:1: rule__OperationCS__Group_10_0_1_2__0 : rule__OperationCS__Group_10_0_1_2__0__Impl rule__OperationCS__Group_10_0_1_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12192:1: rule__OperationCS__Group_10_0_1_2__0 : rule__OperationCS__Group_10_0_1_2__0__Impl rule__OperationCS__Group_10_0_1_2__1 ;
     public final void rule__OperationCS__Group_10_0_1_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11669:1: ( rule__OperationCS__Group_10_0_1_2__0__Impl rule__OperationCS__Group_10_0_1_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11670:2: rule__OperationCS__Group_10_0_1_2__0__Impl rule__OperationCS__Group_10_0_1_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12196:1: ( rule__OperationCS__Group_10_0_1_2__0__Impl rule__OperationCS__Group_10_0_1_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12197:2: rule__OperationCS__Group_10_0_1_2__0__Impl rule__OperationCS__Group_10_0_1_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__0__Impl_in_rule__OperationCS__Group_10_0_1_2__024583);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__0__Impl_in_rule__OperationCS__Group_10_0_1_2__025476);
             rule__OperationCS__Group_10_0_1_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__1_in_rule__OperationCS__Group_10_0_1_2__024586);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__1_in_rule__OperationCS__Group_10_0_1_2__025479);
             rule__OperationCS__Group_10_0_1_2__1();
 
             state._fsp--;
@@ -36801,22 +37904,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11677:1: rule__OperationCS__Group_10_0_1_2__0__Impl : ( 'body' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12204:1: rule__OperationCS__Group_10_0_1_2__0__Impl : ( 'body' ) ;
     public final void rule__OperationCS__Group_10_0_1_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11681:1: ( ( 'body' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11682:1: ( 'body' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12208:1: ( ( 'body' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12209:1: ( 'body' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11682:1: ( 'body' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11683:1: 'body'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12209:1: ( 'body' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12210:1: 'body'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0()); 
             }
-            match(input,19,FollowSets001.FOLLOW_19_in_rule__OperationCS__Group_10_0_1_2__0__Impl24614); if (state.failed) return ;
+            match(input,19,FollowSets001.FOLLOW_19_in_rule__OperationCS__Group_10_0_1_2__0__Impl25507); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0()); 
             }
@@ -36842,21 +37945,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11696:1: rule__OperationCS__Group_10_0_1_2__1 : rule__OperationCS__Group_10_0_1_2__1__Impl rule__OperationCS__Group_10_0_1_2__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12223:1: rule__OperationCS__Group_10_0_1_2__1 : rule__OperationCS__Group_10_0_1_2__1__Impl rule__OperationCS__Group_10_0_1_2__2 ;
     public final void rule__OperationCS__Group_10_0_1_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11700:1: ( rule__OperationCS__Group_10_0_1_2__1__Impl rule__OperationCS__Group_10_0_1_2__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11701:2: rule__OperationCS__Group_10_0_1_2__1__Impl rule__OperationCS__Group_10_0_1_2__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12227:1: ( rule__OperationCS__Group_10_0_1_2__1__Impl rule__OperationCS__Group_10_0_1_2__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12228:2: rule__OperationCS__Group_10_0_1_2__1__Impl rule__OperationCS__Group_10_0_1_2__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__1__Impl_in_rule__OperationCS__Group_10_0_1_2__124645);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__1__Impl_in_rule__OperationCS__Group_10_0_1_2__125538);
             rule__OperationCS__Group_10_0_1_2__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__2_in_rule__OperationCS__Group_10_0_1_2__124648);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__2_in_rule__OperationCS__Group_10_0_1_2__125541);
             rule__OperationCS__Group_10_0_1_2__2();
 
             state._fsp--;
@@ -36880,33 +37983,33 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11708:1: rule__OperationCS__Group_10_0_1_2__1__Impl : ( ( ruleUnrestrictedName )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12235:1: rule__OperationCS__Group_10_0_1_2__1__Impl : ( ( ruleUnrestrictedName )? ) ;
     public final void rule__OperationCS__Group_10_0_1_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11712:1: ( ( ( ruleUnrestrictedName )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11713:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12239:1: ( ( ( ruleUnrestrictedName )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12240:1: ( ( ruleUnrestrictedName )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11713:1: ( ( ruleUnrestrictedName )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11714:1: ( ruleUnrestrictedName )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12240:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12241:1: ( ruleUnrestrictedName )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11715:1: ( ruleUnrestrictedName )?
-            int alt140=2;
-            int LA140_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12242:1: ( ruleUnrestrictedName )?
+            int alt160=2;
+            int LA160_0 = input.LA(1);
 
-            if ( ((LA140_0>=RULE_SIMPLE_ID && LA140_0<=RULE_ESCAPED_ID)||(LA140_0>=17 && LA140_0<=52)||(LA140_0>=55 && LA140_0<=60)) ) {
-                alt140=1;
+            if ( ((LA160_0>=RULE_SIMPLE_ID && LA160_0<=RULE_ESCAPED_ID)||(LA160_0>=17 && LA160_0<=52)||(LA160_0>=64 && LA160_0<=69)) ) {
+                alt160=1;
             }
-            switch (alt140) {
+            switch (alt160) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11715:3: ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12242:3: ruleUnrestrictedName
                     {
-                    pushFollow(FollowSets001.FOLLOW_ruleUnrestrictedName_in_rule__OperationCS__Group_10_0_1_2__1__Impl24676);
+                    pushFollow(FollowSets001.FOLLOW_ruleUnrestrictedName_in_rule__OperationCS__Group_10_0_1_2__1__Impl25569);
                     ruleUnrestrictedName();
 
                     state._fsp--;
@@ -36942,21 +38045,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11725:1: rule__OperationCS__Group_10_0_1_2__2 : rule__OperationCS__Group_10_0_1_2__2__Impl rule__OperationCS__Group_10_0_1_2__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12252:1: rule__OperationCS__Group_10_0_1_2__2 : rule__OperationCS__Group_10_0_1_2__2__Impl rule__OperationCS__Group_10_0_1_2__3 ;
     public final void rule__OperationCS__Group_10_0_1_2__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11729:1: ( rule__OperationCS__Group_10_0_1_2__2__Impl rule__OperationCS__Group_10_0_1_2__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11730:2: rule__OperationCS__Group_10_0_1_2__2__Impl rule__OperationCS__Group_10_0_1_2__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12256:1: ( rule__OperationCS__Group_10_0_1_2__2__Impl rule__OperationCS__Group_10_0_1_2__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12257:2: rule__OperationCS__Group_10_0_1_2__2__Impl rule__OperationCS__Group_10_0_1_2__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__2__Impl_in_rule__OperationCS__Group_10_0_1_2__224707);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__2__Impl_in_rule__OperationCS__Group_10_0_1_2__225600);
             rule__OperationCS__Group_10_0_1_2__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__3_in_rule__OperationCS__Group_10_0_1_2__224710);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__3_in_rule__OperationCS__Group_10_0_1_2__225603);
             rule__OperationCS__Group_10_0_1_2__3();
 
             state._fsp--;
@@ -36980,22 +38083,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11737:1: rule__OperationCS__Group_10_0_1_2__2__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12264:1: rule__OperationCS__Group_10_0_1_2__2__Impl : ( ':' ) ;
     public final void rule__OperationCS__Group_10_0_1_2__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11741:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11742:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12268:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12269:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11742:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11743:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12269:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12270:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__OperationCS__Group_10_0_1_2__2__Impl24738); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__OperationCS__Group_10_0_1_2__2__Impl25631); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2()); 
             }
@@ -37021,21 +38124,21 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11756:1: rule__OperationCS__Group_10_0_1_2__3 : rule__OperationCS__Group_10_0_1_2__3__Impl rule__OperationCS__Group_10_0_1_2__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12283:1: rule__OperationCS__Group_10_0_1_2__3 : rule__OperationCS__Group_10_0_1_2__3__Impl rule__OperationCS__Group_10_0_1_2__4 ;
     public final void rule__OperationCS__Group_10_0_1_2__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11760:1: ( rule__OperationCS__Group_10_0_1_2__3__Impl rule__OperationCS__Group_10_0_1_2__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11761:2: rule__OperationCS__Group_10_0_1_2__3__Impl rule__OperationCS__Group_10_0_1_2__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12287:1: ( rule__OperationCS__Group_10_0_1_2__3__Impl rule__OperationCS__Group_10_0_1_2__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12288:2: rule__OperationCS__Group_10_0_1_2__3__Impl rule__OperationCS__Group_10_0_1_2__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__3__Impl_in_rule__OperationCS__Group_10_0_1_2__324769);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__3__Impl_in_rule__OperationCS__Group_10_0_1_2__325662);
             rule__OperationCS__Group_10_0_1_2__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__4_in_rule__OperationCS__Group_10_0_1_2__324772);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__4_in_rule__OperationCS__Group_10_0_1_2__325665);
             rule__OperationCS__Group_10_0_1_2__4();
 
             state._fsp--;
@@ -37059,33 +38162,33 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11768:1: rule__OperationCS__Group_10_0_1_2__3__Impl : ( ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12295:1: rule__OperationCS__Group_10_0_1_2__3__Impl : ( ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )? ) ;
     public final void rule__OperationCS__Group_10_0_1_2__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11772:1: ( ( ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11773:1: ( ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12299:1: ( ( ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12300:1: ( ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11773:1: ( ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11774:1: ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12300:1: ( ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12301:1: ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedBodyExpressionsAssignment_10_0_1_2_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11775:1: ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )?
-            int alt141=2;
-            int LA141_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12302:1: ( rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 )?
+            int alt161=2;
+            int LA161_0 = input.LA(1);
 
-            if ( ((LA141_0>=RULE_INT && LA141_0<=RULE_SINGLE_QUOTED_STRING)||(LA141_0>=RULE_SIMPLE_ID && LA141_0<=RULE_UNQUOTED_STRING)||(LA141_0>=17 && LA141_0<=52)||(LA141_0>=55 && LA141_0<=63)||(LA141_0>=80 && LA141_0<=93)||LA141_0==95||(LA141_0>=105 && LA141_0<=107)||LA141_0==112||(LA141_0>=117 && LA141_0<=118)||(LA141_0>=131 && LA141_0<=132)) ) {
-                alt141=1;
+            if ( ((LA161_0>=RULE_INT && LA161_0<=RULE_SINGLE_QUOTED_STRING)||(LA161_0>=RULE_SIMPLE_ID && LA161_0<=RULE_UNQUOTED_STRING)||(LA161_0>=17 && LA161_0<=52)||(LA161_0>=64 && LA161_0<=72)||(LA161_0>=89 && LA161_0<=102)||LA161_0==104||(LA161_0>=114 && LA161_0<=116)||LA161_0==121||(LA161_0>=126 && LA161_0<=127)||(LA161_0>=131 && LA161_0<=132)) ) {
+                alt161=1;
             }
-            switch (alt141) {
+            switch (alt161) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11775:2: rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12302:2: rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3_in_rule__OperationCS__Group_10_0_1_2__3__Impl24799);
+                    pushFollow(FollowSets001.FOLLOW_rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3_in_rule__OperationCS__Group_10_0_1_2__3__Impl25692);
                     rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3();
 
                     state._fsp--;
@@ -37121,16 +38224,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11785:1: rule__OperationCS__Group_10_0_1_2__4 : rule__OperationCS__Group_10_0_1_2__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12312:1: rule__OperationCS__Group_10_0_1_2__4 : rule__OperationCS__Group_10_0_1_2__4__Impl ;
     public final void rule__OperationCS__Group_10_0_1_2__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11789:1: ( rule__OperationCS__Group_10_0_1_2__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11790:2: rule__OperationCS__Group_10_0_1_2__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12316:1: ( rule__OperationCS__Group_10_0_1_2__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12317:2: rule__OperationCS__Group_10_0_1_2__4__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__4__Impl_in_rule__OperationCS__Group_10_0_1_2__424830);
+            pushFollow(FollowSets001.FOLLOW_rule__OperationCS__Group_10_0_1_2__4__Impl_in_rule__OperationCS__Group_10_0_1_2__425723);
             rule__OperationCS__Group_10_0_1_2__4__Impl();
 
             state._fsp--;
@@ -37154,22 +38257,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_10_0_1_2__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11796:1: rule__OperationCS__Group_10_0_1_2__4__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12323:1: rule__OperationCS__Group_10_0_1_2__4__Impl : ( ';' ) ;
     public final void rule__OperationCS__Group_10_0_1_2__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11800:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11801:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12327:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12328:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11801:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11802:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12328:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12329:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4()); 
             }
-            match(input,53,FollowSets001.FOLLOW_53_in_rule__OperationCS__Group_10_0_1_2__4__Impl24858); if (state.failed) return ;
+            match(input,53,FollowSets001.FOLLOW_53_in_rule__OperationCS__Group_10_0_1_2__4__Impl25751); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4()); 
             }
@@ -37195,21 +38298,21 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11825:1: rule__PackageCS__Group__0 : rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12352:1: rule__PackageCS__Group__0 : rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1 ;
     public final void rule__PackageCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11829:1: ( rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11830:2: rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12356:1: ( rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12357:2: rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__0__Impl_in_rule__PackageCS__Group__024899);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__0__Impl_in_rule__PackageCS__Group__025792);
             rule__PackageCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__1_in_rule__PackageCS__Group__024902);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__1_in_rule__PackageCS__Group__025795);
             rule__PackageCS__Group__1();
 
             state._fsp--;
@@ -37233,22 +38336,22 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11837:1: rule__PackageCS__Group__0__Impl : ( 'package' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12364:1: rule__PackageCS__Group__0__Impl : ( 'package' ) ;
     public final void rule__PackageCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11841:1: ( ( 'package' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11842:1: ( 'package' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12368:1: ( ( 'package' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12369:1: ( 'package' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11842:1: ( 'package' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11843:1: 'package'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12369:1: ( 'package' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12370:1: 'package'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getPackageKeyword_0()); 
             }
-            match(input,38,FollowSets001.FOLLOW_38_in_rule__PackageCS__Group__0__Impl24930); if (state.failed) return ;
+            match(input,38,FollowSets001.FOLLOW_38_in_rule__PackageCS__Group__0__Impl25823); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPackageCSAccess().getPackageKeyword_0()); 
             }
@@ -37274,21 +38377,21 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11856:1: rule__PackageCS__Group__1 : rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12383:1: rule__PackageCS__Group__1 : rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2 ;
     public final void rule__PackageCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11860:1: ( rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11861:2: rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12387:1: ( rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12388:2: rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__1__Impl_in_rule__PackageCS__Group__124961);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__1__Impl_in_rule__PackageCS__Group__125854);
             rule__PackageCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__2_in_rule__PackageCS__Group__124964);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__2_in_rule__PackageCS__Group__125857);
             rule__PackageCS__Group__2();
 
             state._fsp--;
@@ -37312,25 +38415,25 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11868:1: rule__PackageCS__Group__1__Impl : ( ( rule__PackageCS__NameAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12395:1: rule__PackageCS__Group__1__Impl : ( ( rule__PackageCS__NameAssignment_1 ) ) ;
     public final void rule__PackageCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11872:1: ( ( ( rule__PackageCS__NameAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11873:1: ( ( rule__PackageCS__NameAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12399:1: ( ( ( rule__PackageCS__NameAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12400:1: ( ( rule__PackageCS__NameAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11873:1: ( ( rule__PackageCS__NameAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11874:1: ( rule__PackageCS__NameAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12400:1: ( ( rule__PackageCS__NameAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12401:1: ( rule__PackageCS__NameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getNameAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11875:1: ( rule__PackageCS__NameAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11875:2: rule__PackageCS__NameAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12402:1: ( rule__PackageCS__NameAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12402:2: rule__PackageCS__NameAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__NameAssignment_1_in_rule__PackageCS__Group__1__Impl24991);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__NameAssignment_1_in_rule__PackageCS__Group__1__Impl25884);
             rule__PackageCS__NameAssignment_1();
 
             state._fsp--;
@@ -37363,21 +38466,21 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11885:1: rule__PackageCS__Group__2 : rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12412:1: rule__PackageCS__Group__2 : rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3 ;
     public final void rule__PackageCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11889:1: ( rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11890:2: rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12416:1: ( rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12417:2: rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__2__Impl_in_rule__PackageCS__Group__225021);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__2__Impl_in_rule__PackageCS__Group__225914);
             rule__PackageCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__3_in_rule__PackageCS__Group__225024);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__3_in_rule__PackageCS__Group__225917);
             rule__PackageCS__Group__3();
 
             state._fsp--;
@@ -37401,33 +38504,33 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11897:1: rule__PackageCS__Group__2__Impl : ( ( rule__PackageCS__Group_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12424:1: rule__PackageCS__Group__2__Impl : ( ( rule__PackageCS__Group_2__0 )? ) ;
     public final void rule__PackageCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11901:1: ( ( ( rule__PackageCS__Group_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11902:1: ( ( rule__PackageCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12428:1: ( ( ( rule__PackageCS__Group_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12429:1: ( ( rule__PackageCS__Group_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11902:1: ( ( rule__PackageCS__Group_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11903:1: ( rule__PackageCS__Group_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12429:1: ( ( rule__PackageCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12430:1: ( rule__PackageCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11904:1: ( rule__PackageCS__Group_2__0 )?
-            int alt142=2;
-            int LA142_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12431:1: ( rule__PackageCS__Group_2__0 )?
+            int alt162=2;
+            int LA162_0 = input.LA(1);
 
-            if ( (LA142_0==97) ) {
-                alt142=1;
+            if ( (LA162_0==106) ) {
+                alt162=1;
             }
-            switch (alt142) {
+            switch (alt162) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11904:2: rule__PackageCS__Group_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12431:2: rule__PackageCS__Group_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_2__0_in_rule__PackageCS__Group__2__Impl25051);
+                    pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_2__0_in_rule__PackageCS__Group__2__Impl25944);
                     rule__PackageCS__Group_2__0();
 
                     state._fsp--;
@@ -37463,21 +38566,21 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11914:1: rule__PackageCS__Group__3 : rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12441:1: rule__PackageCS__Group__3 : rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4 ;
     public final void rule__PackageCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11918:1: ( rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11919:2: rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12445:1: ( rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12446:2: rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__3__Impl_in_rule__PackageCS__Group__325082);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__3__Impl_in_rule__PackageCS__Group__325975);
             rule__PackageCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__4_in_rule__PackageCS__Group__325085);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__4_in_rule__PackageCS__Group__325978);
             rule__PackageCS__Group__4();
 
             state._fsp--;
@@ -37501,33 +38604,33 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11926:1: rule__PackageCS__Group__3__Impl : ( ( rule__PackageCS__Group_3__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12453:1: rule__PackageCS__Group__3__Impl : ( ( rule__PackageCS__Group_3__0 )? ) ;
     public final void rule__PackageCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11930:1: ( ( ( rule__PackageCS__Group_3__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11931:1: ( ( rule__PackageCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12457:1: ( ( ( rule__PackageCS__Group_3__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12458:1: ( ( rule__PackageCS__Group_3__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11931:1: ( ( rule__PackageCS__Group_3__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11932:1: ( rule__PackageCS__Group_3__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12458:1: ( ( rule__PackageCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12459:1: ( rule__PackageCS__Group_3__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getGroup_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11933:1: ( rule__PackageCS__Group_3__0 )?
-            int alt143=2;
-            int LA143_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12460:1: ( rule__PackageCS__Group_3__0 )?
+            int alt163=2;
+            int LA163_0 = input.LA(1);
 
-            if ( (LA143_0==70) ) {
-                alt143=1;
+            if ( (LA163_0==79) ) {
+                alt163=1;
             }
-            switch (alt143) {
+            switch (alt163) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11933:2: rule__PackageCS__Group_3__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12460:2: rule__PackageCS__Group_3__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_3__0_in_rule__PackageCS__Group__3__Impl25112);
+                    pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_3__0_in_rule__PackageCS__Group__3__Impl26005);
                     rule__PackageCS__Group_3__0();
 
                     state._fsp--;
@@ -37563,16 +38666,16 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11943:1: rule__PackageCS__Group__4 : rule__PackageCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12470:1: rule__PackageCS__Group__4 : rule__PackageCS__Group__4__Impl ;
     public final void rule__PackageCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11947:1: ( rule__PackageCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11948:2: rule__PackageCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12474:1: ( rule__PackageCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12475:2: rule__PackageCS__Group__4__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__4__Impl_in_rule__PackageCS__Group__425143);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group__4__Impl_in_rule__PackageCS__Group__426036);
             rule__PackageCS__Group__4__Impl();
 
             state._fsp--;
@@ -37596,25 +38699,25 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11954:1: rule__PackageCS__Group__4__Impl : ( ( rule__PackageCS__Alternatives_4 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12481:1: rule__PackageCS__Group__4__Impl : ( ( rule__PackageCS__Alternatives_4 ) ) ;
     public final void rule__PackageCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11958:1: ( ( ( rule__PackageCS__Alternatives_4 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11959:1: ( ( rule__PackageCS__Alternatives_4 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12485:1: ( ( ( rule__PackageCS__Alternatives_4 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12486:1: ( ( rule__PackageCS__Alternatives_4 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11959:1: ( ( rule__PackageCS__Alternatives_4 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11960:1: ( rule__PackageCS__Alternatives_4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12486:1: ( ( rule__PackageCS__Alternatives_4 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12487:1: ( rule__PackageCS__Alternatives_4 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getAlternatives_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11961:1: ( rule__PackageCS__Alternatives_4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11961:2: rule__PackageCS__Alternatives_4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12488:1: ( rule__PackageCS__Alternatives_4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12488:2: rule__PackageCS__Alternatives_4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Alternatives_4_in_rule__PackageCS__Group__4__Impl25170);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Alternatives_4_in_rule__PackageCS__Group__4__Impl26063);
             rule__PackageCS__Alternatives_4();
 
             state._fsp--;
@@ -37647,21 +38750,21 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11981:1: rule__PackageCS__Group_2__0 : rule__PackageCS__Group_2__0__Impl rule__PackageCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12508:1: rule__PackageCS__Group_2__0 : rule__PackageCS__Group_2__0__Impl rule__PackageCS__Group_2__1 ;
     public final void rule__PackageCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11985:1: ( rule__PackageCS__Group_2__0__Impl rule__PackageCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11986:2: rule__PackageCS__Group_2__0__Impl rule__PackageCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12512:1: ( rule__PackageCS__Group_2__0__Impl rule__PackageCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12513:2: rule__PackageCS__Group_2__0__Impl rule__PackageCS__Group_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_2__0__Impl_in_rule__PackageCS__Group_2__025210);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_2__0__Impl_in_rule__PackageCS__Group_2__026103);
             rule__PackageCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_2__1_in_rule__PackageCS__Group_2__025213);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_2__1_in_rule__PackageCS__Group_2__026106);
             rule__PackageCS__Group_2__1();
 
             state._fsp--;
@@ -37685,22 +38788,22 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11993:1: rule__PackageCS__Group_2__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12520:1: rule__PackageCS__Group_2__0__Impl : ( ':' ) ;
     public final void rule__PackageCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11997:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11998:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12524:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12525:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11998:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11999:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12525:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12526:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getColonKeyword_2_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__PackageCS__Group_2__0__Impl25241); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__PackageCS__Group_2__0__Impl26134); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPackageCSAccess().getColonKeyword_2_0()); 
             }
@@ -37726,16 +38829,16 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12012:1: rule__PackageCS__Group_2__1 : rule__PackageCS__Group_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12539:1: rule__PackageCS__Group_2__1 : rule__PackageCS__Group_2__1__Impl ;
     public final void rule__PackageCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12016:1: ( rule__PackageCS__Group_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12017:2: rule__PackageCS__Group_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12543:1: ( rule__PackageCS__Group_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12544:2: rule__PackageCS__Group_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_2__1__Impl_in_rule__PackageCS__Group_2__125272);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_2__1__Impl_in_rule__PackageCS__Group_2__126165);
             rule__PackageCS__Group_2__1__Impl();
 
             state._fsp--;
@@ -37759,25 +38862,25 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12023:1: rule__PackageCS__Group_2__1__Impl : ( ( rule__PackageCS__NsPrefixAssignment_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12550:1: rule__PackageCS__Group_2__1__Impl : ( ( rule__PackageCS__NsPrefixAssignment_2_1 ) ) ;
     public final void rule__PackageCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12027:1: ( ( ( rule__PackageCS__NsPrefixAssignment_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12028:1: ( ( rule__PackageCS__NsPrefixAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12554:1: ( ( ( rule__PackageCS__NsPrefixAssignment_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12555:1: ( ( rule__PackageCS__NsPrefixAssignment_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12028:1: ( ( rule__PackageCS__NsPrefixAssignment_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12029:1: ( rule__PackageCS__NsPrefixAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12555:1: ( ( rule__PackageCS__NsPrefixAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12556:1: ( rule__PackageCS__NsPrefixAssignment_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getNsPrefixAssignment_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12030:1: ( rule__PackageCS__NsPrefixAssignment_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12030:2: rule__PackageCS__NsPrefixAssignment_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12557:1: ( rule__PackageCS__NsPrefixAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12557:2: rule__PackageCS__NsPrefixAssignment_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__NsPrefixAssignment_2_1_in_rule__PackageCS__Group_2__1__Impl25299);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__NsPrefixAssignment_2_1_in_rule__PackageCS__Group_2__1__Impl26192);
             rule__PackageCS__NsPrefixAssignment_2_1();
 
             state._fsp--;
@@ -37810,21 +38913,21 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12044:1: rule__PackageCS__Group_3__0 : rule__PackageCS__Group_3__0__Impl rule__PackageCS__Group_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12571:1: rule__PackageCS__Group_3__0 : rule__PackageCS__Group_3__0__Impl rule__PackageCS__Group_3__1 ;
     public final void rule__PackageCS__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12048:1: ( rule__PackageCS__Group_3__0__Impl rule__PackageCS__Group_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12049:2: rule__PackageCS__Group_3__0__Impl rule__PackageCS__Group_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12575:1: ( rule__PackageCS__Group_3__0__Impl rule__PackageCS__Group_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12576:2: rule__PackageCS__Group_3__0__Impl rule__PackageCS__Group_3__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_3__0__Impl_in_rule__PackageCS__Group_3__025333);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_3__0__Impl_in_rule__PackageCS__Group_3__026226);
             rule__PackageCS__Group_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_3__1_in_rule__PackageCS__Group_3__025336);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_3__1_in_rule__PackageCS__Group_3__026229);
             rule__PackageCS__Group_3__1();
 
             state._fsp--;
@@ -37848,22 +38951,22 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12056:1: rule__PackageCS__Group_3__0__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12583:1: rule__PackageCS__Group_3__0__Impl : ( '=' ) ;
     public final void rule__PackageCS__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12060:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12061:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12587:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12588:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12061:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12062:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12588:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12589:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getEqualsSignKeyword_3_0()); 
             }
-            match(input,70,FollowSets001.FOLLOW_70_in_rule__PackageCS__Group_3__0__Impl25364); if (state.failed) return ;
+            match(input,79,FollowSets001.FOLLOW_79_in_rule__PackageCS__Group_3__0__Impl26257); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPackageCSAccess().getEqualsSignKeyword_3_0()); 
             }
@@ -37889,16 +38992,16 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12075:1: rule__PackageCS__Group_3__1 : rule__PackageCS__Group_3__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12602:1: rule__PackageCS__Group_3__1 : rule__PackageCS__Group_3__1__Impl ;
     public final void rule__PackageCS__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12079:1: ( rule__PackageCS__Group_3__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12080:2: rule__PackageCS__Group_3__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12606:1: ( rule__PackageCS__Group_3__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12607:2: rule__PackageCS__Group_3__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_3__1__Impl_in_rule__PackageCS__Group_3__125395);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_3__1__Impl_in_rule__PackageCS__Group_3__126288);
             rule__PackageCS__Group_3__1__Impl();
 
             state._fsp--;
@@ -37922,25 +39025,25 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12086:1: rule__PackageCS__Group_3__1__Impl : ( ( rule__PackageCS__NsURIAssignment_3_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12613:1: rule__PackageCS__Group_3__1__Impl : ( ( rule__PackageCS__NsURIAssignment_3_1 ) ) ;
     public final void rule__PackageCS__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12090:1: ( ( ( rule__PackageCS__NsURIAssignment_3_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12091:1: ( ( rule__PackageCS__NsURIAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12617:1: ( ( ( rule__PackageCS__NsURIAssignment_3_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12618:1: ( ( rule__PackageCS__NsURIAssignment_3_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12091:1: ( ( rule__PackageCS__NsURIAssignment_3_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12092:1: ( rule__PackageCS__NsURIAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12618:1: ( ( rule__PackageCS__NsURIAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12619:1: ( rule__PackageCS__NsURIAssignment_3_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getNsURIAssignment_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12093:1: ( rule__PackageCS__NsURIAssignment_3_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12093:2: rule__PackageCS__NsURIAssignment_3_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12620:1: ( rule__PackageCS__NsURIAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12620:2: rule__PackageCS__NsURIAssignment_3_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__NsURIAssignment_3_1_in_rule__PackageCS__Group_3__1__Impl25422);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__NsURIAssignment_3_1_in_rule__PackageCS__Group_3__1__Impl26315);
             rule__PackageCS__NsURIAssignment_3_1();
 
             state._fsp--;
@@ -37973,21 +39076,21 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_4_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12107:1: rule__PackageCS__Group_4_0__0 : rule__PackageCS__Group_4_0__0__Impl rule__PackageCS__Group_4_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12634:1: rule__PackageCS__Group_4_0__0 : rule__PackageCS__Group_4_0__0__Impl rule__PackageCS__Group_4_0__1 ;
     public final void rule__PackageCS__Group_4_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12111:1: ( rule__PackageCS__Group_4_0__0__Impl rule__PackageCS__Group_4_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12112:2: rule__PackageCS__Group_4_0__0__Impl rule__PackageCS__Group_4_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12638:1: ( rule__PackageCS__Group_4_0__0__Impl rule__PackageCS__Group_4_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12639:2: rule__PackageCS__Group_4_0__0__Impl rule__PackageCS__Group_4_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__0__Impl_in_rule__PackageCS__Group_4_0__025456);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__0__Impl_in_rule__PackageCS__Group_4_0__026349);
             rule__PackageCS__Group_4_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__1_in_rule__PackageCS__Group_4_0__025459);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__1_in_rule__PackageCS__Group_4_0__026352);
             rule__PackageCS__Group_4_0__1();
 
             state._fsp--;
@@ -38011,22 +39114,22 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_4_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12119:1: rule__PackageCS__Group_4_0__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12646:1: rule__PackageCS__Group_4_0__0__Impl : ( '{' ) ;
     public final void rule__PackageCS__Group_4_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12123:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12124:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12650:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12651:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12124:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12125:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12651:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12652:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getLeftCurlyBracketKeyword_4_0_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__PackageCS__Group_4_0__0__Impl25487); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__PackageCS__Group_4_0__0__Impl26380); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPackageCSAccess().getLeftCurlyBracketKeyword_4_0_0()); 
             }
@@ -38052,21 +39155,21 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_4_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12138:1: rule__PackageCS__Group_4_0__1 : rule__PackageCS__Group_4_0__1__Impl rule__PackageCS__Group_4_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12665:1: rule__PackageCS__Group_4_0__1 : rule__PackageCS__Group_4_0__1__Impl rule__PackageCS__Group_4_0__2 ;
     public final void rule__PackageCS__Group_4_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12142:1: ( rule__PackageCS__Group_4_0__1__Impl rule__PackageCS__Group_4_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12143:2: rule__PackageCS__Group_4_0__1__Impl rule__PackageCS__Group_4_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12669:1: ( rule__PackageCS__Group_4_0__1__Impl rule__PackageCS__Group_4_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12670:2: rule__PackageCS__Group_4_0__1__Impl rule__PackageCS__Group_4_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__1__Impl_in_rule__PackageCS__Group_4_0__125518);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__1__Impl_in_rule__PackageCS__Group_4_0__126411);
             rule__PackageCS__Group_4_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__2_in_rule__PackageCS__Group_4_0__125521);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__2_in_rule__PackageCS__Group_4_0__126414);
             rule__PackageCS__Group_4_0__2();
 
             state._fsp--;
@@ -38090,37 +39193,37 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_4_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12150:1: rule__PackageCS__Group_4_0__1__Impl : ( ( rule__PackageCS__Alternatives_4_0_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12677:1: rule__PackageCS__Group_4_0__1__Impl : ( ( rule__PackageCS__Alternatives_4_0_1 )* ) ;
     public final void rule__PackageCS__Group_4_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12154:1: ( ( ( rule__PackageCS__Alternatives_4_0_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12155:1: ( ( rule__PackageCS__Alternatives_4_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12681:1: ( ( ( rule__PackageCS__Alternatives_4_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12682:1: ( ( rule__PackageCS__Alternatives_4_0_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12155:1: ( ( rule__PackageCS__Alternatives_4_0_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12156:1: ( rule__PackageCS__Alternatives_4_0_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12682:1: ( ( rule__PackageCS__Alternatives_4_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12683:1: ( rule__PackageCS__Alternatives_4_0_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getAlternatives_4_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12157:1: ( rule__PackageCS__Alternatives_4_0_1 )*
-            loop144:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12684:1: ( rule__PackageCS__Alternatives_4_0_1 )*
+            loop164:
             do {
-                int alt144=2;
-                int LA144_0 = input.LA(1);
+                int alt164=2;
+                int LA164_0 = input.LA(1);
 
-                if ( (LA144_0==17||LA144_0==21||LA144_0==23||LA144_0==27||LA144_0==38||LA144_0==41||(LA144_0>=55 && LA144_0<=56)||LA144_0==60) ) {
-                    alt144=1;
+                if ( (LA164_0==17||LA164_0==21||LA164_0==23||LA164_0==27||LA164_0==38||LA164_0==41||(LA164_0>=64 && LA164_0<=65)||LA164_0==69) ) {
+                    alt164=1;
                 }
 
 
-                switch (alt144) {
+                switch (alt164) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12157:2: rule__PackageCS__Alternatives_4_0_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12684:2: rule__PackageCS__Alternatives_4_0_1
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Alternatives_4_0_1_in_rule__PackageCS__Group_4_0__1__Impl25548);
+            	    pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Alternatives_4_0_1_in_rule__PackageCS__Group_4_0__1__Impl26441);
             	    rule__PackageCS__Alternatives_4_0_1();
 
             	    state._fsp--;
@@ -38130,7 +39233,7 @@
             	    break;
 
             	default :
-            	    break loop144;
+            	    break loop164;
                 }
             } while (true);
 
@@ -38159,16 +39262,16 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_4_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12167:1: rule__PackageCS__Group_4_0__2 : rule__PackageCS__Group_4_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12694:1: rule__PackageCS__Group_4_0__2 : rule__PackageCS__Group_4_0__2__Impl ;
     public final void rule__PackageCS__Group_4_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12171:1: ( rule__PackageCS__Group_4_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12172:2: rule__PackageCS__Group_4_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12698:1: ( rule__PackageCS__Group_4_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12699:2: rule__PackageCS__Group_4_0__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__2__Impl_in_rule__PackageCS__Group_4_0__225579);
+            pushFollow(FollowSets001.FOLLOW_rule__PackageCS__Group_4_0__2__Impl_in_rule__PackageCS__Group_4_0__226472);
             rule__PackageCS__Group_4_0__2__Impl();
 
             state._fsp--;
@@ -38192,22 +39295,22 @@
 
 
     // $ANTLR start "rule__PackageCS__Group_4_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12178:1: rule__PackageCS__Group_4_0__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12705:1: rule__PackageCS__Group_4_0__2__Impl : ( '}' ) ;
     public final void rule__PackageCS__Group_4_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12182:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12183:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12709:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12710:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12183:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12184:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12710:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12711:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getRightCurlyBracketKeyword_4_0_2()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__PackageCS__Group_4_0__2__Impl25607); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__PackageCS__Group_4_0__2__Impl26500); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPackageCSAccess().getRightCurlyBracketKeyword_4_0_2()); 
             }
@@ -38233,21 +39336,21 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12203:1: rule__ParameterCS__Group__0 : rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12730:1: rule__ParameterCS__Group__0 : rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1 ;
     public final void rule__ParameterCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12207:1: ( rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12208:2: rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12734:1: ( rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12735:2: rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__0__Impl_in_rule__ParameterCS__Group__025644);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__0__Impl_in_rule__ParameterCS__Group__026537);
             rule__ParameterCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__1_in_rule__ParameterCS__Group__025647);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__1_in_rule__ParameterCS__Group__026540);
             rule__ParameterCS__Group__1();
 
             state._fsp--;
@@ -38271,25 +39374,25 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12215:1: rule__ParameterCS__Group__0__Impl : ( ( rule__ParameterCS__NameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12742:1: rule__ParameterCS__Group__0__Impl : ( ( rule__ParameterCS__NameAssignment_0 ) ) ;
     public final void rule__ParameterCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12219:1: ( ( ( rule__ParameterCS__NameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12220:1: ( ( rule__ParameterCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12746:1: ( ( ( rule__ParameterCS__NameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12747:1: ( ( rule__ParameterCS__NameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12220:1: ( ( rule__ParameterCS__NameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12221:1: ( rule__ParameterCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12747:1: ( ( rule__ParameterCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12748:1: ( rule__ParameterCS__NameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12222:1: ( rule__ParameterCS__NameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12222:2: rule__ParameterCS__NameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12749:1: ( rule__ParameterCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12749:2: rule__ParameterCS__NameAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__NameAssignment_0_in_rule__ParameterCS__Group__0__Impl25674);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__NameAssignment_0_in_rule__ParameterCS__Group__0__Impl26567);
             rule__ParameterCS__NameAssignment_0();
 
             state._fsp--;
@@ -38322,21 +39425,21 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12232:1: rule__ParameterCS__Group__1 : rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12759:1: rule__ParameterCS__Group__1 : rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2 ;
     public final void rule__ParameterCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12236:1: ( rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12237:2: rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12763:1: ( rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12764:2: rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__1__Impl_in_rule__ParameterCS__Group__125704);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__1__Impl_in_rule__ParameterCS__Group__126597);
             rule__ParameterCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__2_in_rule__ParameterCS__Group__125707);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__2_in_rule__ParameterCS__Group__126600);
             rule__ParameterCS__Group__2();
 
             state._fsp--;
@@ -38360,33 +39463,33 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12244:1: rule__ParameterCS__Group__1__Impl : ( ( rule__ParameterCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12771:1: rule__ParameterCS__Group__1__Impl : ( ( rule__ParameterCS__Group_1__0 )? ) ;
     public final void rule__ParameterCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12248:1: ( ( ( rule__ParameterCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12249:1: ( ( rule__ParameterCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12775:1: ( ( ( rule__ParameterCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12776:1: ( ( rule__ParameterCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12249:1: ( ( rule__ParameterCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12250:1: ( rule__ParameterCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12776:1: ( ( rule__ParameterCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12777:1: ( rule__ParameterCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12251:1: ( rule__ParameterCS__Group_1__0 )?
-            int alt145=2;
-            int LA145_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12778:1: ( rule__ParameterCS__Group_1__0 )?
+            int alt165=2;
+            int LA165_0 = input.LA(1);
 
-            if ( (LA145_0==97) ) {
-                alt145=1;
+            if ( (LA165_0==106) ) {
+                alt165=1;
             }
-            switch (alt145) {
+            switch (alt165) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12251:2: rule__ParameterCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12778:2: rule__ParameterCS__Group_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_1__0_in_rule__ParameterCS__Group__1__Impl25734);
+                    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_1__0_in_rule__ParameterCS__Group__1__Impl26627);
                     rule__ParameterCS__Group_1__0();
 
                     state._fsp--;
@@ -38422,21 +39525,21 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12261:1: rule__ParameterCS__Group__2 : rule__ParameterCS__Group__2__Impl rule__ParameterCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12788:1: rule__ParameterCS__Group__2 : rule__ParameterCS__Group__2__Impl rule__ParameterCS__Group__3 ;
     public final void rule__ParameterCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12265:1: ( rule__ParameterCS__Group__2__Impl rule__ParameterCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12266:2: rule__ParameterCS__Group__2__Impl rule__ParameterCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12792:1: ( rule__ParameterCS__Group__2__Impl rule__ParameterCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12793:2: rule__ParameterCS__Group__2__Impl rule__ParameterCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__2__Impl_in_rule__ParameterCS__Group__225765);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__2__Impl_in_rule__ParameterCS__Group__226658);
             rule__ParameterCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__3_in_rule__ParameterCS__Group__225768);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__3_in_rule__ParameterCS__Group__226661);
             rule__ParameterCS__Group__3();
 
             state._fsp--;
@@ -38460,38 +39563,30 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12273:1: rule__ParameterCS__Group__2__Impl : ( ( rule__ParameterCS__Group_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12800:1: rule__ParameterCS__Group__2__Impl : ( ( rule__ParameterCS__UnorderedGroup_2 )? ) ;
     public final void rule__ParameterCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12277:1: ( ( ( rule__ParameterCS__Group_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12278:1: ( ( rule__ParameterCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12804:1: ( ( ( rule__ParameterCS__UnorderedGroup_2 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12805:1: ( ( rule__ParameterCS__UnorderedGroup_2 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12278:1: ( ( rule__ParameterCS__Group_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12279:1: ( rule__ParameterCS__Group_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12805:1: ( ( rule__ParameterCS__UnorderedGroup_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12806:1: ( rule__ParameterCS__UnorderedGroup_2 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getGroup_2()); 
+               before(grammarAccess.getParameterCSAccess().getUnorderedGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12280:1: ( rule__ParameterCS__Group_2__0 )?
-            int alt146=2;
-            int LA146_0 = input.LA(1);
-
-            if ( (LA146_0==99) ) {
-                int LA146_1 = input.LA(2);
-
-                if ( (LA146_1==37||LA146_1==50||LA146_1==122||LA146_1==125) ) {
-                    alt146=1;
-                }
-            }
-            switch (alt146) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12807:1: ( rule__ParameterCS__UnorderedGroup_2 )?
+            int alt166=2;
+            alt166 = dfa166.predict(input);
+            switch (alt166) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12280:2: rule__ParameterCS__Group_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12807:2: rule__ParameterCS__UnorderedGroup_2
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2__0_in_rule__ParameterCS__Group__2__Impl25795);
-                    rule__ParameterCS__Group_2__0();
+                    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__UnorderedGroup_2_in_rule__ParameterCS__Group__2__Impl26688);
+                    rule__ParameterCS__UnorderedGroup_2();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -38502,7 +39597,7 @@
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getGroup_2()); 
+               after(grammarAccess.getParameterCSAccess().getUnorderedGroup_2()); 
             }
 
             }
@@ -38526,16 +39621,16 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12290:1: rule__ParameterCS__Group__3 : rule__ParameterCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12817:1: rule__ParameterCS__Group__3 : rule__ParameterCS__Group__3__Impl ;
     public final void rule__ParameterCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12294:1: ( rule__ParameterCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12295:2: rule__ParameterCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12821:1: ( rule__ParameterCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12822:2: rule__ParameterCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__3__Impl_in_rule__ParameterCS__Group__325826);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group__3__Impl_in_rule__ParameterCS__Group__326719);
             rule__ParameterCS__Group__3__Impl();
 
             state._fsp--;
@@ -38559,33 +39654,33 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12301:1: rule__ParameterCS__Group__3__Impl : ( ( rule__ParameterCS__Group_3__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12828:1: rule__ParameterCS__Group__3__Impl : ( ( rule__ParameterCS__Group_3__0 )? ) ;
     public final void rule__ParameterCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12305:1: ( ( ( rule__ParameterCS__Group_3__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12306:1: ( ( rule__ParameterCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12832:1: ( ( ( rule__ParameterCS__Group_3__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12833:1: ( ( rule__ParameterCS__Group_3__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12306:1: ( ( rule__ParameterCS__Group_3__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12307:1: ( rule__ParameterCS__Group_3__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12833:1: ( ( rule__ParameterCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12834:1: ( rule__ParameterCS__Group_3__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getGroup_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12308:1: ( rule__ParameterCS__Group_3__0 )?
-            int alt147=2;
-            int LA147_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12835:1: ( rule__ParameterCS__Group_3__0 )?
+            int alt167=2;
+            int LA167_0 = input.LA(1);
 
-            if ( (LA147_0==99) ) {
-                alt147=1;
+            if ( (LA167_0==108) ) {
+                alt167=1;
             }
-            switch (alt147) {
+            switch (alt167) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12308:2: rule__ParameterCS__Group_3__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12835:2: rule__ParameterCS__Group_3__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__0_in_rule__ParameterCS__Group__3__Impl25853);
+                    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__0_in_rule__ParameterCS__Group__3__Impl26746);
                     rule__ParameterCS__Group_3__0();
 
                     state._fsp--;
@@ -38621,21 +39716,21 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12326:1: rule__ParameterCS__Group_1__0 : rule__ParameterCS__Group_1__0__Impl rule__ParameterCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12853:1: rule__ParameterCS__Group_1__0 : rule__ParameterCS__Group_1__0__Impl rule__ParameterCS__Group_1__1 ;
     public final void rule__ParameterCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12330:1: ( rule__ParameterCS__Group_1__0__Impl rule__ParameterCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12331:2: rule__ParameterCS__Group_1__0__Impl rule__ParameterCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12857:1: ( rule__ParameterCS__Group_1__0__Impl rule__ParameterCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12858:2: rule__ParameterCS__Group_1__0__Impl rule__ParameterCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_1__0__Impl_in_rule__ParameterCS__Group_1__025892);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_1__0__Impl_in_rule__ParameterCS__Group_1__026785);
             rule__ParameterCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_1__1_in_rule__ParameterCS__Group_1__025895);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_1__1_in_rule__ParameterCS__Group_1__026788);
             rule__ParameterCS__Group_1__1();
 
             state._fsp--;
@@ -38659,22 +39754,22 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12338:1: rule__ParameterCS__Group_1__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12865:1: rule__ParameterCS__Group_1__0__Impl : ( ':' ) ;
     public final void rule__ParameterCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12342:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12343:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12869:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12870:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12343:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12344:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12870:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12871:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getColonKeyword_1_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__ParameterCS__Group_1__0__Impl25923); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__ParameterCS__Group_1__0__Impl26816); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getParameterCSAccess().getColonKeyword_1_0()); 
             }
@@ -38700,16 +39795,16 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12357:1: rule__ParameterCS__Group_1__1 : rule__ParameterCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12884:1: rule__ParameterCS__Group_1__1 : rule__ParameterCS__Group_1__1__Impl ;
     public final void rule__ParameterCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12361:1: ( rule__ParameterCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12362:2: rule__ParameterCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12888:1: ( rule__ParameterCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12889:2: rule__ParameterCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_1__1__Impl_in_rule__ParameterCS__Group_1__125954);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_1__1__Impl_in_rule__ParameterCS__Group_1__126847);
             rule__ParameterCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -38733,25 +39828,25 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12368:1: rule__ParameterCS__Group_1__1__Impl : ( ( rule__ParameterCS__OwnedTypeAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12895:1: rule__ParameterCS__Group_1__1__Impl : ( ( rule__ParameterCS__OwnedTypeAssignment_1_1 ) ) ;
     public final void rule__ParameterCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12372:1: ( ( ( rule__ParameterCS__OwnedTypeAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12373:1: ( ( rule__ParameterCS__OwnedTypeAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12899:1: ( ( ( rule__ParameterCS__OwnedTypeAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12900:1: ( ( rule__ParameterCS__OwnedTypeAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12373:1: ( ( rule__ParameterCS__OwnedTypeAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12374:1: ( rule__ParameterCS__OwnedTypeAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12900:1: ( ( rule__ParameterCS__OwnedTypeAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12901:1: ( rule__ParameterCS__OwnedTypeAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getOwnedTypeAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12375:1: ( rule__ParameterCS__OwnedTypeAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12375:2: rule__ParameterCS__OwnedTypeAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12902:1: ( rule__ParameterCS__OwnedTypeAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12902:2: rule__ParameterCS__OwnedTypeAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__OwnedTypeAssignment_1_1_in_rule__ParameterCS__Group_1__1__Impl25981);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__OwnedTypeAssignment_1_1_in_rule__ParameterCS__Group_1__1__Impl26874);
             rule__ParameterCS__OwnedTypeAssignment_1_1();
 
             state._fsp--;
@@ -38783,23 +39878,23 @@
     // $ANTLR end "rule__ParameterCS__Group_1__1__Impl"
 
 
-    // $ANTLR start "rule__ParameterCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12389:1: rule__ParameterCS__Group_2__0 : rule__ParameterCS__Group_2__0__Impl rule__ParameterCS__Group_2__1 ;
-    public final void rule__ParameterCS__Group_2__0() throws RecognitionException {
+    // $ANTLR start "rule__ParameterCS__Group_2_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12916:1: rule__ParameterCS__Group_2_0__0 : rule__ParameterCS__Group_2_0__0__Impl rule__ParameterCS__Group_2_0__1 ;
+    public final void rule__ParameterCS__Group_2_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12393:1: ( rule__ParameterCS__Group_2__0__Impl rule__ParameterCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12394:2: rule__ParameterCS__Group_2__0__Impl rule__ParameterCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12920:1: ( rule__ParameterCS__Group_2_0__0__Impl rule__ParameterCS__Group_2_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12921:2: rule__ParameterCS__Group_2_0__0__Impl rule__ParameterCS__Group_2_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2__0__Impl_in_rule__ParameterCS__Group_2__026015);
-            rule__ParameterCS__Group_2__0__Impl();
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_0__0__Impl_in_rule__ParameterCS__Group_2_0__026908);
+            rule__ParameterCS__Group_2_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2__1_in_rule__ParameterCS__Group_2__026018);
-            rule__ParameterCS__Group_2__1();
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_0__1_in_rule__ParameterCS__Group_2_0__026911);
+            rule__ParameterCS__Group_2_0__1();
 
             state._fsp--;
             if (state.failed) return ;
@@ -38818,28 +39913,28 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ParameterCS__Group_2__0"
+    // $ANTLR end "rule__ParameterCS__Group_2_0__0"
 
 
-    // $ANTLR start "rule__ParameterCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12401:1: rule__ParameterCS__Group_2__0__Impl : ( '{' ) ;
-    public final void rule__ParameterCS__Group_2__0__Impl() throws RecognitionException {
+    // $ANTLR start "rule__ParameterCS__Group_2_0__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12928:1: rule__ParameterCS__Group_2_0__0__Impl : ( '{' ) ;
+    public final void rule__ParameterCS__Group_2_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12405:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12406:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12932:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12933:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12406:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12407:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12933:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12934:1: '{'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0()); 
+               before(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__ParameterCS__Group_2__0__Impl26046); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__ParameterCS__Group_2_0__0__Impl26939); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0()); 
+               after(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0_0()); 
             }
 
             }
@@ -38859,26 +39954,21 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ParameterCS__Group_2__0__Impl"
+    // $ANTLR end "rule__ParameterCS__Group_2_0__0__Impl"
 
 
-    // $ANTLR start "rule__ParameterCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12420:1: rule__ParameterCS__Group_2__1 : rule__ParameterCS__Group_2__1__Impl rule__ParameterCS__Group_2__2 ;
-    public final void rule__ParameterCS__Group_2__1() throws RecognitionException {
+    // $ANTLR start "rule__ParameterCS__Group_2_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12947:1: rule__ParameterCS__Group_2_0__1 : rule__ParameterCS__Group_2_0__1__Impl ;
+    public final void rule__ParameterCS__Group_2_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12424:1: ( rule__ParameterCS__Group_2__1__Impl rule__ParameterCS__Group_2__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12425:2: rule__ParameterCS__Group_2__1__Impl rule__ParameterCS__Group_2__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12951:1: ( rule__ParameterCS__Group_2_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12952:2: rule__ParameterCS__Group_2_0__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2__1__Impl_in_rule__ParameterCS__Group_2__126077);
-            rule__ParameterCS__Group_2__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2__2_in_rule__ParameterCS__Group_2__126080);
-            rule__ParameterCS__Group_2__2();
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_0__1__Impl_in_rule__ParameterCS__Group_2_0__126970);
+            rule__ParameterCS__Group_2_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
@@ -38897,33 +39987,130 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ParameterCS__Group_2__1"
+    // $ANTLR end "rule__ParameterCS__Group_2_0__1"
 
 
-    // $ANTLR start "rule__ParameterCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12432:1: rule__ParameterCS__Group_2__1__Impl : ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ( ( rule__ParameterCS__Group_2_1__0 )* ) ) ;
-    public final void rule__ParameterCS__Group_2__1__Impl() throws RecognitionException {
+    // $ANTLR start "rule__ParameterCS__Group_2_0__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12958:1: rule__ParameterCS__Group_2_0__1__Impl : ( ( rule__ParameterCS__Group_2_0_1__0 )? ) ;
+    public final void rule__ParameterCS__Group_2_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12436:1: ( ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ( ( rule__ParameterCS__Group_2_1__0 )* ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12437:1: ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ( ( rule__ParameterCS__Group_2_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12962:1: ( ( ( rule__ParameterCS__Group_2_0_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12963:1: ( ( rule__ParameterCS__Group_2_0_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12437:1: ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ( ( rule__ParameterCS__Group_2_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12438:1: ( ( rule__ParameterCS__Group_2_1__0 ) ) ( ( rule__ParameterCS__Group_2_1__0 )* )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12438:1: ( ( rule__ParameterCS__Group_2_1__0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12439:1: ( rule__ParameterCS__Group_2_1__0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12963:1: ( ( rule__ParameterCS__Group_2_0_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12964:1: ( rule__ParameterCS__Group_2_0_1__0 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getGroup_2_1()); 
+               before(grammarAccess.getParameterCSAccess().getGroup_2_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12440:1: ( rule__ParameterCS__Group_2_1__0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12440:2: rule__ParameterCS__Group_2_1__0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12965:1: ( rule__ParameterCS__Group_2_0_1__0 )?
+            int alt168=2;
+            int LA168_0 = input.LA(1);
+
+            if ( (LA168_0==37||LA168_0==56) ) {
+                alt168=1;
+            }
+            switch (alt168) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12965:2: rule__ParameterCS__Group_2_0_1__0
+                    {
+                    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_0_1__0_in_rule__ParameterCS__Group_2_0__1__Impl26997);
+                    rule__ParameterCS__Group_2_0_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getParameterCSAccess().getGroup_2_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__Group_2_0__1__Impl"
+
+
+    // $ANTLR start "rule__ParameterCS__Group_2_0_1__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12979:1: rule__ParameterCS__Group_2_0_1__0 : rule__ParameterCS__Group_2_0_1__0__Impl rule__ParameterCS__Group_2_0_1__1 ;
+    public final void rule__ParameterCS__Group_2_0_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12983:1: ( rule__ParameterCS__Group_2_0_1__0__Impl rule__ParameterCS__Group_2_0_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12984:2: rule__ParameterCS__Group_2_0_1__0__Impl rule__ParameterCS__Group_2_0_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1__0_in_rule__ParameterCS__Group_2__1__Impl26109);
-            rule__ParameterCS__Group_2_1__0();
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_0_1__0__Impl_in_rule__ParameterCS__Group_2_0_1__027032);
+            rule__ParameterCS__Group_2_0_1__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_0_1__1_in_rule__ParameterCS__Group_2_0_1__027035);
+            rule__ParameterCS__Group_2_0_1__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__Group_2_0_1__0"
+
+
+    // $ANTLR start "rule__ParameterCS__Group_2_0_1__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12991:1: rule__ParameterCS__Group_2_0_1__0__Impl : ( ( rule__ParameterCS__Alternatives_2_0_1_0 ) ) ;
+    public final void rule__ParameterCS__Group_2_0_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12995:1: ( ( ( rule__ParameterCS__Alternatives_2_0_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12996:1: ( ( rule__ParameterCS__Alternatives_2_0_1_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12996:1: ( ( rule__ParameterCS__Alternatives_2_0_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12997:1: ( rule__ParameterCS__Alternatives_2_0_1_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getParameterCSAccess().getAlternatives_2_0_1_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12998:1: ( rule__ParameterCS__Alternatives_2_0_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12998:2: rule__ParameterCS__Alternatives_2_0_1_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Alternatives_2_0_1_0_in_rule__ParameterCS__Group_2_0_1__0__Impl27062);
+            rule__ParameterCS__Alternatives_2_0_1_0();
 
             state._fsp--;
             if (state.failed) return ;
@@ -38931,125 +40118,120 @@
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getGroup_2_1()); 
+               after(grammarAccess.getParameterCSAccess().getAlternatives_2_0_1_0()); 
             }
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12443:1: ( ( rule__ParameterCS__Group_2_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12444:1: ( rule__ParameterCS__Group_2_1__0 )*
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__Group_2_0_1__0__Impl"
+
+
+    // $ANTLR start "rule__ParameterCS__Group_2_0_1__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13008:1: rule__ParameterCS__Group_2_0_1__1 : rule__ParameterCS__Group_2_0_1__1__Impl ;
+    public final void rule__ParameterCS__Group_2_0_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13012:1: ( rule__ParameterCS__Group_2_0_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13013:2: rule__ParameterCS__Group_2_0_1__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_0_1__1__Impl_in_rule__ParameterCS__Group_2_0_1__127092);
+            rule__ParameterCS__Group_2_0_1__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__Group_2_0_1__1"
+
+
+    // $ANTLR start "rule__ParameterCS__Group_2_0_1__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13019:1: rule__ParameterCS__Group_2_0_1__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ParameterCS__Group_2_0_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13023:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13024:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13024:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13025:1: ( ',' )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getGroup_2_1()); 
+               before(grammarAccess.getParameterCSAccess().getCommaKeyword_2_0_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12445:1: ( rule__ParameterCS__Group_2_1__0 )*
-            loop148:
-            do {
-                int alt148=2;
-                int LA148_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13026:1: ( ',' )?
+            int alt169=2;
+            int LA169_0 = input.LA(1);
 
-                if ( (LA148_0==37||LA148_0==50||LA148_0==122||LA148_0==125) ) {
-                    alt148=1;
+            if ( (LA169_0==107) ) {
+                int LA169_1 = input.LA(2);
+
+                if ( (LA169_1==50) ) {
+                    int LA169_3 = input.LA(3);
+
+                    if ( (LA169_3==107) ) {
+                        int LA169_5 = input.LA(4);
+
+                        if ( (LA169_5==109) ) {
+                            alt169=1;
+                        }
+                    }
+                    else if ( (LA169_3==109) ) {
+                        int LA169_6 = input.LA(4);
+
+                        if ( (synpred263_InternalOCLinEcore()) ) {
+                            alt169=1;
+                        }
+                    }
                 }
-
-
-                switch (alt148) {
-            	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12445:2: rule__ParameterCS__Group_2_1__0
-            	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1__0_in_rule__ParameterCS__Group_2__1__Impl26121);
-            	    rule__ParameterCS__Group_2_1__0();
-
-            	    state._fsp--;
-            	    if (state.failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop148;
+                else if ( (LA169_1==EOF||LA169_1==105||(LA169_1>=107 && LA169_1<=109)||LA169_1==129) ) {
+                    alt169=1;
                 }
-            } while (true);
+            }
+            switch (alt169) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13027:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ParameterCS__Group_2_0_1__1__Impl27121); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getGroup_2_1()); 
-            }
-
-            }
-
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ParameterCS__Group_2__1__Impl"
-
-
-    // $ANTLR start "rule__ParameterCS__Group_2__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12456:1: rule__ParameterCS__Group_2__2 : rule__ParameterCS__Group_2__2__Impl ;
-    public final void rule__ParameterCS__Group_2__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12460:1: ( rule__ParameterCS__Group_2__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12461:2: rule__ParameterCS__Group_2__2__Impl
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2__2__Impl_in_rule__ParameterCS__Group_2__226154);
-            rule__ParameterCS__Group_2__2__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ParameterCS__Group_2__2"
-
-
-    // $ANTLR start "rule__ParameterCS__Group_2__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12467:1: rule__ParameterCS__Group_2__2__Impl : ( '}' ) ;
-    public final void rule__ParameterCS__Group_2__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12471:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12472:1: ( '}' )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12472:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12473:1: '}'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_2()); 
-            }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__ParameterCS__Group_2__2__Impl26182); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_2()); 
+               after(grammarAccess.getParameterCSAccess().getCommaKeyword_2_0_1_1()); 
             }
 
             }
@@ -39069,25 +40251,25 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ParameterCS__Group_2__2__Impl"
+    // $ANTLR end "rule__ParameterCS__Group_2_0_1__1__Impl"
 
 
     // $ANTLR start "rule__ParameterCS__Group_2_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12492:1: rule__ParameterCS__Group_2_1__0 : rule__ParameterCS__Group_2_1__0__Impl rule__ParameterCS__Group_2_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13042:1: rule__ParameterCS__Group_2_1__0 : rule__ParameterCS__Group_2_1__0__Impl rule__ParameterCS__Group_2_1__1 ;
     public final void rule__ParameterCS__Group_2_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12496:1: ( rule__ParameterCS__Group_2_1__0__Impl rule__ParameterCS__Group_2_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12497:2: rule__ParameterCS__Group_2_1__0__Impl rule__ParameterCS__Group_2_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13046:1: ( rule__ParameterCS__Group_2_1__0__Impl rule__ParameterCS__Group_2_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13047:2: rule__ParameterCS__Group_2_1__0__Impl rule__ParameterCS__Group_2_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1__0__Impl_in_rule__ParameterCS__Group_2_1__026219);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1__0__Impl_in_rule__ParameterCS__Group_2_1__027158);
             rule__ParameterCS__Group_2_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1__1_in_rule__ParameterCS__Group_2_1__026222);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1__1_in_rule__ParameterCS__Group_2_1__027161);
             rule__ParameterCS__Group_2_1__1();
 
             state._fsp--;
@@ -39111,34 +40293,45 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_2_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12504:1: rule__ParameterCS__Group_2_1__0__Impl : ( ( rule__ParameterCS__Alternatives_2_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13054:1: rule__ParameterCS__Group_2_1__0__Impl : ( ( rule__ParameterCS__Group_2_1_0__0 )? ) ;
     public final void rule__ParameterCS__Group_2_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12508:1: ( ( ( rule__ParameterCS__Alternatives_2_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12509:1: ( ( rule__ParameterCS__Alternatives_2_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13058:1: ( ( ( rule__ParameterCS__Group_2_1_0__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13059:1: ( ( rule__ParameterCS__Group_2_1_0__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12509:1: ( ( rule__ParameterCS__Alternatives_2_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12510:1: ( rule__ParameterCS__Alternatives_2_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13059:1: ( ( rule__ParameterCS__Group_2_1_0__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13060:1: ( rule__ParameterCS__Group_2_1_0__0 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0()); 
+               before(grammarAccess.getParameterCSAccess().getGroup_2_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12511:1: ( rule__ParameterCS__Alternatives_2_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12511:2: rule__ParameterCS__Alternatives_2_1_0
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Alternatives_2_1_0_in_rule__ParameterCS__Group_2_1__0__Impl26249);
-            rule__ParameterCS__Alternatives_2_1_0();
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13061:1: ( rule__ParameterCS__Group_2_1_0__0 )?
+            int alt170=2;
+            int LA170_0 = input.LA(1);
 
-            state._fsp--;
-            if (state.failed) return ;
+            if ( (LA170_0==50||LA170_0==129) ) {
+                alt170=1;
+            }
+            switch (alt170) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13061:2: rule__ParameterCS__Group_2_1_0__0
+                    {
+                    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1_0__0_in_rule__ParameterCS__Group_2_1__0__Impl27188);
+                    rule__ParameterCS__Group_2_1_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0()); 
+               after(grammarAccess.getParameterCSAccess().getGroup_2_1_0()); 
             }
 
             }
@@ -39162,16 +40355,16 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_2_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12521:1: rule__ParameterCS__Group_2_1__1 : rule__ParameterCS__Group_2_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13071:1: rule__ParameterCS__Group_2_1__1 : rule__ParameterCS__Group_2_1__1__Impl ;
     public final void rule__ParameterCS__Group_2_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12525:1: ( rule__ParameterCS__Group_2_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12526:2: rule__ParameterCS__Group_2_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13075:1: ( rule__ParameterCS__Group_2_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13076:2: rule__ParameterCS__Group_2_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1__1__Impl_in_rule__ParameterCS__Group_2_1__126279);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1__1__Impl_in_rule__ParameterCS__Group_2_1__127219);
             rule__ParameterCS__Group_2_1__1__Impl();
 
             state._fsp--;
@@ -39195,41 +40388,24 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_2_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12532:1: rule__ParameterCS__Group_2_1__1__Impl : ( ( ',' )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13082:1: rule__ParameterCS__Group_2_1__1__Impl : ( '}' ) ;
     public final void rule__ParameterCS__Group_2_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12536:1: ( ( ( ',' )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12537:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13086:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13087:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12537:1: ( ( ',' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12538:1: ( ',' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13087:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13088:1: '}'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_1()); 
+               before(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12539:1: ( ',' )?
-            int alt149=2;
-            int LA149_0 = input.LA(1);
-
-            if ( (LA149_0==98) ) {
-                alt149=1;
-            }
-            switch (alt149) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12540:2: ','
-                    {
-                    match(input,98,FollowSets001.FOLLOW_98_in_rule__ParameterCS__Group_2_1__1__Impl26308); if (state.failed) return ;
-
-                    }
-                    break;
-
-            }
-
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__ParameterCS__Group_2_1__1__Impl27247); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_1()); 
+               after(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_1_1()); 
             }
 
             }
@@ -39252,22 +40428,202 @@
     // $ANTLR end "rule__ParameterCS__Group_2_1__1__Impl"
 
 
+    // $ANTLR start "rule__ParameterCS__Group_2_1_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13105:1: rule__ParameterCS__Group_2_1_0__0 : rule__ParameterCS__Group_2_1_0__0__Impl rule__ParameterCS__Group_2_1_0__1 ;
+    public final void rule__ParameterCS__Group_2_1_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13109:1: ( rule__ParameterCS__Group_2_1_0__0__Impl rule__ParameterCS__Group_2_1_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13110:2: rule__ParameterCS__Group_2_1_0__0__Impl rule__ParameterCS__Group_2_1_0__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1_0__0__Impl_in_rule__ParameterCS__Group_2_1_0__027282);
+            rule__ParameterCS__Group_2_1_0__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1_0__1_in_rule__ParameterCS__Group_2_1_0__027285);
+            rule__ParameterCS__Group_2_1_0__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__Group_2_1_0__0"
+
+
+    // $ANTLR start "rule__ParameterCS__Group_2_1_0__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13117:1: rule__ParameterCS__Group_2_1_0__0__Impl : ( ( rule__ParameterCS__Alternatives_2_1_0_0 ) ) ;
+    public final void rule__ParameterCS__Group_2_1_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13121:1: ( ( ( rule__ParameterCS__Alternatives_2_1_0_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13122:1: ( ( rule__ParameterCS__Alternatives_2_1_0_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13122:1: ( ( rule__ParameterCS__Alternatives_2_1_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13123:1: ( rule__ParameterCS__Alternatives_2_1_0_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13124:1: ( rule__ParameterCS__Alternatives_2_1_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13124:2: rule__ParameterCS__Alternatives_2_1_0_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Alternatives_2_1_0_0_in_rule__ParameterCS__Group_2_1_0__0__Impl27312);
+            rule__ParameterCS__Alternatives_2_1_0_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getParameterCSAccess().getAlternatives_2_1_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__Group_2_1_0__0__Impl"
+
+
+    // $ANTLR start "rule__ParameterCS__Group_2_1_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13134:1: rule__ParameterCS__Group_2_1_0__1 : rule__ParameterCS__Group_2_1_0__1__Impl ;
+    public final void rule__ParameterCS__Group_2_1_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13138:1: ( rule__ParameterCS__Group_2_1_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13139:2: rule__ParameterCS__Group_2_1_0__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_2_1_0__1__Impl_in_rule__ParameterCS__Group_2_1_0__127342);
+            rule__ParameterCS__Group_2_1_0__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__Group_2_1_0__1"
+
+
+    // $ANTLR start "rule__ParameterCS__Group_2_1_0__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13145:1: rule__ParameterCS__Group_2_1_0__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ParameterCS__Group_2_1_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13149:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13150:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13150:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13151:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_0_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13152:1: ( ',' )?
+            int alt171=2;
+            int LA171_0 = input.LA(1);
+
+            if ( (LA171_0==107) ) {
+                alt171=1;
+            }
+            switch (alt171) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13153:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ParameterCS__Group_2_1_0__1__Impl27371); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__Group_2_1_0__1__Impl"
+
+
     // $ANTLR start "rule__ParameterCS__Group_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12555:1: rule__ParameterCS__Group_3__0 : rule__ParameterCS__Group_3__0__Impl rule__ParameterCS__Group_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13168:1: rule__ParameterCS__Group_3__0 : rule__ParameterCS__Group_3__0__Impl rule__ParameterCS__Group_3__1 ;
     public final void rule__ParameterCS__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12559:1: ( rule__ParameterCS__Group_3__0__Impl rule__ParameterCS__Group_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12560:2: rule__ParameterCS__Group_3__0__Impl rule__ParameterCS__Group_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13172:1: ( rule__ParameterCS__Group_3__0__Impl rule__ParameterCS__Group_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13173:2: rule__ParameterCS__Group_3__0__Impl rule__ParameterCS__Group_3__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__0__Impl_in_rule__ParameterCS__Group_3__026345);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__0__Impl_in_rule__ParameterCS__Group_3__027408);
             rule__ParameterCS__Group_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__1_in_rule__ParameterCS__Group_3__026348);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__1_in_rule__ParameterCS__Group_3__027411);
             rule__ParameterCS__Group_3__1();
 
             state._fsp--;
@@ -39291,22 +40647,22 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12567:1: rule__ParameterCS__Group_3__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13180:1: rule__ParameterCS__Group_3__0__Impl : ( '{' ) ;
     public final void rule__ParameterCS__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12571:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12572:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13184:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13185:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12572:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12573:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13185:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13186:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_3_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__ParameterCS__Group_3__0__Impl26376); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__ParameterCS__Group_3__0__Impl27439); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_3_0()); 
             }
@@ -39332,21 +40688,21 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12586:1: rule__ParameterCS__Group_3__1 : rule__ParameterCS__Group_3__1__Impl rule__ParameterCS__Group_3__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13199:1: rule__ParameterCS__Group_3__1 : rule__ParameterCS__Group_3__1__Impl rule__ParameterCS__Group_3__2 ;
     public final void rule__ParameterCS__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12590:1: ( rule__ParameterCS__Group_3__1__Impl rule__ParameterCS__Group_3__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12591:2: rule__ParameterCS__Group_3__1__Impl rule__ParameterCS__Group_3__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13203:1: ( rule__ParameterCS__Group_3__1__Impl rule__ParameterCS__Group_3__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13204:2: rule__ParameterCS__Group_3__1__Impl rule__ParameterCS__Group_3__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__1__Impl_in_rule__ParameterCS__Group_3__126407);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__1__Impl_in_rule__ParameterCS__Group_3__127470);
             rule__ParameterCS__Group_3__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__2_in_rule__ParameterCS__Group_3__126410);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__2_in_rule__ParameterCS__Group_3__127473);
             rule__ParameterCS__Group_3__2();
 
             state._fsp--;
@@ -39370,37 +40726,37 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12598:1: rule__ParameterCS__Group_3__1__Impl : ( ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13211:1: rule__ParameterCS__Group_3__1__Impl : ( ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )* ) ;
     public final void rule__ParameterCS__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12602:1: ( ( ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12603:1: ( ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13215:1: ( ( ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13216:1: ( ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12603:1: ( ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12604:1: ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13216:1: ( ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13217:1: ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getOwnedAnnotationsAssignment_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12605:1: ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )*
-            loop150:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13218:1: ( rule__ParameterCS__OwnedAnnotationsAssignment_3_1 )*
+            loop172:
             do {
-                int alt150=2;
-                int LA150_0 = input.LA(1);
+                int alt172=2;
+                int LA172_0 = input.LA(1);
 
-                if ( ((LA150_0>=55 && LA150_0<=56)||LA150_0==60) ) {
-                    alt150=1;
+                if ( ((LA172_0>=64 && LA172_0<=65)||LA172_0==69) ) {
+                    alt172=1;
                 }
 
 
-                switch (alt150) {
+                switch (alt172) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12605:2: rule__ParameterCS__OwnedAnnotationsAssignment_3_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13218:2: rule__ParameterCS__OwnedAnnotationsAssignment_3_1
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__OwnedAnnotationsAssignment_3_1_in_rule__ParameterCS__Group_3__1__Impl26437);
+            	    pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__OwnedAnnotationsAssignment_3_1_in_rule__ParameterCS__Group_3__1__Impl27500);
             	    rule__ParameterCS__OwnedAnnotationsAssignment_3_1();
 
             	    state._fsp--;
@@ -39410,7 +40766,7 @@
             	    break;
 
             	default :
-            	    break loop150;
+            	    break loop172;
                 }
             } while (true);
 
@@ -39439,16 +40795,16 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_3__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12615:1: rule__ParameterCS__Group_3__2 : rule__ParameterCS__Group_3__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13228:1: rule__ParameterCS__Group_3__2 : rule__ParameterCS__Group_3__2__Impl ;
     public final void rule__ParameterCS__Group_3__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12619:1: ( rule__ParameterCS__Group_3__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12620:2: rule__ParameterCS__Group_3__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13232:1: ( rule__ParameterCS__Group_3__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13233:2: rule__ParameterCS__Group_3__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__2__Impl_in_rule__ParameterCS__Group_3__226468);
+            pushFollow(FollowSets001.FOLLOW_rule__ParameterCS__Group_3__2__Impl_in_rule__ParameterCS__Group_3__227531);
             rule__ParameterCS__Group_3__2__Impl();
 
             state._fsp--;
@@ -39472,22 +40828,22 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group_3__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12626:1: rule__ParameterCS__Group_3__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13239:1: rule__ParameterCS__Group_3__2__Impl : ( '}' ) ;
     public final void rule__ParameterCS__Group_3__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12630:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12631:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13243:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13244:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12631:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12632:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13244:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13245:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_3_2()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__ParameterCS__Group_3__2__Impl26496); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__ParameterCS__Group_3__2__Impl27559); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_3_2()); 
             }
@@ -39513,21 +40869,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12651:1: rule__ReferenceCS__Group__0 : rule__ReferenceCS__Group__0__Impl rule__ReferenceCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13264:1: rule__ReferenceCS__Group__0 : rule__ReferenceCS__Group__0__Impl rule__ReferenceCS__Group__1 ;
     public final void rule__ReferenceCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12655:1: ( rule__ReferenceCS__Group__0__Impl rule__ReferenceCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12656:2: rule__ReferenceCS__Group__0__Impl rule__ReferenceCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13268:1: ( rule__ReferenceCS__Group__0__Impl rule__ReferenceCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13269:2: rule__ReferenceCS__Group__0__Impl rule__ReferenceCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__0__Impl_in_rule__ReferenceCS__Group__026533);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__0__Impl_in_rule__ReferenceCS__Group__027596);
             rule__ReferenceCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__1_in_rule__ReferenceCS__Group__026536);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__1_in_rule__ReferenceCS__Group__027599);
             rule__ReferenceCS__Group__1();
 
             state._fsp--;
@@ -39551,45 +40907,34 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12663:1: rule__ReferenceCS__Group__0__Impl : ( ( rule__ReferenceCS__Alternatives_0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13276:1: rule__ReferenceCS__Group__0__Impl : ( ( rule__ReferenceCS__UnorderedGroup_0 ) ) ;
     public final void rule__ReferenceCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12667:1: ( ( ( rule__ReferenceCS__Alternatives_0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12668:1: ( ( rule__ReferenceCS__Alternatives_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13280:1: ( ( ( rule__ReferenceCS__UnorderedGroup_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13281:1: ( ( rule__ReferenceCS__UnorderedGroup_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12668:1: ( ( rule__ReferenceCS__Alternatives_0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12669:1: ( rule__ReferenceCS__Alternatives_0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13281:1: ( ( rule__ReferenceCS__UnorderedGroup_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13282:1: ( rule__ReferenceCS__UnorderedGroup_0 )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getAlternatives_0()); 
+               before(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12670:1: ( rule__ReferenceCS__Alternatives_0 )?
-            int alt151=2;
-            int LA151_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13283:1: ( rule__ReferenceCS__UnorderedGroup_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13283:2: rule__ReferenceCS__UnorderedGroup_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__UnorderedGroup_0_in_rule__ReferenceCS__Group__0__Impl27626);
+            rule__ReferenceCS__UnorderedGroup_0();
 
-            if ( (LA151_0==24||LA151_0==46) ) {
-                alt151=1;
-            }
-            switch (alt151) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12670:2: rule__ReferenceCS__Alternatives_0
-                    {
-                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_0_in_rule__ReferenceCS__Group__0__Impl26563);
-                    rule__ReferenceCS__Alternatives_0();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-                    break;
+            state._fsp--;
+            if (state.failed) return ;
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getAlternatives_0()); 
+               after(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0()); 
             }
 
             }
@@ -39613,21 +40958,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12680:1: rule__ReferenceCS__Group__1 : rule__ReferenceCS__Group__1__Impl rule__ReferenceCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13293:1: rule__ReferenceCS__Group__1 : rule__ReferenceCS__Group__1__Impl rule__ReferenceCS__Group__2 ;
     public final void rule__ReferenceCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12684:1: ( rule__ReferenceCS__Group__1__Impl rule__ReferenceCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12685:2: rule__ReferenceCS__Group__1__Impl rule__ReferenceCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13297:1: ( rule__ReferenceCS__Group__1__Impl rule__ReferenceCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13298:2: rule__ReferenceCS__Group__1__Impl rule__ReferenceCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__1__Impl_in_rule__ReferenceCS__Group__126594);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__1__Impl_in_rule__ReferenceCS__Group__127656);
             rule__ReferenceCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__2_in_rule__ReferenceCS__Group__126597);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__2_in_rule__ReferenceCS__Group__127659);
             rule__ReferenceCS__Group__2();
 
             state._fsp--;
@@ -39651,22 +40996,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12692:1: rule__ReferenceCS__Group__1__Impl : ( 'property' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13305:1: rule__ReferenceCS__Group__1__Impl : ( 'property' ) ;
     public final void rule__ReferenceCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12696:1: ( ( 'property' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12697:1: ( 'property' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13309:1: ( ( 'property' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13310:1: ( 'property' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12697:1: ( 'property' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12698:1: 'property'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13310:1: ( 'property' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13311:1: 'property'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getPropertyKeyword_1()); 
             }
-            match(input,42,FollowSets001.FOLLOW_42_in_rule__ReferenceCS__Group__1__Impl26625); if (state.failed) return ;
+            match(input,42,FollowSets001.FOLLOW_42_in_rule__ReferenceCS__Group__1__Impl27687); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getPropertyKeyword_1()); 
             }
@@ -39692,21 +41037,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12711:1: rule__ReferenceCS__Group__2 : rule__ReferenceCS__Group__2__Impl rule__ReferenceCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13324:1: rule__ReferenceCS__Group__2 : rule__ReferenceCS__Group__2__Impl rule__ReferenceCS__Group__3 ;
     public final void rule__ReferenceCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12715:1: ( rule__ReferenceCS__Group__2__Impl rule__ReferenceCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12716:2: rule__ReferenceCS__Group__2__Impl rule__ReferenceCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13328:1: ( rule__ReferenceCS__Group__2__Impl rule__ReferenceCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13329:2: rule__ReferenceCS__Group__2__Impl rule__ReferenceCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__2__Impl_in_rule__ReferenceCS__Group__226656);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__2__Impl_in_rule__ReferenceCS__Group__227718);
             rule__ReferenceCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__3_in_rule__ReferenceCS__Group__226659);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__3_in_rule__ReferenceCS__Group__227721);
             rule__ReferenceCS__Group__3();
 
             state._fsp--;
@@ -39730,25 +41075,25 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12723:1: rule__ReferenceCS__Group__2__Impl : ( ( rule__ReferenceCS__NameAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13336:1: rule__ReferenceCS__Group__2__Impl : ( ( rule__ReferenceCS__NameAssignment_2 ) ) ;
     public final void rule__ReferenceCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12727:1: ( ( ( rule__ReferenceCS__NameAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12728:1: ( ( rule__ReferenceCS__NameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13340:1: ( ( ( rule__ReferenceCS__NameAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13341:1: ( ( rule__ReferenceCS__NameAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12728:1: ( ( rule__ReferenceCS__NameAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12729:1: ( rule__ReferenceCS__NameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13341:1: ( ( rule__ReferenceCS__NameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13342:1: ( rule__ReferenceCS__NameAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getNameAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12730:1: ( rule__ReferenceCS__NameAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12730:2: rule__ReferenceCS__NameAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13343:1: ( rule__ReferenceCS__NameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13343:2: rule__ReferenceCS__NameAssignment_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__NameAssignment_2_in_rule__ReferenceCS__Group__2__Impl26686);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__NameAssignment_2_in_rule__ReferenceCS__Group__2__Impl27748);
             rule__ReferenceCS__NameAssignment_2();
 
             state._fsp--;
@@ -39781,21 +41126,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12740:1: rule__ReferenceCS__Group__3 : rule__ReferenceCS__Group__3__Impl rule__ReferenceCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13353:1: rule__ReferenceCS__Group__3 : rule__ReferenceCS__Group__3__Impl rule__ReferenceCS__Group__4 ;
     public final void rule__ReferenceCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12744:1: ( rule__ReferenceCS__Group__3__Impl rule__ReferenceCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12745:2: rule__ReferenceCS__Group__3__Impl rule__ReferenceCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13357:1: ( rule__ReferenceCS__Group__3__Impl rule__ReferenceCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13358:2: rule__ReferenceCS__Group__3__Impl rule__ReferenceCS__Group__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__3__Impl_in_rule__ReferenceCS__Group__326716);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__3__Impl_in_rule__ReferenceCS__Group__327778);
             rule__ReferenceCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__4_in_rule__ReferenceCS__Group__326719);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__4_in_rule__ReferenceCS__Group__327781);
             rule__ReferenceCS__Group__4();
 
             state._fsp--;
@@ -39819,33 +41164,33 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12752:1: rule__ReferenceCS__Group__3__Impl : ( ( rule__ReferenceCS__Group_3__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13365:1: rule__ReferenceCS__Group__3__Impl : ( ( rule__ReferenceCS__Group_3__0 )? ) ;
     public final void rule__ReferenceCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12756:1: ( ( ( rule__ReferenceCS__Group_3__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12757:1: ( ( rule__ReferenceCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13369:1: ( ( ( rule__ReferenceCS__Group_3__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13370:1: ( ( rule__ReferenceCS__Group_3__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12757:1: ( ( rule__ReferenceCS__Group_3__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12758:1: ( rule__ReferenceCS__Group_3__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13370:1: ( ( rule__ReferenceCS__Group_3__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13371:1: ( rule__ReferenceCS__Group_3__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getGroup_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12759:1: ( rule__ReferenceCS__Group_3__0 )?
-            int alt152=2;
-            int LA152_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13372:1: ( rule__ReferenceCS__Group_3__0 )?
+            int alt173=2;
+            int LA173_0 = input.LA(1);
 
-            if ( (LA152_0==101) ) {
-                alt152=1;
+            if ( (LA173_0==110) ) {
+                alt173=1;
             }
-            switch (alt152) {
+            switch (alt173) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12759:2: rule__ReferenceCS__Group_3__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13372:2: rule__ReferenceCS__Group_3__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_3__0_in_rule__ReferenceCS__Group__3__Impl26746);
+                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_3__0_in_rule__ReferenceCS__Group__3__Impl27808);
                     rule__ReferenceCS__Group_3__0();
 
                     state._fsp--;
@@ -39881,21 +41226,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12769:1: rule__ReferenceCS__Group__4 : rule__ReferenceCS__Group__4__Impl rule__ReferenceCS__Group__5 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13382:1: rule__ReferenceCS__Group__4 : rule__ReferenceCS__Group__4__Impl rule__ReferenceCS__Group__5 ;
     public final void rule__ReferenceCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12773:1: ( rule__ReferenceCS__Group__4__Impl rule__ReferenceCS__Group__5 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12774:2: rule__ReferenceCS__Group__4__Impl rule__ReferenceCS__Group__5
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13386:1: ( rule__ReferenceCS__Group__4__Impl rule__ReferenceCS__Group__5 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13387:2: rule__ReferenceCS__Group__4__Impl rule__ReferenceCS__Group__5
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__4__Impl_in_rule__ReferenceCS__Group__426777);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__4__Impl_in_rule__ReferenceCS__Group__427839);
             rule__ReferenceCS__Group__4__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__5_in_rule__ReferenceCS__Group__426780);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__5_in_rule__ReferenceCS__Group__427842);
             rule__ReferenceCS__Group__5();
 
             state._fsp--;
@@ -39919,33 +41264,33 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12781:1: rule__ReferenceCS__Group__4__Impl : ( ( rule__ReferenceCS__Group_4__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13394:1: rule__ReferenceCS__Group__4__Impl : ( ( rule__ReferenceCS__Group_4__0 )? ) ;
     public final void rule__ReferenceCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12785:1: ( ( ( rule__ReferenceCS__Group_4__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12786:1: ( ( rule__ReferenceCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13398:1: ( ( ( rule__ReferenceCS__Group_4__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13399:1: ( ( rule__ReferenceCS__Group_4__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12786:1: ( ( rule__ReferenceCS__Group_4__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12787:1: ( rule__ReferenceCS__Group_4__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13399:1: ( ( rule__ReferenceCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13400:1: ( rule__ReferenceCS__Group_4__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getGroup_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12788:1: ( rule__ReferenceCS__Group_4__0 )?
-            int alt153=2;
-            int LA153_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13401:1: ( rule__ReferenceCS__Group_4__0 )?
+            int alt174=2;
+            int LA174_0 = input.LA(1);
 
-            if ( (LA153_0==97) ) {
-                alt153=1;
+            if ( (LA174_0==106) ) {
+                alt174=1;
             }
-            switch (alt153) {
+            switch (alt174) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12788:2: rule__ReferenceCS__Group_4__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13401:2: rule__ReferenceCS__Group_4__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_4__0_in_rule__ReferenceCS__Group__4__Impl26807);
+                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_4__0_in_rule__ReferenceCS__Group__4__Impl27869);
                     rule__ReferenceCS__Group_4__0();
 
                     state._fsp--;
@@ -39981,21 +41326,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12798:1: rule__ReferenceCS__Group__5 : rule__ReferenceCS__Group__5__Impl rule__ReferenceCS__Group__6 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13411:1: rule__ReferenceCS__Group__5 : rule__ReferenceCS__Group__5__Impl rule__ReferenceCS__Group__6 ;
     public final void rule__ReferenceCS__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12802:1: ( rule__ReferenceCS__Group__5__Impl rule__ReferenceCS__Group__6 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12803:2: rule__ReferenceCS__Group__5__Impl rule__ReferenceCS__Group__6
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13415:1: ( rule__ReferenceCS__Group__5__Impl rule__ReferenceCS__Group__6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13416:2: rule__ReferenceCS__Group__5__Impl rule__ReferenceCS__Group__6
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__5__Impl_in_rule__ReferenceCS__Group__526838);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__5__Impl_in_rule__ReferenceCS__Group__527900);
             rule__ReferenceCS__Group__5__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__6_in_rule__ReferenceCS__Group__526841);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__6_in_rule__ReferenceCS__Group__527903);
             rule__ReferenceCS__Group__6();
 
             state._fsp--;
@@ -40019,33 +41364,33 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__5__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12810:1: rule__ReferenceCS__Group__5__Impl : ( ( rule__ReferenceCS__Group_5__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13423:1: rule__ReferenceCS__Group__5__Impl : ( ( rule__ReferenceCS__Group_5__0 )? ) ;
     public final void rule__ReferenceCS__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12814:1: ( ( ( rule__ReferenceCS__Group_5__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12815:1: ( ( rule__ReferenceCS__Group_5__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13427:1: ( ( ( rule__ReferenceCS__Group_5__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13428:1: ( ( rule__ReferenceCS__Group_5__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12815:1: ( ( rule__ReferenceCS__Group_5__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12816:1: ( rule__ReferenceCS__Group_5__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13428:1: ( ( rule__ReferenceCS__Group_5__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13429:1: ( rule__ReferenceCS__Group_5__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getGroup_5()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12817:1: ( rule__ReferenceCS__Group_5__0 )?
-            int alt154=2;
-            int LA154_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13430:1: ( rule__ReferenceCS__Group_5__0 )?
+            int alt175=2;
+            int LA175_0 = input.LA(1);
 
-            if ( (LA154_0==70) ) {
-                alt154=1;
+            if ( (LA175_0==79) ) {
+                alt175=1;
             }
-            switch (alt154) {
+            switch (alt175) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12817:2: rule__ReferenceCS__Group_5__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13430:2: rule__ReferenceCS__Group_5__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_5__0_in_rule__ReferenceCS__Group__5__Impl26868);
+                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_5__0_in_rule__ReferenceCS__Group__5__Impl27930);
                     rule__ReferenceCS__Group_5__0();
 
                     state._fsp--;
@@ -40081,21 +41426,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12827:1: rule__ReferenceCS__Group__6 : rule__ReferenceCS__Group__6__Impl rule__ReferenceCS__Group__7 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13440:1: rule__ReferenceCS__Group__6 : rule__ReferenceCS__Group__6__Impl rule__ReferenceCS__Group__7 ;
     public final void rule__ReferenceCS__Group__6() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12831:1: ( rule__ReferenceCS__Group__6__Impl rule__ReferenceCS__Group__7 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12832:2: rule__ReferenceCS__Group__6__Impl rule__ReferenceCS__Group__7
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13444:1: ( rule__ReferenceCS__Group__6__Impl rule__ReferenceCS__Group__7 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13445:2: rule__ReferenceCS__Group__6__Impl rule__ReferenceCS__Group__7
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__6__Impl_in_rule__ReferenceCS__Group__626899);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__6__Impl_in_rule__ReferenceCS__Group__627961);
             rule__ReferenceCS__Group__6__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__7_in_rule__ReferenceCS__Group__626902);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__7_in_rule__ReferenceCS__Group__627964);
             rule__ReferenceCS__Group__7();
 
             state._fsp--;
@@ -40119,38 +41464,30 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__6__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12839:1: rule__ReferenceCS__Group__6__Impl : ( ( rule__ReferenceCS__Group_6__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13452:1: rule__ReferenceCS__Group__6__Impl : ( ( rule__ReferenceCS__UnorderedGroup_6 )? ) ;
     public final void rule__ReferenceCS__Group__6__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12843:1: ( ( ( rule__ReferenceCS__Group_6__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12844:1: ( ( rule__ReferenceCS__Group_6__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13456:1: ( ( ( rule__ReferenceCS__UnorderedGroup_6 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13457:1: ( ( rule__ReferenceCS__UnorderedGroup_6 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12844:1: ( ( rule__ReferenceCS__Group_6__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12845:1: ( rule__ReferenceCS__Group_6__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13457:1: ( ( rule__ReferenceCS__UnorderedGroup_6 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13458:1: ( rule__ReferenceCS__UnorderedGroup_6 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getGroup_6()); 
+               before(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12846:1: ( rule__ReferenceCS__Group_6__0 )?
-            int alt155=2;
-            int LA155_0 = input.LA(1);
-
-            if ( (LA155_0==99) ) {
-                int LA155_1 = input.LA(2);
-
-                if ( (LA155_1==22||LA155_1==26||LA155_1==37||LA155_1==43||LA155_1==45||(LA155_1>=49 && LA155_1<=52)||LA155_1==120||(LA155_1>=122 && LA155_1<=127)||(LA155_1>=129 && LA155_1<=130)) ) {
-                    alt155=1;
-                }
-            }
-            switch (alt155) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13459:1: ( rule__ReferenceCS__UnorderedGroup_6 )?
+            int alt176=2;
+            alt176 = dfa176.predict(input);
+            switch (alt176) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12846:2: rule__ReferenceCS__Group_6__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13459:2: rule__ReferenceCS__UnorderedGroup_6
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6__0_in_rule__ReferenceCS__Group__6__Impl26929);
-                    rule__ReferenceCS__Group_6__0();
+                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__UnorderedGroup_6_in_rule__ReferenceCS__Group__6__Impl27991);
+                    rule__ReferenceCS__UnorderedGroup_6();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -40161,7 +41498,7 @@
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getGroup_6()); 
+               after(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()); 
             }
 
             }
@@ -40185,16 +41522,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__7"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12856:1: rule__ReferenceCS__Group__7 : rule__ReferenceCS__Group__7__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13469:1: rule__ReferenceCS__Group__7 : rule__ReferenceCS__Group__7__Impl ;
     public final void rule__ReferenceCS__Group__7() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12860:1: ( rule__ReferenceCS__Group__7__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12861:2: rule__ReferenceCS__Group__7__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13473:1: ( rule__ReferenceCS__Group__7__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13474:2: rule__ReferenceCS__Group__7__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__7__Impl_in_rule__ReferenceCS__Group__726960);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group__7__Impl_in_rule__ReferenceCS__Group__728022);
             rule__ReferenceCS__Group__7__Impl();
 
             state._fsp--;
@@ -40218,25 +41555,25 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group__7__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12867:1: rule__ReferenceCS__Group__7__Impl : ( ( rule__ReferenceCS__Alternatives_7 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13480:1: rule__ReferenceCS__Group__7__Impl : ( ( rule__ReferenceCS__Alternatives_7 ) ) ;
     public final void rule__ReferenceCS__Group__7__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12871:1: ( ( ( rule__ReferenceCS__Alternatives_7 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12872:1: ( ( rule__ReferenceCS__Alternatives_7 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13484:1: ( ( ( rule__ReferenceCS__Alternatives_7 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13485:1: ( ( rule__ReferenceCS__Alternatives_7 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12872:1: ( ( rule__ReferenceCS__Alternatives_7 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12873:1: ( rule__ReferenceCS__Alternatives_7 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13485:1: ( ( rule__ReferenceCS__Alternatives_7 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13486:1: ( rule__ReferenceCS__Alternatives_7 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getAlternatives_7()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12874:1: ( rule__ReferenceCS__Alternatives_7 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12874:2: rule__ReferenceCS__Alternatives_7
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13487:1: ( rule__ReferenceCS__Alternatives_7 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13487:2: rule__ReferenceCS__Alternatives_7
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_7_in_rule__ReferenceCS__Group__7__Impl26987);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_7_in_rule__ReferenceCS__Group__7__Impl28049);
             rule__ReferenceCS__Alternatives_7();
 
             state._fsp--;
@@ -40268,390 +41605,22 @@
     // $ANTLR end "rule__ReferenceCS__Group__7__Impl"
 
 
-    // $ANTLR start "rule__ReferenceCS__Group_0_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12900:1: rule__ReferenceCS__Group_0_0__0 : rule__ReferenceCS__Group_0_0__0__Impl rule__ReferenceCS__Group_0_0__1 ;
-    public final void rule__ReferenceCS__Group_0_0__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12904:1: ( rule__ReferenceCS__Group_0_0__0__Impl rule__ReferenceCS__Group_0_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12905:2: rule__ReferenceCS__Group_0_0__0__Impl rule__ReferenceCS__Group_0_0__1
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_0_0__0__Impl_in_rule__ReferenceCS__Group_0_0__027033);
-            rule__ReferenceCS__Group_0_0__0__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_0_0__1_in_rule__ReferenceCS__Group_0_0__027036);
-            rule__ReferenceCS__Group_0_0__1();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_0_0__0"
-
-
-    // $ANTLR start "rule__ReferenceCS__Group_0_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12912:1: rule__ReferenceCS__Group_0_0__0__Impl : ( ( rule__ReferenceCS__QualifiersAssignment_0_0_0 ) ) ;
-    public final void rule__ReferenceCS__Group_0_0__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12916:1: ( ( ( rule__ReferenceCS__QualifiersAssignment_0_0_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12917:1: ( ( rule__ReferenceCS__QualifiersAssignment_0_0_0 ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12917:1: ( ( rule__ReferenceCS__QualifiersAssignment_0_0_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12918:1: ( rule__ReferenceCS__QualifiersAssignment_0_0_0 )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12919:1: ( rule__ReferenceCS__QualifiersAssignment_0_0_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12919:2: rule__ReferenceCS__QualifiersAssignment_0_0_0
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__QualifiersAssignment_0_0_0_in_rule__ReferenceCS__Group_0_0__0__Impl27063);
-            rule__ReferenceCS__QualifiersAssignment_0_0_0();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_0_0__0__Impl"
-
-
-    // $ANTLR start "rule__ReferenceCS__Group_0_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12929:1: rule__ReferenceCS__Group_0_0__1 : rule__ReferenceCS__Group_0_0__1__Impl ;
-    public final void rule__ReferenceCS__Group_0_0__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12933:1: ( rule__ReferenceCS__Group_0_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12934:2: rule__ReferenceCS__Group_0_0__1__Impl
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_0_0__1__Impl_in_rule__ReferenceCS__Group_0_0__127093);
-            rule__ReferenceCS__Group_0_0__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_0_0__1"
-
-
-    // $ANTLR start "rule__ReferenceCS__Group_0_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12940:1: rule__ReferenceCS__Group_0_0__1__Impl : ( ( rule__ReferenceCS__QualifiersAssignment_0_0_1 )? ) ;
-    public final void rule__ReferenceCS__Group_0_0__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12944:1: ( ( ( rule__ReferenceCS__QualifiersAssignment_0_0_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12945:1: ( ( rule__ReferenceCS__QualifiersAssignment_0_0_1 )? )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12945:1: ( ( rule__ReferenceCS__QualifiersAssignment_0_0_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12946:1: ( rule__ReferenceCS__QualifiersAssignment_0_0_1 )?
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_1()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12947:1: ( rule__ReferenceCS__QualifiersAssignment_0_0_1 )?
-            int alt156=2;
-            int LA156_0 = input.LA(1);
-
-            if ( (LA156_0==24) ) {
-                alt156=1;
-            }
-            switch (alt156) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12947:2: rule__ReferenceCS__QualifiersAssignment_0_0_1
-                    {
-                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__QualifiersAssignment_0_0_1_in_rule__ReferenceCS__Group_0_0__1__Impl27120);
-                    rule__ReferenceCS__QualifiersAssignment_0_0_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_0_1()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_0_0__1__Impl"
-
-
-    // $ANTLR start "rule__ReferenceCS__Group_0_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12961:1: rule__ReferenceCS__Group_0_1__0 : rule__ReferenceCS__Group_0_1__0__Impl rule__ReferenceCS__Group_0_1__1 ;
-    public final void rule__ReferenceCS__Group_0_1__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12965:1: ( rule__ReferenceCS__Group_0_1__0__Impl rule__ReferenceCS__Group_0_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12966:2: rule__ReferenceCS__Group_0_1__0__Impl rule__ReferenceCS__Group_0_1__1
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_0_1__0__Impl_in_rule__ReferenceCS__Group_0_1__027155);
-            rule__ReferenceCS__Group_0_1__0__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_0_1__1_in_rule__ReferenceCS__Group_0_1__027158);
-            rule__ReferenceCS__Group_0_1__1();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_0_1__0"
-
-
-    // $ANTLR start "rule__ReferenceCS__Group_0_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12973:1: rule__ReferenceCS__Group_0_1__0__Impl : ( ( rule__ReferenceCS__QualifiersAssignment_0_1_0 ) ) ;
-    public final void rule__ReferenceCS__Group_0_1__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12977:1: ( ( ( rule__ReferenceCS__QualifiersAssignment_0_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12978:1: ( ( rule__ReferenceCS__QualifiersAssignment_0_1_0 ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12978:1: ( ( rule__ReferenceCS__QualifiersAssignment_0_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12979:1: ( rule__ReferenceCS__QualifiersAssignment_0_1_0 )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12980:1: ( rule__ReferenceCS__QualifiersAssignment_0_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12980:2: rule__ReferenceCS__QualifiersAssignment_0_1_0
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__QualifiersAssignment_0_1_0_in_rule__ReferenceCS__Group_0_1__0__Impl27185);
-            rule__ReferenceCS__QualifiersAssignment_0_1_0();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_0_1__0__Impl"
-
-
-    // $ANTLR start "rule__ReferenceCS__Group_0_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12990:1: rule__ReferenceCS__Group_0_1__1 : rule__ReferenceCS__Group_0_1__1__Impl ;
-    public final void rule__ReferenceCS__Group_0_1__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12994:1: ( rule__ReferenceCS__Group_0_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12995:2: rule__ReferenceCS__Group_0_1__1__Impl
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_0_1__1__Impl_in_rule__ReferenceCS__Group_0_1__127215);
-            rule__ReferenceCS__Group_0_1__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_0_1__1"
-
-
-    // $ANTLR start "rule__ReferenceCS__Group_0_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13001:1: rule__ReferenceCS__Group_0_1__1__Impl : ( ( rule__ReferenceCS__QualifiersAssignment_0_1_1 )? ) ;
-    public final void rule__ReferenceCS__Group_0_1__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13005:1: ( ( ( rule__ReferenceCS__QualifiersAssignment_0_1_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13006:1: ( ( rule__ReferenceCS__QualifiersAssignment_0_1_1 )? )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13006:1: ( ( rule__ReferenceCS__QualifiersAssignment_0_1_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13007:1: ( rule__ReferenceCS__QualifiersAssignment_0_1_1 )?
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_1()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13008:1: ( rule__ReferenceCS__QualifiersAssignment_0_1_1 )?
-            int alt157=2;
-            int LA157_0 = input.LA(1);
-
-            if ( (LA157_0==46) ) {
-                alt157=1;
-            }
-            switch (alt157) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13008:2: rule__ReferenceCS__QualifiersAssignment_0_1_1
-                    {
-                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__QualifiersAssignment_0_1_1_in_rule__ReferenceCS__Group_0_1__1__Impl27242);
-                    rule__ReferenceCS__QualifiersAssignment_0_1_1();
-
-                    state._fsp--;
-                    if (state.failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersAssignment_0_1_1()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_0_1__1__Impl"
-
-
     // $ANTLR start "rule__ReferenceCS__Group_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13022:1: rule__ReferenceCS__Group_3__0 : rule__ReferenceCS__Group_3__0__Impl rule__ReferenceCS__Group_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13513:1: rule__ReferenceCS__Group_3__0 : rule__ReferenceCS__Group_3__0__Impl rule__ReferenceCS__Group_3__1 ;
     public final void rule__ReferenceCS__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13026:1: ( rule__ReferenceCS__Group_3__0__Impl rule__ReferenceCS__Group_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13027:2: rule__ReferenceCS__Group_3__0__Impl rule__ReferenceCS__Group_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13517:1: ( rule__ReferenceCS__Group_3__0__Impl rule__ReferenceCS__Group_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13518:2: rule__ReferenceCS__Group_3__0__Impl rule__ReferenceCS__Group_3__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_3__0__Impl_in_rule__ReferenceCS__Group_3__027277);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_3__0__Impl_in_rule__ReferenceCS__Group_3__028095);
             rule__ReferenceCS__Group_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_3__1_in_rule__ReferenceCS__Group_3__027280);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_3__1_in_rule__ReferenceCS__Group_3__028098);
             rule__ReferenceCS__Group_3__1();
 
             state._fsp--;
@@ -40675,22 +41644,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13034:1: rule__ReferenceCS__Group_3__0__Impl : ( '#' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13525:1: rule__ReferenceCS__Group_3__0__Impl : ( '#' ) ;
     public final void rule__ReferenceCS__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13038:1: ( ( '#' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13039:1: ( '#' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13529:1: ( ( '#' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13530:1: ( '#' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13039:1: ( '#' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13040:1: '#'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13530:1: ( '#' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13531:1: '#'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getNumberSignKeyword_3_0()); 
             }
-            match(input,101,FollowSets001.FOLLOW_101_in_rule__ReferenceCS__Group_3__0__Impl27308); if (state.failed) return ;
+            match(input,110,FollowSets001.FOLLOW_110_in_rule__ReferenceCS__Group_3__0__Impl28126); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getNumberSignKeyword_3_0()); 
             }
@@ -40716,16 +41685,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13053:1: rule__ReferenceCS__Group_3__1 : rule__ReferenceCS__Group_3__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13544:1: rule__ReferenceCS__Group_3__1 : rule__ReferenceCS__Group_3__1__Impl ;
     public final void rule__ReferenceCS__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13057:1: ( rule__ReferenceCS__Group_3__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13058:2: rule__ReferenceCS__Group_3__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13548:1: ( rule__ReferenceCS__Group_3__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13549:2: rule__ReferenceCS__Group_3__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_3__1__Impl_in_rule__ReferenceCS__Group_3__127339);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_3__1__Impl_in_rule__ReferenceCS__Group_3__128157);
             rule__ReferenceCS__Group_3__1__Impl();
 
             state._fsp--;
@@ -40749,25 +41718,25 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13064:1: rule__ReferenceCS__Group_3__1__Impl : ( ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13555:1: rule__ReferenceCS__Group_3__1__Impl : ( ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 ) ) ;
     public final void rule__ReferenceCS__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13068:1: ( ( ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13069:1: ( ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13559:1: ( ( ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13560:1: ( ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13069:1: ( ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13070:1: ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13560:1: ( ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13561:1: ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getReferredOppositeAssignment_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13071:1: ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13071:2: rule__ReferenceCS__ReferredOppositeAssignment_3_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13562:1: ( rule__ReferenceCS__ReferredOppositeAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13562:2: rule__ReferenceCS__ReferredOppositeAssignment_3_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__ReferredOppositeAssignment_3_1_in_rule__ReferenceCS__Group_3__1__Impl27366);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__ReferredOppositeAssignment_3_1_in_rule__ReferenceCS__Group_3__1__Impl28184);
             rule__ReferenceCS__ReferredOppositeAssignment_3_1();
 
             state._fsp--;
@@ -40800,21 +41769,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_4__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13085:1: rule__ReferenceCS__Group_4__0 : rule__ReferenceCS__Group_4__0__Impl rule__ReferenceCS__Group_4__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13576:1: rule__ReferenceCS__Group_4__0 : rule__ReferenceCS__Group_4__0__Impl rule__ReferenceCS__Group_4__1 ;
     public final void rule__ReferenceCS__Group_4__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13089:1: ( rule__ReferenceCS__Group_4__0__Impl rule__ReferenceCS__Group_4__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13090:2: rule__ReferenceCS__Group_4__0__Impl rule__ReferenceCS__Group_4__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13580:1: ( rule__ReferenceCS__Group_4__0__Impl rule__ReferenceCS__Group_4__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13581:2: rule__ReferenceCS__Group_4__0__Impl rule__ReferenceCS__Group_4__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_4__0__Impl_in_rule__ReferenceCS__Group_4__027400);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_4__0__Impl_in_rule__ReferenceCS__Group_4__028218);
             rule__ReferenceCS__Group_4__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_4__1_in_rule__ReferenceCS__Group_4__027403);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_4__1_in_rule__ReferenceCS__Group_4__028221);
             rule__ReferenceCS__Group_4__1();
 
             state._fsp--;
@@ -40838,22 +41807,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_4__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13097:1: rule__ReferenceCS__Group_4__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13588:1: rule__ReferenceCS__Group_4__0__Impl : ( ':' ) ;
     public final void rule__ReferenceCS__Group_4__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13101:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13102:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13592:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13593:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13102:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13103:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13593:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13594:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getColonKeyword_4_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__ReferenceCS__Group_4__0__Impl27431); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__ReferenceCS__Group_4__0__Impl28249); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getColonKeyword_4_0()); 
             }
@@ -40879,16 +41848,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_4__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13116:1: rule__ReferenceCS__Group_4__1 : rule__ReferenceCS__Group_4__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13607:1: rule__ReferenceCS__Group_4__1 : rule__ReferenceCS__Group_4__1__Impl ;
     public final void rule__ReferenceCS__Group_4__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13120:1: ( rule__ReferenceCS__Group_4__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13121:2: rule__ReferenceCS__Group_4__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13611:1: ( rule__ReferenceCS__Group_4__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13612:2: rule__ReferenceCS__Group_4__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_4__1__Impl_in_rule__ReferenceCS__Group_4__127462);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_4__1__Impl_in_rule__ReferenceCS__Group_4__128280);
             rule__ReferenceCS__Group_4__1__Impl();
 
             state._fsp--;
@@ -40912,25 +41881,25 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_4__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13127:1: rule__ReferenceCS__Group_4__1__Impl : ( ( rule__ReferenceCS__OwnedTypeAssignment_4_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13618:1: rule__ReferenceCS__Group_4__1__Impl : ( ( rule__ReferenceCS__OwnedTypeAssignment_4_1 ) ) ;
     public final void rule__ReferenceCS__Group_4__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13131:1: ( ( ( rule__ReferenceCS__OwnedTypeAssignment_4_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13132:1: ( ( rule__ReferenceCS__OwnedTypeAssignment_4_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13622:1: ( ( ( rule__ReferenceCS__OwnedTypeAssignment_4_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13623:1: ( ( rule__ReferenceCS__OwnedTypeAssignment_4_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13132:1: ( ( rule__ReferenceCS__OwnedTypeAssignment_4_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13133:1: ( rule__ReferenceCS__OwnedTypeAssignment_4_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13623:1: ( ( rule__ReferenceCS__OwnedTypeAssignment_4_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13624:1: ( rule__ReferenceCS__OwnedTypeAssignment_4_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getOwnedTypeAssignment_4_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13134:1: ( rule__ReferenceCS__OwnedTypeAssignment_4_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13134:2: rule__ReferenceCS__OwnedTypeAssignment_4_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13625:1: ( rule__ReferenceCS__OwnedTypeAssignment_4_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13625:2: rule__ReferenceCS__OwnedTypeAssignment_4_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__OwnedTypeAssignment_4_1_in_rule__ReferenceCS__Group_4__1__Impl27489);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__OwnedTypeAssignment_4_1_in_rule__ReferenceCS__Group_4__1__Impl28307);
             rule__ReferenceCS__OwnedTypeAssignment_4_1();
 
             state._fsp--;
@@ -40963,21 +41932,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_5__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13148:1: rule__ReferenceCS__Group_5__0 : rule__ReferenceCS__Group_5__0__Impl rule__ReferenceCS__Group_5__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13639:1: rule__ReferenceCS__Group_5__0 : rule__ReferenceCS__Group_5__0__Impl rule__ReferenceCS__Group_5__1 ;
     public final void rule__ReferenceCS__Group_5__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13152:1: ( rule__ReferenceCS__Group_5__0__Impl rule__ReferenceCS__Group_5__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13153:2: rule__ReferenceCS__Group_5__0__Impl rule__ReferenceCS__Group_5__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13643:1: ( rule__ReferenceCS__Group_5__0__Impl rule__ReferenceCS__Group_5__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13644:2: rule__ReferenceCS__Group_5__0__Impl rule__ReferenceCS__Group_5__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_5__0__Impl_in_rule__ReferenceCS__Group_5__027523);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_5__0__Impl_in_rule__ReferenceCS__Group_5__028341);
             rule__ReferenceCS__Group_5__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_5__1_in_rule__ReferenceCS__Group_5__027526);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_5__1_in_rule__ReferenceCS__Group_5__028344);
             rule__ReferenceCS__Group_5__1();
 
             state._fsp--;
@@ -41001,22 +41970,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_5__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13160:1: rule__ReferenceCS__Group_5__0__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13651:1: rule__ReferenceCS__Group_5__0__Impl : ( '=' ) ;
     public final void rule__ReferenceCS__Group_5__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13164:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13165:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13655:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13656:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13165:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13166:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13656:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13657:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getEqualsSignKeyword_5_0()); 
             }
-            match(input,70,FollowSets001.FOLLOW_70_in_rule__ReferenceCS__Group_5__0__Impl27554); if (state.failed) return ;
+            match(input,79,FollowSets001.FOLLOW_79_in_rule__ReferenceCS__Group_5__0__Impl28372); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getEqualsSignKeyword_5_0()); 
             }
@@ -41042,16 +42011,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_5__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13179:1: rule__ReferenceCS__Group_5__1 : rule__ReferenceCS__Group_5__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13670:1: rule__ReferenceCS__Group_5__1 : rule__ReferenceCS__Group_5__1__Impl ;
     public final void rule__ReferenceCS__Group_5__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13183:1: ( rule__ReferenceCS__Group_5__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13184:2: rule__ReferenceCS__Group_5__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13674:1: ( rule__ReferenceCS__Group_5__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13675:2: rule__ReferenceCS__Group_5__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_5__1__Impl_in_rule__ReferenceCS__Group_5__127585);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_5__1__Impl_in_rule__ReferenceCS__Group_5__128403);
             rule__ReferenceCS__Group_5__1__Impl();
 
             state._fsp--;
@@ -41075,25 +42044,25 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_5__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13190:1: rule__ReferenceCS__Group_5__1__Impl : ( ( rule__ReferenceCS__DefaultAssignment_5_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13681:1: rule__ReferenceCS__Group_5__1__Impl : ( ( rule__ReferenceCS__DefaultAssignment_5_1 ) ) ;
     public final void rule__ReferenceCS__Group_5__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13194:1: ( ( ( rule__ReferenceCS__DefaultAssignment_5_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13195:1: ( ( rule__ReferenceCS__DefaultAssignment_5_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13685:1: ( ( ( rule__ReferenceCS__DefaultAssignment_5_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13686:1: ( ( rule__ReferenceCS__DefaultAssignment_5_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13195:1: ( ( rule__ReferenceCS__DefaultAssignment_5_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13196:1: ( rule__ReferenceCS__DefaultAssignment_5_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13686:1: ( ( rule__ReferenceCS__DefaultAssignment_5_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13687:1: ( rule__ReferenceCS__DefaultAssignment_5_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getDefaultAssignment_5_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13197:1: ( rule__ReferenceCS__DefaultAssignment_5_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13197:2: rule__ReferenceCS__DefaultAssignment_5_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13688:1: ( rule__ReferenceCS__DefaultAssignment_5_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13688:2: rule__ReferenceCS__DefaultAssignment_5_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__DefaultAssignment_5_1_in_rule__ReferenceCS__Group_5__1__Impl27612);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__DefaultAssignment_5_1_in_rule__ReferenceCS__Group_5__1__Impl28430);
             rule__ReferenceCS__DefaultAssignment_5_1();
 
             state._fsp--;
@@ -41125,23 +42094,23 @@
     // $ANTLR end "rule__ReferenceCS__Group_5__1__Impl"
 
 
-    // $ANTLR start "rule__ReferenceCS__Group_6__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13211:1: rule__ReferenceCS__Group_6__0 : rule__ReferenceCS__Group_6__0__Impl rule__ReferenceCS__Group_6__1 ;
-    public final void rule__ReferenceCS__Group_6__0() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__Group_6_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13702:1: rule__ReferenceCS__Group_6_0__0 : rule__ReferenceCS__Group_6_0__0__Impl rule__ReferenceCS__Group_6_0__1 ;
+    public final void rule__ReferenceCS__Group_6_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13215:1: ( rule__ReferenceCS__Group_6__0__Impl rule__ReferenceCS__Group_6__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13216:2: rule__ReferenceCS__Group_6__0__Impl rule__ReferenceCS__Group_6__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13706:1: ( rule__ReferenceCS__Group_6_0__0__Impl rule__ReferenceCS__Group_6_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13707:2: rule__ReferenceCS__Group_6_0__0__Impl rule__ReferenceCS__Group_6_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6__0__Impl_in_rule__ReferenceCS__Group_6__027646);
-            rule__ReferenceCS__Group_6__0__Impl();
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_0__0__Impl_in_rule__ReferenceCS__Group_6_0__028464);
+            rule__ReferenceCS__Group_6_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6__1_in_rule__ReferenceCS__Group_6__027649);
-            rule__ReferenceCS__Group_6__1();
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_0__1_in_rule__ReferenceCS__Group_6_0__028467);
+            rule__ReferenceCS__Group_6_0__1();
 
             state._fsp--;
             if (state.failed) return ;
@@ -41160,28 +42129,28 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__Group_6__0"
+    // $ANTLR end "rule__ReferenceCS__Group_6_0__0"
 
 
-    // $ANTLR start "rule__ReferenceCS__Group_6__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13223:1: rule__ReferenceCS__Group_6__0__Impl : ( '{' ) ;
-    public final void rule__ReferenceCS__Group_6__0__Impl() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__Group_6_0__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13714:1: rule__ReferenceCS__Group_6_0__0__Impl : ( '{' ) ;
+    public final void rule__ReferenceCS__Group_6_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13227:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13228:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13718:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13719:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13228:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13229:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13719:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13720:1: '{'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0()); 
+               before(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__ReferenceCS__Group_6__0__Impl27677); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__ReferenceCS__Group_6_0__0__Impl28495); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0()); 
+               after(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()); 
             }
 
             }
@@ -41201,26 +42170,21 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__Group_6__0__Impl"
+    // $ANTLR end "rule__ReferenceCS__Group_6_0__0__Impl"
 
 
-    // $ANTLR start "rule__ReferenceCS__Group_6__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13242:1: rule__ReferenceCS__Group_6__1 : rule__ReferenceCS__Group_6__1__Impl rule__ReferenceCS__Group_6__2 ;
-    public final void rule__ReferenceCS__Group_6__1() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__Group_6_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13733:1: rule__ReferenceCS__Group_6_0__1 : rule__ReferenceCS__Group_6_0__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13246:1: ( rule__ReferenceCS__Group_6__1__Impl rule__ReferenceCS__Group_6__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13247:2: rule__ReferenceCS__Group_6__1__Impl rule__ReferenceCS__Group_6__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13737:1: ( rule__ReferenceCS__Group_6_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13738:2: rule__ReferenceCS__Group_6_0__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6__1__Impl_in_rule__ReferenceCS__Group_6__127708);
-            rule__ReferenceCS__Group_6__1__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6__2_in_rule__ReferenceCS__Group_6__127711);
-            rule__ReferenceCS__Group_6__2();
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_0__1__Impl_in_rule__ReferenceCS__Group_6_0__128526);
+            rule__ReferenceCS__Group_6_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
@@ -41239,159 +42203,49 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__Group_6__1"
+    // $ANTLR end "rule__ReferenceCS__Group_6_0__1"
 
 
-    // $ANTLR start "rule__ReferenceCS__Group_6__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13254:1: rule__ReferenceCS__Group_6__1__Impl : ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ( ( rule__ReferenceCS__Group_6_1__0 )* ) ) ;
-    public final void rule__ReferenceCS__Group_6__1__Impl() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__Group_6_0__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13744:1: rule__ReferenceCS__Group_6_0__1__Impl : ( ( rule__ReferenceCS__Group_6_0_1__0 )? ) ;
+    public final void rule__ReferenceCS__Group_6_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13258:1: ( ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ( ( rule__ReferenceCS__Group_6_1__0 )* ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13259:1: ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ( ( rule__ReferenceCS__Group_6_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13748:1: ( ( ( rule__ReferenceCS__Group_6_0_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13749:1: ( ( rule__ReferenceCS__Group_6_0_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13259:1: ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ( ( rule__ReferenceCS__Group_6_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13260:1: ( ( rule__ReferenceCS__Group_6_1__0 ) ) ( ( rule__ReferenceCS__Group_6_1__0 )* )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13260:1: ( ( rule__ReferenceCS__Group_6_1__0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13261:1: ( rule__ReferenceCS__Group_6_1__0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13749:1: ( ( rule__ReferenceCS__Group_6_0_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13750:1: ( rule__ReferenceCS__Group_6_0_1__0 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getGroup_6_1()); 
+               before(grammarAccess.getReferenceCSAccess().getGroup_6_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13262:1: ( rule__ReferenceCS__Group_6_1__0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13262:2: rule__ReferenceCS__Group_6_1__0
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_1__0_in_rule__ReferenceCS__Group_6__1__Impl27740);
-            rule__ReferenceCS__Group_6_1__0();
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13751:1: ( rule__ReferenceCS__Group_6_0_1__0 )?
+            int alt177=2;
+            int LA177_0 = input.LA(1);
 
-            state._fsp--;
-            if (state.failed) return ;
+            if ( (LA177_0==22||LA177_0==62) ) {
+                alt177=1;
+            }
+            switch (alt177) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13751:2: rule__ReferenceCS__Group_6_0_1__0
+                    {
+                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_0_1__0_in_rule__ReferenceCS__Group_6_0__1__Impl28553);
+                    rule__ReferenceCS__Group_6_0_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getGroup_6_1()); 
-            }
-
-            }
-
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13265:1: ( ( rule__ReferenceCS__Group_6_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13266:1: ( rule__ReferenceCS__Group_6_1__0 )*
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getGroup_6_1()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13267:1: ( rule__ReferenceCS__Group_6_1__0 )*
-            loop158:
-            do {
-                int alt158=2;
-                int LA158_0 = input.LA(1);
-
-                if ( (LA158_0==22||LA158_0==26||LA158_0==37||LA158_0==43||LA158_0==45||(LA158_0>=49 && LA158_0<=52)||LA158_0==120||(LA158_0>=122 && LA158_0<=127)||(LA158_0>=129 && LA158_0<=130)) ) {
-                    alt158=1;
-                }
-
-
-                switch (alt158) {
-            	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13267:2: rule__ReferenceCS__Group_6_1__0
-            	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_1__0_in_rule__ReferenceCS__Group_6__1__Impl27752);
-            	    rule__ReferenceCS__Group_6_1__0();
-
-            	    state._fsp--;
-            	    if (state.failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop158;
-                }
-            } while (true);
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getGroup_6_1()); 
-            }
-
-            }
-
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_6__1__Impl"
-
-
-    // $ANTLR start "rule__ReferenceCS__Group_6__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13278:1: rule__ReferenceCS__Group_6__2 : rule__ReferenceCS__Group_6__2__Impl ;
-    public final void rule__ReferenceCS__Group_6__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13282:1: ( rule__ReferenceCS__Group_6__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13283:2: rule__ReferenceCS__Group_6__2__Impl
-            {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6__2__Impl_in_rule__ReferenceCS__Group_6__227785);
-            rule__ReferenceCS__Group_6__2__Impl();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__Group_6__2"
-
-
-    // $ANTLR start "rule__ReferenceCS__Group_6__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13289:1: rule__ReferenceCS__Group_6__2__Impl : ( '}' ) ;
-    public final void rule__ReferenceCS__Group_6__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13293:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13294:1: ( '}' )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13294:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13295:1: '}'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_2()); 
-            }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__ReferenceCS__Group_6__2__Impl27813); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_2()); 
+               after(grammarAccess.getReferenceCSAccess().getGroup_6_0_1()); 
             }
 
             }
@@ -41411,25 +42265,205 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__Group_6__2__Impl"
+    // $ANTLR end "rule__ReferenceCS__Group_6_0__1__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_0_1__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13765:1: rule__ReferenceCS__Group_6_0_1__0 : rule__ReferenceCS__Group_6_0_1__0__Impl rule__ReferenceCS__Group_6_0_1__1 ;
+    public final void rule__ReferenceCS__Group_6_0_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13769:1: ( rule__ReferenceCS__Group_6_0_1__0__Impl rule__ReferenceCS__Group_6_0_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13770:2: rule__ReferenceCS__Group_6_0_1__0__Impl rule__ReferenceCS__Group_6_0_1__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_0_1__0__Impl_in_rule__ReferenceCS__Group_6_0_1__028588);
+            rule__ReferenceCS__Group_6_0_1__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_0_1__1_in_rule__ReferenceCS__Group_6_0_1__028591);
+            rule__ReferenceCS__Group_6_0_1__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_0_1__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_0_1__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13777:1: rule__ReferenceCS__Group_6_0_1__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_0_1_0 ) ) ;
+    public final void rule__ReferenceCS__Group_6_0_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13781:1: ( ( ( rule__ReferenceCS__Alternatives_6_0_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13782:1: ( ( rule__ReferenceCS__Alternatives_6_0_1_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13782:1: ( ( rule__ReferenceCS__Alternatives_6_0_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13783:1: ( rule__ReferenceCS__Alternatives_6_0_1_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getAlternatives_6_0_1_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13784:1: ( rule__ReferenceCS__Alternatives_6_0_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13784:2: rule__ReferenceCS__Alternatives_6_0_1_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_0_1_0_in_rule__ReferenceCS__Group_6_0_1__0__Impl28618);
+            rule__ReferenceCS__Alternatives_6_0_1_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getAlternatives_6_0_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_0_1__0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_0_1__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13794:1: rule__ReferenceCS__Group_6_0_1__1 : rule__ReferenceCS__Group_6_0_1__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_0_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13798:1: ( rule__ReferenceCS__Group_6_0_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13799:2: rule__ReferenceCS__Group_6_0_1__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_0_1__1__Impl_in_rule__ReferenceCS__Group_6_0_1__128648);
+            rule__ReferenceCS__Group_6_0_1__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_0_1__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_0_1__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13805:1: rule__ReferenceCS__Group_6_0_1__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ReferenceCS__Group_6_0_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13809:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13810:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13810:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13811:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13812:1: ( ',' )?
+            int alt178=2;
+            int LA178_0 = input.LA(1);
+
+            if ( (LA178_0==107) ) {
+                alt178=1;
+            }
+            switch (alt178) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13813:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_6_0_1__1__Impl28677); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_0_1__1__Impl"
 
 
     // $ANTLR start "rule__ReferenceCS__Group_6_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13314:1: rule__ReferenceCS__Group_6_1__0 : rule__ReferenceCS__Group_6_1__0__Impl rule__ReferenceCS__Group_6_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13828:1: rule__ReferenceCS__Group_6_1__0 : rule__ReferenceCS__Group_6_1__0__Impl rule__ReferenceCS__Group_6_1__1 ;
     public final void rule__ReferenceCS__Group_6_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13318:1: ( rule__ReferenceCS__Group_6_1__0__Impl rule__ReferenceCS__Group_6_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13319:2: rule__ReferenceCS__Group_6_1__0__Impl rule__ReferenceCS__Group_6_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13832:1: ( rule__ReferenceCS__Group_6_1__0__Impl rule__ReferenceCS__Group_6_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13833:2: rule__ReferenceCS__Group_6_1__0__Impl rule__ReferenceCS__Group_6_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_1__0__Impl_in_rule__ReferenceCS__Group_6_1__027850);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_1__0__Impl_in_rule__ReferenceCS__Group_6_1__028714);
             rule__ReferenceCS__Group_6_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_1__1_in_rule__ReferenceCS__Group_6_1__027853);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_1__1_in_rule__ReferenceCS__Group_6_1__028717);
             rule__ReferenceCS__Group_6_1__1();
 
             state._fsp--;
@@ -41453,25 +42487,25 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_6_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13326:1: rule__ReferenceCS__Group_6_1__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13840:1: rule__ReferenceCS__Group_6_1__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_1_0 ) ) ;
     public final void rule__ReferenceCS__Group_6_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13330:1: ( ( ( rule__ReferenceCS__Alternatives_6_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13331:1: ( ( rule__ReferenceCS__Alternatives_6_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13844:1: ( ( ( rule__ReferenceCS__Alternatives_6_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13845:1: ( ( rule__ReferenceCS__Alternatives_6_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13331:1: ( ( rule__ReferenceCS__Alternatives_6_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13332:1: ( rule__ReferenceCS__Alternatives_6_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13845:1: ( ( rule__ReferenceCS__Alternatives_6_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13846:1: ( rule__ReferenceCS__Alternatives_6_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getAlternatives_6_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13333:1: ( rule__ReferenceCS__Alternatives_6_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13333:2: rule__ReferenceCS__Alternatives_6_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13847:1: ( rule__ReferenceCS__Alternatives_6_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13847:2: rule__ReferenceCS__Alternatives_6_1_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_1_0_in_rule__ReferenceCS__Group_6_1__0__Impl27880);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_1_0_in_rule__ReferenceCS__Group_6_1__0__Impl28744);
             rule__ReferenceCS__Alternatives_6_1_0();
 
             state._fsp--;
@@ -41504,16 +42538,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_6_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13343:1: rule__ReferenceCS__Group_6_1__1 : rule__ReferenceCS__Group_6_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13857:1: rule__ReferenceCS__Group_6_1__1 : rule__ReferenceCS__Group_6_1__1__Impl ;
     public final void rule__ReferenceCS__Group_6_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13347:1: ( rule__ReferenceCS__Group_6_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13348:2: rule__ReferenceCS__Group_6_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13861:1: ( rule__ReferenceCS__Group_6_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13862:2: rule__ReferenceCS__Group_6_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_1__1__Impl_in_rule__ReferenceCS__Group_6_1__127910);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_1__1__Impl_in_rule__ReferenceCS__Group_6_1__128774);
             rule__ReferenceCS__Group_6_1__1__Impl();
 
             state._fsp--;
@@ -41537,33 +42571,33 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_6_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13354:1: rule__ReferenceCS__Group_6_1__1__Impl : ( ( ',' )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13868:1: rule__ReferenceCS__Group_6_1__1__Impl : ( ( ',' )? ) ;
     public final void rule__ReferenceCS__Group_6_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13358:1: ( ( ( ',' )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13359:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13872:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13873:1: ( ( ',' )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13359:1: ( ( ',' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13360:1: ( ',' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13873:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13874:1: ( ',' )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13361:1: ( ',' )?
-            int alt159=2;
-            int LA159_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13875:1: ( ',' )?
+            int alt179=2;
+            int LA179_0 = input.LA(1);
 
-            if ( (LA159_0==98) ) {
-                alt159=1;
+            if ( (LA179_0==107) ) {
+                alt179=1;
             }
-            switch (alt159) {
+            switch (alt179) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13362:2: ','
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13876:2: ','
                     {
-                    match(input,98,FollowSets001.FOLLOW_98_in_rule__ReferenceCS__Group_6_1__1__Impl27939); if (state.failed) return ;
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_6_1__1__Impl28803); if (state.failed) return ;
 
                     }
                     break;
@@ -41594,22 +42628,1456 @@
     // $ANTLR end "rule__ReferenceCS__Group_6_1__1__Impl"
 
 
+    // $ANTLR start "rule__ReferenceCS__Group_6_2__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13891:1: rule__ReferenceCS__Group_6_2__0 : rule__ReferenceCS__Group_6_2__0__Impl rule__ReferenceCS__Group_6_2__1 ;
+    public final void rule__ReferenceCS__Group_6_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13895:1: ( rule__ReferenceCS__Group_6_2__0__Impl rule__ReferenceCS__Group_6_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13896:2: rule__ReferenceCS__Group_6_2__0__Impl rule__ReferenceCS__Group_6_2__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_2__0__Impl_in_rule__ReferenceCS__Group_6_2__028840);
+            rule__ReferenceCS__Group_6_2__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_2__1_in_rule__ReferenceCS__Group_6_2__028843);
+            rule__ReferenceCS__Group_6_2__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_2__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_2__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13903:1: rule__ReferenceCS__Group_6_2__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_2_0 ) ) ;
+    public final void rule__ReferenceCS__Group_6_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13907:1: ( ( ( rule__ReferenceCS__Alternatives_6_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13908:1: ( ( rule__ReferenceCS__Alternatives_6_2_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13908:1: ( ( rule__ReferenceCS__Alternatives_6_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13909:1: ( rule__ReferenceCS__Alternatives_6_2_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getAlternatives_6_2_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13910:1: ( rule__ReferenceCS__Alternatives_6_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13910:2: rule__ReferenceCS__Alternatives_6_2_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_2_0_in_rule__ReferenceCS__Group_6_2__0__Impl28870);
+            rule__ReferenceCS__Alternatives_6_2_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getAlternatives_6_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_2__0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_2__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13920:1: rule__ReferenceCS__Group_6_2__1 : rule__ReferenceCS__Group_6_2__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13924:1: ( rule__ReferenceCS__Group_6_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13925:2: rule__ReferenceCS__Group_6_2__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_2__1__Impl_in_rule__ReferenceCS__Group_6_2__128900);
+            rule__ReferenceCS__Group_6_2__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_2__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_2__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13931:1: rule__ReferenceCS__Group_6_2__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ReferenceCS__Group_6_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13935:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13936:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13936:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13937:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13938:1: ( ',' )?
+            int alt180=2;
+            int LA180_0 = input.LA(1);
+
+            if ( (LA180_0==107) ) {
+                alt180=1;
+            }
+            switch (alt180) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13939:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_6_2__1__Impl28929); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_2__1__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_3__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13954:1: rule__ReferenceCS__Group_6_3__0 : rule__ReferenceCS__Group_6_3__0__Impl rule__ReferenceCS__Group_6_3__1 ;
+    public final void rule__ReferenceCS__Group_6_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13958:1: ( rule__ReferenceCS__Group_6_3__0__Impl rule__ReferenceCS__Group_6_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13959:2: rule__ReferenceCS__Group_6_3__0__Impl rule__ReferenceCS__Group_6_3__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_3__0__Impl_in_rule__ReferenceCS__Group_6_3__028966);
+            rule__ReferenceCS__Group_6_3__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_3__1_in_rule__ReferenceCS__Group_6_3__028969);
+            rule__ReferenceCS__Group_6_3__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_3__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_3__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13966:1: rule__ReferenceCS__Group_6_3__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_3_0 ) ) ;
+    public final void rule__ReferenceCS__Group_6_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13970:1: ( ( ( rule__ReferenceCS__Alternatives_6_3_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13971:1: ( ( rule__ReferenceCS__Alternatives_6_3_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13971:1: ( ( rule__ReferenceCS__Alternatives_6_3_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13972:1: ( rule__ReferenceCS__Alternatives_6_3_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getAlternatives_6_3_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13973:1: ( rule__ReferenceCS__Alternatives_6_3_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13973:2: rule__ReferenceCS__Alternatives_6_3_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_3_0_in_rule__ReferenceCS__Group_6_3__0__Impl28996);
+            rule__ReferenceCS__Alternatives_6_3_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getAlternatives_6_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_3__0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_3__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13983:1: rule__ReferenceCS__Group_6_3__1 : rule__ReferenceCS__Group_6_3__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13987:1: ( rule__ReferenceCS__Group_6_3__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13988:2: rule__ReferenceCS__Group_6_3__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_3__1__Impl_in_rule__ReferenceCS__Group_6_3__129026);
+            rule__ReferenceCS__Group_6_3__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_3__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_3__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13994:1: rule__ReferenceCS__Group_6_3__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ReferenceCS__Group_6_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13998:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13999:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13999:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14000:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14001:1: ( ',' )?
+            int alt181=2;
+            int LA181_0 = input.LA(1);
+
+            if ( (LA181_0==107) ) {
+                alt181=1;
+            }
+            switch (alt181) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14002:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_6_3__1__Impl29055); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_3__1__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_4__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14017:1: rule__ReferenceCS__Group_6_4__0 : rule__ReferenceCS__Group_6_4__0__Impl rule__ReferenceCS__Group_6_4__1 ;
+    public final void rule__ReferenceCS__Group_6_4__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14021:1: ( rule__ReferenceCS__Group_6_4__0__Impl rule__ReferenceCS__Group_6_4__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14022:2: rule__ReferenceCS__Group_6_4__0__Impl rule__ReferenceCS__Group_6_4__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_4__0__Impl_in_rule__ReferenceCS__Group_6_4__029092);
+            rule__ReferenceCS__Group_6_4__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_4__1_in_rule__ReferenceCS__Group_6_4__029095);
+            rule__ReferenceCS__Group_6_4__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_4__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_4__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14029:1: rule__ReferenceCS__Group_6_4__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_4_0 ) ) ;
+    public final void rule__ReferenceCS__Group_6_4__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14033:1: ( ( ( rule__ReferenceCS__Alternatives_6_4_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14034:1: ( ( rule__ReferenceCS__Alternatives_6_4_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14034:1: ( ( rule__ReferenceCS__Alternatives_6_4_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14035:1: ( rule__ReferenceCS__Alternatives_6_4_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getAlternatives_6_4_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14036:1: ( rule__ReferenceCS__Alternatives_6_4_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14036:2: rule__ReferenceCS__Alternatives_6_4_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_4_0_in_rule__ReferenceCS__Group_6_4__0__Impl29122);
+            rule__ReferenceCS__Alternatives_6_4_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getAlternatives_6_4_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_4__0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_4__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14046:1: rule__ReferenceCS__Group_6_4__1 : rule__ReferenceCS__Group_6_4__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_4__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14050:1: ( rule__ReferenceCS__Group_6_4__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14051:2: rule__ReferenceCS__Group_6_4__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_4__1__Impl_in_rule__ReferenceCS__Group_6_4__129152);
+            rule__ReferenceCS__Group_6_4__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_4__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_4__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14057:1: rule__ReferenceCS__Group_6_4__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ReferenceCS__Group_6_4__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14061:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14062:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14062:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14063:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14064:1: ( ',' )?
+            int alt182=2;
+            int LA182_0 = input.LA(1);
+
+            if ( (LA182_0==107) ) {
+                alt182=1;
+            }
+            switch (alt182) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14065:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_6_4__1__Impl29181); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_4__1__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_5__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14080:1: rule__ReferenceCS__Group_6_5__0 : rule__ReferenceCS__Group_6_5__0__Impl rule__ReferenceCS__Group_6_5__1 ;
+    public final void rule__ReferenceCS__Group_6_5__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14084:1: ( rule__ReferenceCS__Group_6_5__0__Impl rule__ReferenceCS__Group_6_5__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14085:2: rule__ReferenceCS__Group_6_5__0__Impl rule__ReferenceCS__Group_6_5__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_5__0__Impl_in_rule__ReferenceCS__Group_6_5__029218);
+            rule__ReferenceCS__Group_6_5__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_5__1_in_rule__ReferenceCS__Group_6_5__029221);
+            rule__ReferenceCS__Group_6_5__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_5__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_5__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14092:1: rule__ReferenceCS__Group_6_5__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_5_0 ) ) ;
+    public final void rule__ReferenceCS__Group_6_5__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14096:1: ( ( ( rule__ReferenceCS__Alternatives_6_5_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14097:1: ( ( rule__ReferenceCS__Alternatives_6_5_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14097:1: ( ( rule__ReferenceCS__Alternatives_6_5_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14098:1: ( rule__ReferenceCS__Alternatives_6_5_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getAlternatives_6_5_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14099:1: ( rule__ReferenceCS__Alternatives_6_5_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14099:2: rule__ReferenceCS__Alternatives_6_5_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_5_0_in_rule__ReferenceCS__Group_6_5__0__Impl29248);
+            rule__ReferenceCS__Alternatives_6_5_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getAlternatives_6_5_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_5__0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_5__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14109:1: rule__ReferenceCS__Group_6_5__1 : rule__ReferenceCS__Group_6_5__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_5__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14113:1: ( rule__ReferenceCS__Group_6_5__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14114:2: rule__ReferenceCS__Group_6_5__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_5__1__Impl_in_rule__ReferenceCS__Group_6_5__129278);
+            rule__ReferenceCS__Group_6_5__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_5__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_5__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14120:1: rule__ReferenceCS__Group_6_5__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ReferenceCS__Group_6_5__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14124:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14125:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14125:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14126:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14127:1: ( ',' )?
+            int alt183=2;
+            int LA183_0 = input.LA(1);
+
+            if ( (LA183_0==107) ) {
+                alt183=1;
+            }
+            switch (alt183) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14128:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_6_5__1__Impl29307); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_5__1__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_6__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14143:1: rule__ReferenceCS__Group_6_6__0 : rule__ReferenceCS__Group_6_6__0__Impl rule__ReferenceCS__Group_6_6__1 ;
+    public final void rule__ReferenceCS__Group_6_6__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14147:1: ( rule__ReferenceCS__Group_6_6__0__Impl rule__ReferenceCS__Group_6_6__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14148:2: rule__ReferenceCS__Group_6_6__0__Impl rule__ReferenceCS__Group_6_6__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_6__0__Impl_in_rule__ReferenceCS__Group_6_6__029344);
+            rule__ReferenceCS__Group_6_6__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_6__1_in_rule__ReferenceCS__Group_6_6__029347);
+            rule__ReferenceCS__Group_6_6__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_6__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_6__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14155:1: rule__ReferenceCS__Group_6_6__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_6_0 ) ) ;
+    public final void rule__ReferenceCS__Group_6_6__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14159:1: ( ( ( rule__ReferenceCS__Alternatives_6_6_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14160:1: ( ( rule__ReferenceCS__Alternatives_6_6_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14160:1: ( ( rule__ReferenceCS__Alternatives_6_6_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14161:1: ( rule__ReferenceCS__Alternatives_6_6_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getAlternatives_6_6_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14162:1: ( rule__ReferenceCS__Alternatives_6_6_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14162:2: rule__ReferenceCS__Alternatives_6_6_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_6_0_in_rule__ReferenceCS__Group_6_6__0__Impl29374);
+            rule__ReferenceCS__Alternatives_6_6_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getAlternatives_6_6_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_6__0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_6__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14172:1: rule__ReferenceCS__Group_6_6__1 : rule__ReferenceCS__Group_6_6__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_6__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14176:1: ( rule__ReferenceCS__Group_6_6__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14177:2: rule__ReferenceCS__Group_6_6__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_6__1__Impl_in_rule__ReferenceCS__Group_6_6__129404);
+            rule__ReferenceCS__Group_6_6__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_6__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_6__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14183:1: rule__ReferenceCS__Group_6_6__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ReferenceCS__Group_6_6__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14187:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14188:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14188:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14189:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14190:1: ( ',' )?
+            int alt184=2;
+            int LA184_0 = input.LA(1);
+
+            if ( (LA184_0==107) ) {
+                alt184=1;
+            }
+            switch (alt184) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14191:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_6_6__1__Impl29433); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_6__1__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_7__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14206:1: rule__ReferenceCS__Group_6_7__0 : rule__ReferenceCS__Group_6_7__0__Impl rule__ReferenceCS__Group_6_7__1 ;
+    public final void rule__ReferenceCS__Group_6_7__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14210:1: ( rule__ReferenceCS__Group_6_7__0__Impl rule__ReferenceCS__Group_6_7__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14211:2: rule__ReferenceCS__Group_6_7__0__Impl rule__ReferenceCS__Group_6_7__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_7__0__Impl_in_rule__ReferenceCS__Group_6_7__029470);
+            rule__ReferenceCS__Group_6_7__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_7__1_in_rule__ReferenceCS__Group_6_7__029473);
+            rule__ReferenceCS__Group_6_7__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_7__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_7__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14218:1: rule__ReferenceCS__Group_6_7__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_7_0 ) ) ;
+    public final void rule__ReferenceCS__Group_6_7__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14222:1: ( ( ( rule__ReferenceCS__Alternatives_6_7_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14223:1: ( ( rule__ReferenceCS__Alternatives_6_7_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14223:1: ( ( rule__ReferenceCS__Alternatives_6_7_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14224:1: ( rule__ReferenceCS__Alternatives_6_7_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getAlternatives_6_7_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14225:1: ( rule__ReferenceCS__Alternatives_6_7_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14225:2: rule__ReferenceCS__Alternatives_6_7_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_7_0_in_rule__ReferenceCS__Group_6_7__0__Impl29500);
+            rule__ReferenceCS__Alternatives_6_7_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getAlternatives_6_7_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_7__0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_7__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14235:1: rule__ReferenceCS__Group_6_7__1 : rule__ReferenceCS__Group_6_7__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_7__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14239:1: ( rule__ReferenceCS__Group_6_7__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14240:2: rule__ReferenceCS__Group_6_7__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_7__1__Impl_in_rule__ReferenceCS__Group_6_7__129530);
+            rule__ReferenceCS__Group_6_7__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_7__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_7__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14246:1: rule__ReferenceCS__Group_6_7__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ReferenceCS__Group_6_7__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14250:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14251:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14251:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14252:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14253:1: ( ',' )?
+            int alt185=2;
+            int LA185_0 = input.LA(1);
+
+            if ( (LA185_0==107) ) {
+                alt185=1;
+            }
+            switch (alt185) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14254:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_6_7__1__Impl29559); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_7__1__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_8__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14269:1: rule__ReferenceCS__Group_6_8__0 : rule__ReferenceCS__Group_6_8__0__Impl rule__ReferenceCS__Group_6_8__1 ;
+    public final void rule__ReferenceCS__Group_6_8__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14273:1: ( rule__ReferenceCS__Group_6_8__0__Impl rule__ReferenceCS__Group_6_8__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14274:2: rule__ReferenceCS__Group_6_8__0__Impl rule__ReferenceCS__Group_6_8__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_8__0__Impl_in_rule__ReferenceCS__Group_6_8__029596);
+            rule__ReferenceCS__Group_6_8__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_8__1_in_rule__ReferenceCS__Group_6_8__029599);
+            rule__ReferenceCS__Group_6_8__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_8__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_8__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14281:1: rule__ReferenceCS__Group_6_8__0__Impl : ( ( rule__ReferenceCS__Group_6_8_0__0 )? ) ;
+    public final void rule__ReferenceCS__Group_6_8__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14285:1: ( ( ( rule__ReferenceCS__Group_6_8_0__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14286:1: ( ( rule__ReferenceCS__Group_6_8_0__0 )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14286:1: ( ( rule__ReferenceCS__Group_6_8_0__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14287:1: ( rule__ReferenceCS__Group_6_8_0__0 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getGroup_6_8_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14288:1: ( rule__ReferenceCS__Group_6_8_0__0 )?
+            int alt186=2;
+            int LA186_0 = input.LA(1);
+
+            if ( (LA186_0==52||LA186_0==60) ) {
+                alt186=1;
+            }
+            switch (alt186) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14288:2: rule__ReferenceCS__Group_6_8_0__0
+                    {
+                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_8_0__0_in_rule__ReferenceCS__Group_6_8__0__Impl29626);
+                    rule__ReferenceCS__Group_6_8_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getGroup_6_8_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_8__0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_8__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14298:1: rule__ReferenceCS__Group_6_8__1 : rule__ReferenceCS__Group_6_8__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_8__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14302:1: ( rule__ReferenceCS__Group_6_8__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14303:2: rule__ReferenceCS__Group_6_8__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_8__1__Impl_in_rule__ReferenceCS__Group_6_8__129657);
+            rule__ReferenceCS__Group_6_8__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_8__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_8__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14309:1: rule__ReferenceCS__Group_6_8__1__Impl : ( '}' ) ;
+    public final void rule__ReferenceCS__Group_6_8__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14313:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14314:1: ( '}' )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14314:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14315:1: '}'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()); 
+            }
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__ReferenceCS__Group_6_8__1__Impl29685); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_8__1__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_8_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14332:1: rule__ReferenceCS__Group_6_8_0__0 : rule__ReferenceCS__Group_6_8_0__0__Impl rule__ReferenceCS__Group_6_8_0__1 ;
+    public final void rule__ReferenceCS__Group_6_8_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14336:1: ( rule__ReferenceCS__Group_6_8_0__0__Impl rule__ReferenceCS__Group_6_8_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14337:2: rule__ReferenceCS__Group_6_8_0__0__Impl rule__ReferenceCS__Group_6_8_0__1
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_8_0__0__Impl_in_rule__ReferenceCS__Group_6_8_0__029720);
+            rule__ReferenceCS__Group_6_8_0__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_8_0__1_in_rule__ReferenceCS__Group_6_8_0__029723);
+            rule__ReferenceCS__Group_6_8_0__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_8_0__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_8_0__0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14344:1: rule__ReferenceCS__Group_6_8_0__0__Impl : ( ( rule__ReferenceCS__Alternatives_6_8_0_0 ) ) ;
+    public final void rule__ReferenceCS__Group_6_8_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14348:1: ( ( ( rule__ReferenceCS__Alternatives_6_8_0_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14349:1: ( ( rule__ReferenceCS__Alternatives_6_8_0_0 ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14349:1: ( ( rule__ReferenceCS__Alternatives_6_8_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14350:1: ( rule__ReferenceCS__Alternatives_6_8_0_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getAlternatives_6_8_0_0()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14351:1: ( rule__ReferenceCS__Alternatives_6_8_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14351:2: rule__ReferenceCS__Alternatives_6_8_0_0
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_6_8_0_0_in_rule__ReferenceCS__Group_6_8_0__0__Impl29750);
+            rule__ReferenceCS__Alternatives_6_8_0_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getAlternatives_6_8_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_8_0__0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_8_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14361:1: rule__ReferenceCS__Group_6_8_0__1 : rule__ReferenceCS__Group_6_8_0__1__Impl ;
+    public final void rule__ReferenceCS__Group_6_8_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14365:1: ( rule__ReferenceCS__Group_6_8_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14366:2: rule__ReferenceCS__Group_6_8_0__1__Impl
+            {
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_6_8_0__1__Impl_in_rule__ReferenceCS__Group_6_8_0__129780);
+            rule__ReferenceCS__Group_6_8_0__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_8_0__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__Group_6_8_0__1__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14372:1: rule__ReferenceCS__Group_6_8_0__1__Impl : ( ( ',' )? ) ;
+    public final void rule__ReferenceCS__Group_6_8_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14376:1: ( ( ( ',' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14377:1: ( ( ',' )? )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14377:1: ( ( ',' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14378:1: ( ',' )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()); 
+            }
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14379:1: ( ',' )?
+            int alt187=2;
+            int LA187_0 = input.LA(1);
+
+            if ( (LA187_0==107) ) {
+                alt187=1;
+            }
+            switch (alt187) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14380:2: ','
+                    {
+                    match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_6_8_0__1__Impl29809); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__Group_6_8_0__1__Impl"
+
+
     // $ANTLR start "rule__ReferenceCS__Group_7_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13377:1: rule__ReferenceCS__Group_7_0__0 : rule__ReferenceCS__Group_7_0__0__Impl rule__ReferenceCS__Group_7_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14395:1: rule__ReferenceCS__Group_7_0__0 : rule__ReferenceCS__Group_7_0__0__Impl rule__ReferenceCS__Group_7_0__1 ;
     public final void rule__ReferenceCS__Group_7_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13381:1: ( rule__ReferenceCS__Group_7_0__0__Impl rule__ReferenceCS__Group_7_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13382:2: rule__ReferenceCS__Group_7_0__0__Impl rule__ReferenceCS__Group_7_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14399:1: ( rule__ReferenceCS__Group_7_0__0__Impl rule__ReferenceCS__Group_7_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14400:2: rule__ReferenceCS__Group_7_0__0__Impl rule__ReferenceCS__Group_7_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__0__Impl_in_rule__ReferenceCS__Group_7_0__027976);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__0__Impl_in_rule__ReferenceCS__Group_7_0__029846);
             rule__ReferenceCS__Group_7_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__1_in_rule__ReferenceCS__Group_7_0__027979);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__1_in_rule__ReferenceCS__Group_7_0__029849);
             rule__ReferenceCS__Group_7_0__1();
 
             state._fsp--;
@@ -41633,22 +44101,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13389:1: rule__ReferenceCS__Group_7_0__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14407:1: rule__ReferenceCS__Group_7_0__0__Impl : ( '{' ) ;
     public final void rule__ReferenceCS__Group_7_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13393:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13394:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14411:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14412:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13394:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13395:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14412:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14413:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_7_0_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__ReferenceCS__Group_7_0__0__Impl28007); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__ReferenceCS__Group_7_0__0__Impl29877); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_7_0_0()); 
             }
@@ -41674,21 +44142,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13408:1: rule__ReferenceCS__Group_7_0__1 : rule__ReferenceCS__Group_7_0__1__Impl rule__ReferenceCS__Group_7_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14426:1: rule__ReferenceCS__Group_7_0__1 : rule__ReferenceCS__Group_7_0__1__Impl rule__ReferenceCS__Group_7_0__2 ;
     public final void rule__ReferenceCS__Group_7_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13412:1: ( rule__ReferenceCS__Group_7_0__1__Impl rule__ReferenceCS__Group_7_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13413:2: rule__ReferenceCS__Group_7_0__1__Impl rule__ReferenceCS__Group_7_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14430:1: ( rule__ReferenceCS__Group_7_0__1__Impl rule__ReferenceCS__Group_7_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14431:2: rule__ReferenceCS__Group_7_0__1__Impl rule__ReferenceCS__Group_7_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__1__Impl_in_rule__ReferenceCS__Group_7_0__128038);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__1__Impl_in_rule__ReferenceCS__Group_7_0__129908);
             rule__ReferenceCS__Group_7_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__2_in_rule__ReferenceCS__Group_7_0__128041);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__2_in_rule__ReferenceCS__Group_7_0__129911);
             rule__ReferenceCS__Group_7_0__2();
 
             state._fsp--;
@@ -41712,37 +44180,37 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13420:1: rule__ReferenceCS__Group_7_0__1__Impl : ( ( rule__ReferenceCS__Alternatives_7_0_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14438:1: rule__ReferenceCS__Group_7_0__1__Impl : ( ( rule__ReferenceCS__Alternatives_7_0_1 )* ) ;
     public final void rule__ReferenceCS__Group_7_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13424:1: ( ( ( rule__ReferenceCS__Alternatives_7_0_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13425:1: ( ( rule__ReferenceCS__Alternatives_7_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14442:1: ( ( ( rule__ReferenceCS__Alternatives_7_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14443:1: ( ( rule__ReferenceCS__Alternatives_7_0_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13425:1: ( ( rule__ReferenceCS__Alternatives_7_0_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13426:1: ( rule__ReferenceCS__Alternatives_7_0_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14443:1: ( ( rule__ReferenceCS__Alternatives_7_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14444:1: ( rule__ReferenceCS__Alternatives_7_0_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getAlternatives_7_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13427:1: ( rule__ReferenceCS__Alternatives_7_0_1 )*
-            loop160:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14445:1: ( rule__ReferenceCS__Alternatives_7_0_1 )*
+            loop188:
             do {
-                int alt160=2;
-                int LA160_0 = input.LA(1);
+                int alt188=2;
+                int LA188_0 = input.LA(1);
 
-                if ( (LA160_0==25||LA160_0==31||LA160_0==33||(LA160_0>=55 && LA160_0<=56)||LA160_0==60) ) {
-                    alt160=1;
+                if ( (LA188_0==25||LA188_0==31||LA188_0==33||(LA188_0>=64 && LA188_0<=65)||LA188_0==69) ) {
+                    alt188=1;
                 }
 
 
-                switch (alt160) {
+                switch (alt188) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13427:2: rule__ReferenceCS__Alternatives_7_0_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14445:2: rule__ReferenceCS__Alternatives_7_0_1
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_7_0_1_in_rule__ReferenceCS__Group_7_0__1__Impl28068);
+            	    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Alternatives_7_0_1_in_rule__ReferenceCS__Group_7_0__1__Impl29938);
             	    rule__ReferenceCS__Alternatives_7_0_1();
 
             	    state._fsp--;
@@ -41752,7 +44220,7 @@
             	    break;
 
             	default :
-            	    break loop160;
+            	    break loop188;
                 }
             } while (true);
 
@@ -41781,16 +44249,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13437:1: rule__ReferenceCS__Group_7_0__2 : rule__ReferenceCS__Group_7_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14455:1: rule__ReferenceCS__Group_7_0__2 : rule__ReferenceCS__Group_7_0__2__Impl ;
     public final void rule__ReferenceCS__Group_7_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13441:1: ( rule__ReferenceCS__Group_7_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13442:2: rule__ReferenceCS__Group_7_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14459:1: ( rule__ReferenceCS__Group_7_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14460:2: rule__ReferenceCS__Group_7_0__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__2__Impl_in_rule__ReferenceCS__Group_7_0__228099);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0__2__Impl_in_rule__ReferenceCS__Group_7_0__229969);
             rule__ReferenceCS__Group_7_0__2__Impl();
 
             state._fsp--;
@@ -41814,22 +44282,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13448:1: rule__ReferenceCS__Group_7_0__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14466:1: rule__ReferenceCS__Group_7_0__2__Impl : ( '}' ) ;
     public final void rule__ReferenceCS__Group_7_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13452:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13453:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14470:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14471:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13453:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13454:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14471:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14472:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_7_0_2()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__ReferenceCS__Group_7_0__2__Impl28127); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__ReferenceCS__Group_7_0__2__Impl29997); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_7_0_2()); 
             }
@@ -41855,21 +44323,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13473:1: rule__ReferenceCS__Group_7_0_1_1__0 : rule__ReferenceCS__Group_7_0_1_1__0__Impl rule__ReferenceCS__Group_7_0_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14491:1: rule__ReferenceCS__Group_7_0_1_1__0 : rule__ReferenceCS__Group_7_0_1_1__0__Impl rule__ReferenceCS__Group_7_0_1_1__1 ;
     public final void rule__ReferenceCS__Group_7_0_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13477:1: ( rule__ReferenceCS__Group_7_0_1_1__0__Impl rule__ReferenceCS__Group_7_0_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13478:2: rule__ReferenceCS__Group_7_0_1_1__0__Impl rule__ReferenceCS__Group_7_0_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14495:1: ( rule__ReferenceCS__Group_7_0_1_1__0__Impl rule__ReferenceCS__Group_7_0_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14496:2: rule__ReferenceCS__Group_7_0_1_1__0__Impl rule__ReferenceCS__Group_7_0_1_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__0__Impl_in_rule__ReferenceCS__Group_7_0_1_1__028164);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__0__Impl_in_rule__ReferenceCS__Group_7_0_1_1__030034);
             rule__ReferenceCS__Group_7_0_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__1_in_rule__ReferenceCS__Group_7_0_1_1__028167);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__1_in_rule__ReferenceCS__Group_7_0_1_1__030037);
             rule__ReferenceCS__Group_7_0_1_1__1();
 
             state._fsp--;
@@ -41893,22 +44361,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13485:1: rule__ReferenceCS__Group_7_0_1_1__0__Impl : ( 'key' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14503:1: rule__ReferenceCS__Group_7_0_1_1__0__Impl : ( 'key' ) ;
     public final void rule__ReferenceCS__Group_7_0_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13489:1: ( ( 'key' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13490:1: ( 'key' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14507:1: ( ( 'key' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14508:1: ( 'key' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13490:1: ( 'key' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13491:1: 'key'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14508:1: ( 'key' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14509:1: 'key'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getKeyKeyword_7_0_1_1_0()); 
             }
-            match(input,33,FollowSets001.FOLLOW_33_in_rule__ReferenceCS__Group_7_0_1_1__0__Impl28195); if (state.failed) return ;
+            match(input,33,FollowSets001.FOLLOW_33_in_rule__ReferenceCS__Group_7_0_1_1__0__Impl30065); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getKeyKeyword_7_0_1_1_0()); 
             }
@@ -41934,21 +44402,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13504:1: rule__ReferenceCS__Group_7_0_1_1__1 : rule__ReferenceCS__Group_7_0_1_1__1__Impl rule__ReferenceCS__Group_7_0_1_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14522:1: rule__ReferenceCS__Group_7_0_1_1__1 : rule__ReferenceCS__Group_7_0_1_1__1__Impl rule__ReferenceCS__Group_7_0_1_1__2 ;
     public final void rule__ReferenceCS__Group_7_0_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13508:1: ( rule__ReferenceCS__Group_7_0_1_1__1__Impl rule__ReferenceCS__Group_7_0_1_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13509:2: rule__ReferenceCS__Group_7_0_1_1__1__Impl rule__ReferenceCS__Group_7_0_1_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14526:1: ( rule__ReferenceCS__Group_7_0_1_1__1__Impl rule__ReferenceCS__Group_7_0_1_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14527:2: rule__ReferenceCS__Group_7_0_1_1__1__Impl rule__ReferenceCS__Group_7_0_1_1__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__1__Impl_in_rule__ReferenceCS__Group_7_0_1_1__128226);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__1__Impl_in_rule__ReferenceCS__Group_7_0_1_1__130096);
             rule__ReferenceCS__Group_7_0_1_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__2_in_rule__ReferenceCS__Group_7_0_1_1__128229);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__2_in_rule__ReferenceCS__Group_7_0_1_1__130099);
             rule__ReferenceCS__Group_7_0_1_1__2();
 
             state._fsp--;
@@ -41972,25 +44440,25 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13516:1: rule__ReferenceCS__Group_7_0_1_1__1__Impl : ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14534:1: rule__ReferenceCS__Group_7_0_1_1__1__Impl : ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 ) ) ;
     public final void rule__ReferenceCS__Group_7_0_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13520:1: ( ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13521:1: ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14538:1: ( ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14539:1: ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13521:1: ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13522:1: ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14539:1: ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14540:1: ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getReferredKeysAssignment_7_0_1_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13523:1: ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13523:2: rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14541:1: ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14541:2: rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1_in_rule__ReferenceCS__Group_7_0_1_1__1__Impl28256);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1_in_rule__ReferenceCS__Group_7_0_1_1__1__Impl30126);
             rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1();
 
             state._fsp--;
@@ -42023,21 +44491,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13533:1: rule__ReferenceCS__Group_7_0_1_1__2 : rule__ReferenceCS__Group_7_0_1_1__2__Impl rule__ReferenceCS__Group_7_0_1_1__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14551:1: rule__ReferenceCS__Group_7_0_1_1__2 : rule__ReferenceCS__Group_7_0_1_1__2__Impl rule__ReferenceCS__Group_7_0_1_1__3 ;
     public final void rule__ReferenceCS__Group_7_0_1_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13537:1: ( rule__ReferenceCS__Group_7_0_1_1__2__Impl rule__ReferenceCS__Group_7_0_1_1__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13538:2: rule__ReferenceCS__Group_7_0_1_1__2__Impl rule__ReferenceCS__Group_7_0_1_1__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14555:1: ( rule__ReferenceCS__Group_7_0_1_1__2__Impl rule__ReferenceCS__Group_7_0_1_1__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14556:2: rule__ReferenceCS__Group_7_0_1_1__2__Impl rule__ReferenceCS__Group_7_0_1_1__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__2__Impl_in_rule__ReferenceCS__Group_7_0_1_1__228286);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__2__Impl_in_rule__ReferenceCS__Group_7_0_1_1__230156);
             rule__ReferenceCS__Group_7_0_1_1__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__3_in_rule__ReferenceCS__Group_7_0_1_1__228289);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__3_in_rule__ReferenceCS__Group_7_0_1_1__230159);
             rule__ReferenceCS__Group_7_0_1_1__3();
 
             state._fsp--;
@@ -42061,37 +44529,37 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13545:1: rule__ReferenceCS__Group_7_0_1_1__2__Impl : ( ( rule__ReferenceCS__Group_7_0_1_1_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14563:1: rule__ReferenceCS__Group_7_0_1_1__2__Impl : ( ( rule__ReferenceCS__Group_7_0_1_1_2__0 )* ) ;
     public final void rule__ReferenceCS__Group_7_0_1_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13549:1: ( ( ( rule__ReferenceCS__Group_7_0_1_1_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13550:1: ( ( rule__ReferenceCS__Group_7_0_1_1_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14567:1: ( ( ( rule__ReferenceCS__Group_7_0_1_1_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14568:1: ( ( rule__ReferenceCS__Group_7_0_1_1_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13550:1: ( ( rule__ReferenceCS__Group_7_0_1_1_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13551:1: ( rule__ReferenceCS__Group_7_0_1_1_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14568:1: ( ( rule__ReferenceCS__Group_7_0_1_1_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14569:1: ( rule__ReferenceCS__Group_7_0_1_1_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getGroup_7_0_1_1_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13552:1: ( rule__ReferenceCS__Group_7_0_1_1_2__0 )*
-            loop161:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14570:1: ( rule__ReferenceCS__Group_7_0_1_1_2__0 )*
+            loop189:
             do {
-                int alt161=2;
-                int LA161_0 = input.LA(1);
+                int alt189=2;
+                int LA189_0 = input.LA(1);
 
-                if ( (LA161_0==98) ) {
-                    alt161=1;
+                if ( (LA189_0==107) ) {
+                    alt189=1;
                 }
 
 
-                switch (alt161) {
+                switch (alt189) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13552:2: rule__ReferenceCS__Group_7_0_1_1_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14570:2: rule__ReferenceCS__Group_7_0_1_1_2__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__0_in_rule__ReferenceCS__Group_7_0_1_1__2__Impl28316);
+            	    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__0_in_rule__ReferenceCS__Group_7_0_1_1__2__Impl30186);
             	    rule__ReferenceCS__Group_7_0_1_1_2__0();
 
             	    state._fsp--;
@@ -42101,7 +44569,7 @@
             	    break;
 
             	default :
-            	    break loop161;
+            	    break loop189;
                 }
             } while (true);
 
@@ -42130,16 +44598,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13562:1: rule__ReferenceCS__Group_7_0_1_1__3 : rule__ReferenceCS__Group_7_0_1_1__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14580:1: rule__ReferenceCS__Group_7_0_1_1__3 : rule__ReferenceCS__Group_7_0_1_1__3__Impl ;
     public final void rule__ReferenceCS__Group_7_0_1_1__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13566:1: ( rule__ReferenceCS__Group_7_0_1_1__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13567:2: rule__ReferenceCS__Group_7_0_1_1__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14584:1: ( rule__ReferenceCS__Group_7_0_1_1__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14585:2: rule__ReferenceCS__Group_7_0_1_1__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__3__Impl_in_rule__ReferenceCS__Group_7_0_1_1__328347);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1__3__Impl_in_rule__ReferenceCS__Group_7_0_1_1__330217);
             rule__ReferenceCS__Group_7_0_1_1__3__Impl();
 
             state._fsp--;
@@ -42163,22 +44631,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13573:1: rule__ReferenceCS__Group_7_0_1_1__3__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14591:1: rule__ReferenceCS__Group_7_0_1_1__3__Impl : ( ';' ) ;
     public final void rule__ReferenceCS__Group_7_0_1_1__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13577:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13578:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14595:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14596:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13578:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13579:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14596:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14597:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_3()); 
             }
-            match(input,53,FollowSets001.FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_1__3__Impl28375); if (state.failed) return ;
+            match(input,53,FollowSets001.FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_1__3__Impl30245); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_3()); 
             }
@@ -42204,21 +44672,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13600:1: rule__ReferenceCS__Group_7_0_1_1_2__0 : rule__ReferenceCS__Group_7_0_1_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_1_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14618:1: rule__ReferenceCS__Group_7_0_1_1_2__0 : rule__ReferenceCS__Group_7_0_1_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_1_2__1 ;
     public final void rule__ReferenceCS__Group_7_0_1_1_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13604:1: ( rule__ReferenceCS__Group_7_0_1_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_1_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13605:2: rule__ReferenceCS__Group_7_0_1_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_1_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14622:1: ( rule__ReferenceCS__Group_7_0_1_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_1_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14623:2: rule__ReferenceCS__Group_7_0_1_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_1_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__0__Impl_in_rule__ReferenceCS__Group_7_0_1_1_2__028414);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__0__Impl_in_rule__ReferenceCS__Group_7_0_1_1_2__030284);
             rule__ReferenceCS__Group_7_0_1_1_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__1_in_rule__ReferenceCS__Group_7_0_1_1_2__028417);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__1_in_rule__ReferenceCS__Group_7_0_1_1_2__030287);
             rule__ReferenceCS__Group_7_0_1_1_2__1();
 
             state._fsp--;
@@ -42242,22 +44710,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13612:1: rule__ReferenceCS__Group_7_0_1_1_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14630:1: rule__ReferenceCS__Group_7_0_1_1_2__0__Impl : ( ',' ) ;
     public final void rule__ReferenceCS__Group_7_0_1_1_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13616:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13617:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14634:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14635:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13617:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13618:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14635:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14636:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getCommaKeyword_7_0_1_1_2_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__ReferenceCS__Group_7_0_1_1_2__0__Impl28445); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__ReferenceCS__Group_7_0_1_1_2__0__Impl30315); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getCommaKeyword_7_0_1_1_2_0()); 
             }
@@ -42283,16 +44751,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13631:1: rule__ReferenceCS__Group_7_0_1_1_2__1 : rule__ReferenceCS__Group_7_0_1_1_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14649:1: rule__ReferenceCS__Group_7_0_1_1_2__1 : rule__ReferenceCS__Group_7_0_1_1_2__1__Impl ;
     public final void rule__ReferenceCS__Group_7_0_1_1_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13635:1: ( rule__ReferenceCS__Group_7_0_1_1_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13636:2: rule__ReferenceCS__Group_7_0_1_1_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14653:1: ( rule__ReferenceCS__Group_7_0_1_1_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14654:2: rule__ReferenceCS__Group_7_0_1_1_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__1__Impl_in_rule__ReferenceCS__Group_7_0_1_1_2__128476);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__1__Impl_in_rule__ReferenceCS__Group_7_0_1_1_2__130346);
             rule__ReferenceCS__Group_7_0_1_1_2__1__Impl();
 
             state._fsp--;
@@ -42316,25 +44784,25 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_1_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13642:1: rule__ReferenceCS__Group_7_0_1_1_2__1__Impl : ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14660:1: rule__ReferenceCS__Group_7_0_1_1_2__1__Impl : ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 ) ) ;
     public final void rule__ReferenceCS__Group_7_0_1_1_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13646:1: ( ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13647:1: ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14664:1: ( ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14665:1: ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13647:1: ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13648:1: ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14665:1: ( ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14666:1: ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getReferredKeysAssignment_7_0_1_1_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13649:1: ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13649:2: rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14667:1: ( rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14667:2: rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1_in_rule__ReferenceCS__Group_7_0_1_1_2__1__Impl28503);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1_in_rule__ReferenceCS__Group_7_0_1_1_2__1__Impl30373);
             rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1();
 
             state._fsp--;
@@ -42367,21 +44835,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13663:1: rule__ReferenceCS__Group_7_0_1_2__0 : rule__ReferenceCS__Group_7_0_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14681:1: rule__ReferenceCS__Group_7_0_1_2__0 : rule__ReferenceCS__Group_7_0_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_2__1 ;
     public final void rule__ReferenceCS__Group_7_0_1_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13667:1: ( rule__ReferenceCS__Group_7_0_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13668:2: rule__ReferenceCS__Group_7_0_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14685:1: ( rule__ReferenceCS__Group_7_0_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14686:2: rule__ReferenceCS__Group_7_0_1_2__0__Impl rule__ReferenceCS__Group_7_0_1_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__0__Impl_in_rule__ReferenceCS__Group_7_0_1_2__028537);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__0__Impl_in_rule__ReferenceCS__Group_7_0_1_2__030407);
             rule__ReferenceCS__Group_7_0_1_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__1_in_rule__ReferenceCS__Group_7_0_1_2__028540);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__1_in_rule__ReferenceCS__Group_7_0_1_2__030410);
             rule__ReferenceCS__Group_7_0_1_2__1();
 
             state._fsp--;
@@ -42405,22 +44873,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13675:1: rule__ReferenceCS__Group_7_0_1_2__0__Impl : ( 'derivation' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14693:1: rule__ReferenceCS__Group_7_0_1_2__0__Impl : ( 'derivation' ) ;
     public final void rule__ReferenceCS__Group_7_0_1_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13679:1: ( ( 'derivation' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13680:1: ( 'derivation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14697:1: ( ( 'derivation' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14698:1: ( 'derivation' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13680:1: ( 'derivation' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13681:1: 'derivation'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14698:1: ( 'derivation' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14699:1: 'derivation'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()); 
             }
-            match(input,25,FollowSets001.FOLLOW_25_in_rule__ReferenceCS__Group_7_0_1_2__0__Impl28568); if (state.failed) return ;
+            match(input,25,FollowSets001.FOLLOW_25_in_rule__ReferenceCS__Group_7_0_1_2__0__Impl30438); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()); 
             }
@@ -42446,21 +44914,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13694:1: rule__ReferenceCS__Group_7_0_1_2__1 : rule__ReferenceCS__Group_7_0_1_2__1__Impl rule__ReferenceCS__Group_7_0_1_2__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14712:1: rule__ReferenceCS__Group_7_0_1_2__1 : rule__ReferenceCS__Group_7_0_1_2__1__Impl rule__ReferenceCS__Group_7_0_1_2__2 ;
     public final void rule__ReferenceCS__Group_7_0_1_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13698:1: ( rule__ReferenceCS__Group_7_0_1_2__1__Impl rule__ReferenceCS__Group_7_0_1_2__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13699:2: rule__ReferenceCS__Group_7_0_1_2__1__Impl rule__ReferenceCS__Group_7_0_1_2__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14716:1: ( rule__ReferenceCS__Group_7_0_1_2__1__Impl rule__ReferenceCS__Group_7_0_1_2__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14717:2: rule__ReferenceCS__Group_7_0_1_2__1__Impl rule__ReferenceCS__Group_7_0_1_2__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__1__Impl_in_rule__ReferenceCS__Group_7_0_1_2__128599);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__1__Impl_in_rule__ReferenceCS__Group_7_0_1_2__130469);
             rule__ReferenceCS__Group_7_0_1_2__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__2_in_rule__ReferenceCS__Group_7_0_1_2__128602);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__2_in_rule__ReferenceCS__Group_7_0_1_2__130472);
             rule__ReferenceCS__Group_7_0_1_2__2();
 
             state._fsp--;
@@ -42484,33 +44952,33 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13706:1: rule__ReferenceCS__Group_7_0_1_2__1__Impl : ( ( ruleUnrestrictedName )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14724:1: rule__ReferenceCS__Group_7_0_1_2__1__Impl : ( ( ruleUnrestrictedName )? ) ;
     public final void rule__ReferenceCS__Group_7_0_1_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13710:1: ( ( ( ruleUnrestrictedName )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13711:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14728:1: ( ( ( ruleUnrestrictedName )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14729:1: ( ( ruleUnrestrictedName )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13711:1: ( ( ruleUnrestrictedName )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13712:1: ( ruleUnrestrictedName )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14729:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14730:1: ( ruleUnrestrictedName )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13713:1: ( ruleUnrestrictedName )?
-            int alt162=2;
-            int LA162_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14731:1: ( ruleUnrestrictedName )?
+            int alt190=2;
+            int LA190_0 = input.LA(1);
 
-            if ( ((LA162_0>=RULE_SIMPLE_ID && LA162_0<=RULE_ESCAPED_ID)||(LA162_0>=17 && LA162_0<=52)||(LA162_0>=55 && LA162_0<=60)) ) {
-                alt162=1;
+            if ( ((LA190_0>=RULE_SIMPLE_ID && LA190_0<=RULE_ESCAPED_ID)||(LA190_0>=17 && LA190_0<=52)||(LA190_0>=64 && LA190_0<=69)) ) {
+                alt190=1;
             }
-            switch (alt162) {
+            switch (alt190) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13713:3: ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14731:3: ruleUnrestrictedName
                     {
-                    pushFollow(FollowSets001.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__Group_7_0_1_2__1__Impl28630);
+                    pushFollow(FollowSets001.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__Group_7_0_1_2__1__Impl30500);
                     ruleUnrestrictedName();
 
                     state._fsp--;
@@ -42546,21 +45014,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13723:1: rule__ReferenceCS__Group_7_0_1_2__2 : rule__ReferenceCS__Group_7_0_1_2__2__Impl rule__ReferenceCS__Group_7_0_1_2__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14741:1: rule__ReferenceCS__Group_7_0_1_2__2 : rule__ReferenceCS__Group_7_0_1_2__2__Impl rule__ReferenceCS__Group_7_0_1_2__3 ;
     public final void rule__ReferenceCS__Group_7_0_1_2__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13727:1: ( rule__ReferenceCS__Group_7_0_1_2__2__Impl rule__ReferenceCS__Group_7_0_1_2__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13728:2: rule__ReferenceCS__Group_7_0_1_2__2__Impl rule__ReferenceCS__Group_7_0_1_2__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14745:1: ( rule__ReferenceCS__Group_7_0_1_2__2__Impl rule__ReferenceCS__Group_7_0_1_2__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14746:2: rule__ReferenceCS__Group_7_0_1_2__2__Impl rule__ReferenceCS__Group_7_0_1_2__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__2__Impl_in_rule__ReferenceCS__Group_7_0_1_2__228661);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__2__Impl_in_rule__ReferenceCS__Group_7_0_1_2__230531);
             rule__ReferenceCS__Group_7_0_1_2__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__3_in_rule__ReferenceCS__Group_7_0_1_2__228664);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__3_in_rule__ReferenceCS__Group_7_0_1_2__230534);
             rule__ReferenceCS__Group_7_0_1_2__3();
 
             state._fsp--;
@@ -42584,22 +45052,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13735:1: rule__ReferenceCS__Group_7_0_1_2__2__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14753:1: rule__ReferenceCS__Group_7_0_1_2__2__Impl : ( ':' ) ;
     public final void rule__ReferenceCS__Group_7_0_1_2__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13739:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13740:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14757:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14758:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13740:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13741:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14758:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14759:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__ReferenceCS__Group_7_0_1_2__2__Impl28692); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__ReferenceCS__Group_7_0_1_2__2__Impl30562); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()); 
             }
@@ -42625,21 +45093,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13754:1: rule__ReferenceCS__Group_7_0_1_2__3 : rule__ReferenceCS__Group_7_0_1_2__3__Impl rule__ReferenceCS__Group_7_0_1_2__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14772:1: rule__ReferenceCS__Group_7_0_1_2__3 : rule__ReferenceCS__Group_7_0_1_2__3__Impl rule__ReferenceCS__Group_7_0_1_2__4 ;
     public final void rule__ReferenceCS__Group_7_0_1_2__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13758:1: ( rule__ReferenceCS__Group_7_0_1_2__3__Impl rule__ReferenceCS__Group_7_0_1_2__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13759:2: rule__ReferenceCS__Group_7_0_1_2__3__Impl rule__ReferenceCS__Group_7_0_1_2__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14776:1: ( rule__ReferenceCS__Group_7_0_1_2__3__Impl rule__ReferenceCS__Group_7_0_1_2__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14777:2: rule__ReferenceCS__Group_7_0_1_2__3__Impl rule__ReferenceCS__Group_7_0_1_2__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__3__Impl_in_rule__ReferenceCS__Group_7_0_1_2__328723);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__3__Impl_in_rule__ReferenceCS__Group_7_0_1_2__330593);
             rule__ReferenceCS__Group_7_0_1_2__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__4_in_rule__ReferenceCS__Group_7_0_1_2__328726);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__4_in_rule__ReferenceCS__Group_7_0_1_2__330596);
             rule__ReferenceCS__Group_7_0_1_2__4();
 
             state._fsp--;
@@ -42663,33 +45131,33 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13766:1: rule__ReferenceCS__Group_7_0_1_2__3__Impl : ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14784:1: rule__ReferenceCS__Group_7_0_1_2__3__Impl : ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )? ) ;
     public final void rule__ReferenceCS__Group_7_0_1_2__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13770:1: ( ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13771:1: ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14788:1: ( ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14789:1: ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13771:1: ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13772:1: ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14789:1: ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14790:1: ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getOwnedDefaultExpressionsAssignment_7_0_1_2_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13773:1: ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )?
-            int alt163=2;
-            int LA163_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14791:1: ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 )?
+            int alt191=2;
+            int LA191_0 = input.LA(1);
 
-            if ( ((LA163_0>=RULE_INT && LA163_0<=RULE_SINGLE_QUOTED_STRING)||(LA163_0>=RULE_SIMPLE_ID && LA163_0<=RULE_UNQUOTED_STRING)||(LA163_0>=17 && LA163_0<=52)||(LA163_0>=55 && LA163_0<=63)||(LA163_0>=80 && LA163_0<=93)||LA163_0==95||(LA163_0>=105 && LA163_0<=107)||LA163_0==112||(LA163_0>=117 && LA163_0<=118)||(LA163_0>=131 && LA163_0<=132)) ) {
-                alt163=1;
+            if ( ((LA191_0>=RULE_INT && LA191_0<=RULE_SINGLE_QUOTED_STRING)||(LA191_0>=RULE_SIMPLE_ID && LA191_0<=RULE_UNQUOTED_STRING)||(LA191_0>=17 && LA191_0<=52)||(LA191_0>=64 && LA191_0<=72)||(LA191_0>=89 && LA191_0<=102)||LA191_0==104||(LA191_0>=114 && LA191_0<=116)||LA191_0==121||(LA191_0>=126 && LA191_0<=127)||(LA191_0>=131 && LA191_0<=132)) ) {
+                alt191=1;
             }
-            switch (alt163) {
+            switch (alt191) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13773:2: rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14791:2: rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3_in_rule__ReferenceCS__Group_7_0_1_2__3__Impl28753);
+                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3_in_rule__ReferenceCS__Group_7_0_1_2__3__Impl30623);
                     rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3();
 
                     state._fsp--;
@@ -42725,16 +45193,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13783:1: rule__ReferenceCS__Group_7_0_1_2__4 : rule__ReferenceCS__Group_7_0_1_2__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14801:1: rule__ReferenceCS__Group_7_0_1_2__4 : rule__ReferenceCS__Group_7_0_1_2__4__Impl ;
     public final void rule__ReferenceCS__Group_7_0_1_2__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13787:1: ( rule__ReferenceCS__Group_7_0_1_2__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13788:2: rule__ReferenceCS__Group_7_0_1_2__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14805:1: ( rule__ReferenceCS__Group_7_0_1_2__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14806:2: rule__ReferenceCS__Group_7_0_1_2__4__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__4__Impl_in_rule__ReferenceCS__Group_7_0_1_2__428784);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_2__4__Impl_in_rule__ReferenceCS__Group_7_0_1_2__430654);
             rule__ReferenceCS__Group_7_0_1_2__4__Impl();
 
             state._fsp--;
@@ -42758,22 +45226,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_2__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13794:1: rule__ReferenceCS__Group_7_0_1_2__4__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14812:1: rule__ReferenceCS__Group_7_0_1_2__4__Impl : ( ';' ) ;
     public final void rule__ReferenceCS__Group_7_0_1_2__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13798:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13799:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14816:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14817:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13799:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13800:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14817:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14818:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()); 
             }
-            match(input,53,FollowSets001.FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_2__4__Impl28812); if (state.failed) return ;
+            match(input,53,FollowSets001.FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_2__4__Impl30682); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()); 
             }
@@ -42799,21 +45267,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13823:1: rule__ReferenceCS__Group_7_0_1_3__0 : rule__ReferenceCS__Group_7_0_1_3__0__Impl rule__ReferenceCS__Group_7_0_1_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14841:1: rule__ReferenceCS__Group_7_0_1_3__0 : rule__ReferenceCS__Group_7_0_1_3__0__Impl rule__ReferenceCS__Group_7_0_1_3__1 ;
     public final void rule__ReferenceCS__Group_7_0_1_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13827:1: ( rule__ReferenceCS__Group_7_0_1_3__0__Impl rule__ReferenceCS__Group_7_0_1_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13828:2: rule__ReferenceCS__Group_7_0_1_3__0__Impl rule__ReferenceCS__Group_7_0_1_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14845:1: ( rule__ReferenceCS__Group_7_0_1_3__0__Impl rule__ReferenceCS__Group_7_0_1_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14846:2: rule__ReferenceCS__Group_7_0_1_3__0__Impl rule__ReferenceCS__Group_7_0_1_3__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__0__Impl_in_rule__ReferenceCS__Group_7_0_1_3__028853);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__0__Impl_in_rule__ReferenceCS__Group_7_0_1_3__030723);
             rule__ReferenceCS__Group_7_0_1_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__1_in_rule__ReferenceCS__Group_7_0_1_3__028856);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__1_in_rule__ReferenceCS__Group_7_0_1_3__030726);
             rule__ReferenceCS__Group_7_0_1_3__1();
 
             state._fsp--;
@@ -42837,22 +45305,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13835:1: rule__ReferenceCS__Group_7_0_1_3__0__Impl : ( 'initial' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14853:1: rule__ReferenceCS__Group_7_0_1_3__0__Impl : ( 'initial' ) ;
     public final void rule__ReferenceCS__Group_7_0_1_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13839:1: ( ( 'initial' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13840:1: ( 'initial' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14857:1: ( ( 'initial' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14858:1: ( 'initial' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13840:1: ( 'initial' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13841:1: 'initial'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14858:1: ( 'initial' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14859:1: 'initial'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()); 
             }
-            match(input,31,FollowSets001.FOLLOW_31_in_rule__ReferenceCS__Group_7_0_1_3__0__Impl28884); if (state.failed) return ;
+            match(input,31,FollowSets001.FOLLOW_31_in_rule__ReferenceCS__Group_7_0_1_3__0__Impl30754); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()); 
             }
@@ -42878,21 +45346,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13854:1: rule__ReferenceCS__Group_7_0_1_3__1 : rule__ReferenceCS__Group_7_0_1_3__1__Impl rule__ReferenceCS__Group_7_0_1_3__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14872:1: rule__ReferenceCS__Group_7_0_1_3__1 : rule__ReferenceCS__Group_7_0_1_3__1__Impl rule__ReferenceCS__Group_7_0_1_3__2 ;
     public final void rule__ReferenceCS__Group_7_0_1_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13858:1: ( rule__ReferenceCS__Group_7_0_1_3__1__Impl rule__ReferenceCS__Group_7_0_1_3__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13859:2: rule__ReferenceCS__Group_7_0_1_3__1__Impl rule__ReferenceCS__Group_7_0_1_3__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14876:1: ( rule__ReferenceCS__Group_7_0_1_3__1__Impl rule__ReferenceCS__Group_7_0_1_3__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14877:2: rule__ReferenceCS__Group_7_0_1_3__1__Impl rule__ReferenceCS__Group_7_0_1_3__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__1__Impl_in_rule__ReferenceCS__Group_7_0_1_3__128915);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__1__Impl_in_rule__ReferenceCS__Group_7_0_1_3__130785);
             rule__ReferenceCS__Group_7_0_1_3__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__2_in_rule__ReferenceCS__Group_7_0_1_3__128918);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__2_in_rule__ReferenceCS__Group_7_0_1_3__130788);
             rule__ReferenceCS__Group_7_0_1_3__2();
 
             state._fsp--;
@@ -42916,33 +45384,33 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13866:1: rule__ReferenceCS__Group_7_0_1_3__1__Impl : ( ( ruleUnrestrictedName )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14884:1: rule__ReferenceCS__Group_7_0_1_3__1__Impl : ( ( ruleUnrestrictedName )? ) ;
     public final void rule__ReferenceCS__Group_7_0_1_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13870:1: ( ( ( ruleUnrestrictedName )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13871:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14888:1: ( ( ( ruleUnrestrictedName )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14889:1: ( ( ruleUnrestrictedName )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13871:1: ( ( ruleUnrestrictedName )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13872:1: ( ruleUnrestrictedName )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14889:1: ( ( ruleUnrestrictedName )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14890:1: ( ruleUnrestrictedName )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13873:1: ( ruleUnrestrictedName )?
-            int alt164=2;
-            int LA164_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14891:1: ( ruleUnrestrictedName )?
+            int alt192=2;
+            int LA192_0 = input.LA(1);
 
-            if ( ((LA164_0>=RULE_SIMPLE_ID && LA164_0<=RULE_ESCAPED_ID)||(LA164_0>=17 && LA164_0<=52)||(LA164_0>=55 && LA164_0<=60)) ) {
-                alt164=1;
+            if ( ((LA192_0>=RULE_SIMPLE_ID && LA192_0<=RULE_ESCAPED_ID)||(LA192_0>=17 && LA192_0<=52)||(LA192_0>=64 && LA192_0<=69)) ) {
+                alt192=1;
             }
-            switch (alt164) {
+            switch (alt192) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13873:3: ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14891:3: ruleUnrestrictedName
                     {
-                    pushFollow(FollowSets001.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__Group_7_0_1_3__1__Impl28946);
+                    pushFollow(FollowSets001.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__Group_7_0_1_3__1__Impl30816);
                     ruleUnrestrictedName();
 
                     state._fsp--;
@@ -42978,21 +45446,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13883:1: rule__ReferenceCS__Group_7_0_1_3__2 : rule__ReferenceCS__Group_7_0_1_3__2__Impl rule__ReferenceCS__Group_7_0_1_3__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14901:1: rule__ReferenceCS__Group_7_0_1_3__2 : rule__ReferenceCS__Group_7_0_1_3__2__Impl rule__ReferenceCS__Group_7_0_1_3__3 ;
     public final void rule__ReferenceCS__Group_7_0_1_3__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13887:1: ( rule__ReferenceCS__Group_7_0_1_3__2__Impl rule__ReferenceCS__Group_7_0_1_3__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13888:2: rule__ReferenceCS__Group_7_0_1_3__2__Impl rule__ReferenceCS__Group_7_0_1_3__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14905:1: ( rule__ReferenceCS__Group_7_0_1_3__2__Impl rule__ReferenceCS__Group_7_0_1_3__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14906:2: rule__ReferenceCS__Group_7_0_1_3__2__Impl rule__ReferenceCS__Group_7_0_1_3__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__2__Impl_in_rule__ReferenceCS__Group_7_0_1_3__228977);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__2__Impl_in_rule__ReferenceCS__Group_7_0_1_3__230847);
             rule__ReferenceCS__Group_7_0_1_3__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__3_in_rule__ReferenceCS__Group_7_0_1_3__228980);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__3_in_rule__ReferenceCS__Group_7_0_1_3__230850);
             rule__ReferenceCS__Group_7_0_1_3__3();
 
             state._fsp--;
@@ -43016,22 +45484,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13895:1: rule__ReferenceCS__Group_7_0_1_3__2__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14913:1: rule__ReferenceCS__Group_7_0_1_3__2__Impl : ( ':' ) ;
     public final void rule__ReferenceCS__Group_7_0_1_3__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13899:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13900:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14917:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14918:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13900:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13901:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14918:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14919:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__ReferenceCS__Group_7_0_1_3__2__Impl29008); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__ReferenceCS__Group_7_0_1_3__2__Impl30878); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()); 
             }
@@ -43057,21 +45525,21 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13914:1: rule__ReferenceCS__Group_7_0_1_3__3 : rule__ReferenceCS__Group_7_0_1_3__3__Impl rule__ReferenceCS__Group_7_0_1_3__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14932:1: rule__ReferenceCS__Group_7_0_1_3__3 : rule__ReferenceCS__Group_7_0_1_3__3__Impl rule__ReferenceCS__Group_7_0_1_3__4 ;
     public final void rule__ReferenceCS__Group_7_0_1_3__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13918:1: ( rule__ReferenceCS__Group_7_0_1_3__3__Impl rule__ReferenceCS__Group_7_0_1_3__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13919:2: rule__ReferenceCS__Group_7_0_1_3__3__Impl rule__ReferenceCS__Group_7_0_1_3__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14936:1: ( rule__ReferenceCS__Group_7_0_1_3__3__Impl rule__ReferenceCS__Group_7_0_1_3__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14937:2: rule__ReferenceCS__Group_7_0_1_3__3__Impl rule__ReferenceCS__Group_7_0_1_3__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__3__Impl_in_rule__ReferenceCS__Group_7_0_1_3__329039);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__3__Impl_in_rule__ReferenceCS__Group_7_0_1_3__330909);
             rule__ReferenceCS__Group_7_0_1_3__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__4_in_rule__ReferenceCS__Group_7_0_1_3__329042);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__4_in_rule__ReferenceCS__Group_7_0_1_3__330912);
             rule__ReferenceCS__Group_7_0_1_3__4();
 
             state._fsp--;
@@ -43095,33 +45563,33 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13926:1: rule__ReferenceCS__Group_7_0_1_3__3__Impl : ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14944:1: rule__ReferenceCS__Group_7_0_1_3__3__Impl : ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )? ) ;
     public final void rule__ReferenceCS__Group_7_0_1_3__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13930:1: ( ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13931:1: ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14948:1: ( ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14949:1: ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13931:1: ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13932:1: ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14949:1: ( ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14950:1: ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getOwnedDefaultExpressionsAssignment_7_0_1_3_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13933:1: ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )?
-            int alt165=2;
-            int LA165_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14951:1: ( rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 )?
+            int alt193=2;
+            int LA193_0 = input.LA(1);
 
-            if ( ((LA165_0>=RULE_INT && LA165_0<=RULE_SINGLE_QUOTED_STRING)||(LA165_0>=RULE_SIMPLE_ID && LA165_0<=RULE_UNQUOTED_STRING)||(LA165_0>=17 && LA165_0<=52)||(LA165_0>=55 && LA165_0<=63)||(LA165_0>=80 && LA165_0<=93)||LA165_0==95||(LA165_0>=105 && LA165_0<=107)||LA165_0==112||(LA165_0>=117 && LA165_0<=118)||(LA165_0>=131 && LA165_0<=132)) ) {
-                alt165=1;
+            if ( ((LA193_0>=RULE_INT && LA193_0<=RULE_SINGLE_QUOTED_STRING)||(LA193_0>=RULE_SIMPLE_ID && LA193_0<=RULE_UNQUOTED_STRING)||(LA193_0>=17 && LA193_0<=52)||(LA193_0>=64 && LA193_0<=72)||(LA193_0>=89 && LA193_0<=102)||LA193_0==104||(LA193_0>=114 && LA193_0<=116)||LA193_0==121||(LA193_0>=126 && LA193_0<=127)||(LA193_0>=131 && LA193_0<=132)) ) {
+                alt193=1;
             }
-            switch (alt165) {
+            switch (alt193) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13933:2: rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14951:2: rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3_in_rule__ReferenceCS__Group_7_0_1_3__3__Impl29069);
+                    pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3_in_rule__ReferenceCS__Group_7_0_1_3__3__Impl30939);
                     rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3();
 
                     state._fsp--;
@@ -43157,16 +45625,16 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13943:1: rule__ReferenceCS__Group_7_0_1_3__4 : rule__ReferenceCS__Group_7_0_1_3__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14961:1: rule__ReferenceCS__Group_7_0_1_3__4 : rule__ReferenceCS__Group_7_0_1_3__4__Impl ;
     public final void rule__ReferenceCS__Group_7_0_1_3__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13947:1: ( rule__ReferenceCS__Group_7_0_1_3__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13948:2: rule__ReferenceCS__Group_7_0_1_3__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14965:1: ( rule__ReferenceCS__Group_7_0_1_3__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14966:2: rule__ReferenceCS__Group_7_0_1_3__4__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__4__Impl_in_rule__ReferenceCS__Group_7_0_1_3__429100);
+            pushFollow(FollowSets001.FOLLOW_rule__ReferenceCS__Group_7_0_1_3__4__Impl_in_rule__ReferenceCS__Group_7_0_1_3__430970);
             rule__ReferenceCS__Group_7_0_1_3__4__Impl();
 
             state._fsp--;
@@ -43190,22 +45658,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__Group_7_0_1_3__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13954:1: rule__ReferenceCS__Group_7_0_1_3__4__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14972:1: rule__ReferenceCS__Group_7_0_1_3__4__Impl : ( ';' ) ;
     public final void rule__ReferenceCS__Group_7_0_1_3__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13958:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13959:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14976:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14977:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13959:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13960:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14977:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14978:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()); 
             }
-            match(input,53,FollowSets001.FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_3__4__Impl29128); if (state.failed) return ;
+            match(input,53,FollowSets001.FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_3__4__Impl30998); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()); 
             }
@@ -43231,21 +45699,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13983:1: rule__StructuredClassCS__Group__0 : rule__StructuredClassCS__Group__0__Impl rule__StructuredClassCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15001:1: rule__StructuredClassCS__Group__0 : rule__StructuredClassCS__Group__0__Impl rule__StructuredClassCS__Group__1 ;
     public final void rule__StructuredClassCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13987:1: ( rule__StructuredClassCS__Group__0__Impl rule__StructuredClassCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13988:2: rule__StructuredClassCS__Group__0__Impl rule__StructuredClassCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15005:1: ( rule__StructuredClassCS__Group__0__Impl rule__StructuredClassCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15006:2: rule__StructuredClassCS__Group__0__Impl rule__StructuredClassCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__0__Impl_in_rule__StructuredClassCS__Group__029169);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__0__Impl_in_rule__StructuredClassCS__Group__031039);
             rule__StructuredClassCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__1_in_rule__StructuredClassCS__Group__029172);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__1_in_rule__StructuredClassCS__Group__031042);
             rule__StructuredClassCS__Group__1();
 
             state._fsp--;
@@ -43269,33 +45737,33 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13995:1: rule__StructuredClassCS__Group__0__Impl : ( ( rule__StructuredClassCS__IsAbstractAssignment_0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15013:1: rule__StructuredClassCS__Group__0__Impl : ( ( rule__StructuredClassCS__IsAbstractAssignment_0 )? ) ;
     public final void rule__StructuredClassCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13999:1: ( ( ( rule__StructuredClassCS__IsAbstractAssignment_0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14000:1: ( ( rule__StructuredClassCS__IsAbstractAssignment_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15017:1: ( ( ( rule__StructuredClassCS__IsAbstractAssignment_0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15018:1: ( ( rule__StructuredClassCS__IsAbstractAssignment_0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14000:1: ( ( rule__StructuredClassCS__IsAbstractAssignment_0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14001:1: ( rule__StructuredClassCS__IsAbstractAssignment_0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15018:1: ( ( rule__StructuredClassCS__IsAbstractAssignment_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15019:1: ( rule__StructuredClassCS__IsAbstractAssignment_0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getIsAbstractAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14002:1: ( rule__StructuredClassCS__IsAbstractAssignment_0 )?
-            int alt166=2;
-            int LA166_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15020:1: ( rule__StructuredClassCS__IsAbstractAssignment_0 )?
+            int alt194=2;
+            int LA194_0 = input.LA(1);
 
-            if ( (LA166_0==17) ) {
-                alt166=1;
+            if ( (LA194_0==17) ) {
+                alt194=1;
             }
-            switch (alt166) {
+            switch (alt194) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14002:2: rule__StructuredClassCS__IsAbstractAssignment_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15020:2: rule__StructuredClassCS__IsAbstractAssignment_0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__IsAbstractAssignment_0_in_rule__StructuredClassCS__Group__0__Impl29199);
+                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__IsAbstractAssignment_0_in_rule__StructuredClassCS__Group__0__Impl31069);
                     rule__StructuredClassCS__IsAbstractAssignment_0();
 
                     state._fsp--;
@@ -43331,21 +45799,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14012:1: rule__StructuredClassCS__Group__1 : rule__StructuredClassCS__Group__1__Impl rule__StructuredClassCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15030:1: rule__StructuredClassCS__Group__1 : rule__StructuredClassCS__Group__1__Impl rule__StructuredClassCS__Group__2 ;
     public final void rule__StructuredClassCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14016:1: ( rule__StructuredClassCS__Group__1__Impl rule__StructuredClassCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14017:2: rule__StructuredClassCS__Group__1__Impl rule__StructuredClassCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15034:1: ( rule__StructuredClassCS__Group__1__Impl rule__StructuredClassCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15035:2: rule__StructuredClassCS__Group__1__Impl rule__StructuredClassCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__1__Impl_in_rule__StructuredClassCS__Group__129230);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__1__Impl_in_rule__StructuredClassCS__Group__131100);
             rule__StructuredClassCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__2_in_rule__StructuredClassCS__Group__129233);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__2_in_rule__StructuredClassCS__Group__131103);
             rule__StructuredClassCS__Group__2();
 
             state._fsp--;
@@ -43369,22 +45837,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14024:1: rule__StructuredClassCS__Group__1__Impl : ( 'class' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15042:1: rule__StructuredClassCS__Group__1__Impl : ( 'class' ) ;
     public final void rule__StructuredClassCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14028:1: ( ( 'class' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14029:1: ( 'class' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15046:1: ( ( 'class' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15047:1: ( 'class' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14029:1: ( 'class' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14030:1: 'class'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15047:1: ( 'class' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15048:1: 'class'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getClassKeyword_1()); 
             }
-            match(input,21,FollowSets001.FOLLOW_21_in_rule__StructuredClassCS__Group__1__Impl29261); if (state.failed) return ;
+            match(input,21,FollowSets001.FOLLOW_21_in_rule__StructuredClassCS__Group__1__Impl31131); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getClassKeyword_1()); 
             }
@@ -43410,21 +45878,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14043:1: rule__StructuredClassCS__Group__2 : rule__StructuredClassCS__Group__2__Impl rule__StructuredClassCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15061:1: rule__StructuredClassCS__Group__2 : rule__StructuredClassCS__Group__2__Impl rule__StructuredClassCS__Group__3 ;
     public final void rule__StructuredClassCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14047:1: ( rule__StructuredClassCS__Group__2__Impl rule__StructuredClassCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14048:2: rule__StructuredClassCS__Group__2__Impl rule__StructuredClassCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15065:1: ( rule__StructuredClassCS__Group__2__Impl rule__StructuredClassCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15066:2: rule__StructuredClassCS__Group__2__Impl rule__StructuredClassCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__2__Impl_in_rule__StructuredClassCS__Group__229292);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__2__Impl_in_rule__StructuredClassCS__Group__231162);
             rule__StructuredClassCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__3_in_rule__StructuredClassCS__Group__229295);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__3_in_rule__StructuredClassCS__Group__231165);
             rule__StructuredClassCS__Group__3();
 
             state._fsp--;
@@ -43448,25 +45916,25 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14055:1: rule__StructuredClassCS__Group__2__Impl : ( ( rule__StructuredClassCS__NameAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15073:1: rule__StructuredClassCS__Group__2__Impl : ( ( rule__StructuredClassCS__NameAssignment_2 ) ) ;
     public final void rule__StructuredClassCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14059:1: ( ( ( rule__StructuredClassCS__NameAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14060:1: ( ( rule__StructuredClassCS__NameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15077:1: ( ( ( rule__StructuredClassCS__NameAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15078:1: ( ( rule__StructuredClassCS__NameAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14060:1: ( ( rule__StructuredClassCS__NameAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14061:1: ( rule__StructuredClassCS__NameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15078:1: ( ( rule__StructuredClassCS__NameAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15079:1: ( rule__StructuredClassCS__NameAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getNameAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14062:1: ( rule__StructuredClassCS__NameAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14062:2: rule__StructuredClassCS__NameAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15080:1: ( rule__StructuredClassCS__NameAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15080:2: rule__StructuredClassCS__NameAssignment_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__NameAssignment_2_in_rule__StructuredClassCS__Group__2__Impl29322);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__NameAssignment_2_in_rule__StructuredClassCS__Group__2__Impl31192);
             rule__StructuredClassCS__NameAssignment_2();
 
             state._fsp--;
@@ -43499,21 +45967,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14072:1: rule__StructuredClassCS__Group__3 : rule__StructuredClassCS__Group__3__Impl rule__StructuredClassCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15090:1: rule__StructuredClassCS__Group__3 : rule__StructuredClassCS__Group__3__Impl rule__StructuredClassCS__Group__4 ;
     public final void rule__StructuredClassCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14076:1: ( rule__StructuredClassCS__Group__3__Impl rule__StructuredClassCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14077:2: rule__StructuredClassCS__Group__3__Impl rule__StructuredClassCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15094:1: ( rule__StructuredClassCS__Group__3__Impl rule__StructuredClassCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15095:2: rule__StructuredClassCS__Group__3__Impl rule__StructuredClassCS__Group__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__3__Impl_in_rule__StructuredClassCS__Group__329352);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__3__Impl_in_rule__StructuredClassCS__Group__331222);
             rule__StructuredClassCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__4_in_rule__StructuredClassCS__Group__329355);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__4_in_rule__StructuredClassCS__Group__331225);
             rule__StructuredClassCS__Group__4();
 
             state._fsp--;
@@ -43537,33 +46005,33 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14084:1: rule__StructuredClassCS__Group__3__Impl : ( ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15102:1: rule__StructuredClassCS__Group__3__Impl : ( ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )? ) ;
     public final void rule__StructuredClassCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14088:1: ( ( ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14089:1: ( ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15106:1: ( ( ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15107:1: ( ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14089:1: ( ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14090:1: ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15107:1: ( ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15108:1: ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedSignatureAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14091:1: ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )?
-            int alt167=2;
-            int LA167_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15109:1: ( rule__StructuredClassCS__OwnedSignatureAssignment_3 )?
+            int alt195=2;
+            int LA195_0 = input.LA(1);
 
-            if ( (LA167_0==67||LA167_0==95) ) {
-                alt167=1;
+            if ( (LA195_0==76||LA195_0==104) ) {
+                alt195=1;
             }
-            switch (alt167) {
+            switch (alt195) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14091:2: rule__StructuredClassCS__OwnedSignatureAssignment_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15109:2: rule__StructuredClassCS__OwnedSignatureAssignment_3
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__OwnedSignatureAssignment_3_in_rule__StructuredClassCS__Group__3__Impl29382);
+                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__OwnedSignatureAssignment_3_in_rule__StructuredClassCS__Group__3__Impl31252);
                     rule__StructuredClassCS__OwnedSignatureAssignment_3();
 
                     state._fsp--;
@@ -43599,21 +46067,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14101:1: rule__StructuredClassCS__Group__4 : rule__StructuredClassCS__Group__4__Impl rule__StructuredClassCS__Group__5 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15119:1: rule__StructuredClassCS__Group__4 : rule__StructuredClassCS__Group__4__Impl rule__StructuredClassCS__Group__5 ;
     public final void rule__StructuredClassCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14105:1: ( rule__StructuredClassCS__Group__4__Impl rule__StructuredClassCS__Group__5 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14106:2: rule__StructuredClassCS__Group__4__Impl rule__StructuredClassCS__Group__5
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15123:1: ( rule__StructuredClassCS__Group__4__Impl rule__StructuredClassCS__Group__5 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15124:2: rule__StructuredClassCS__Group__4__Impl rule__StructuredClassCS__Group__5
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__4__Impl_in_rule__StructuredClassCS__Group__429413);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__4__Impl_in_rule__StructuredClassCS__Group__431283);
             rule__StructuredClassCS__Group__4__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__5_in_rule__StructuredClassCS__Group__429416);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__5_in_rule__StructuredClassCS__Group__431286);
             rule__StructuredClassCS__Group__5();
 
             state._fsp--;
@@ -43637,33 +46105,33 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14113:1: rule__StructuredClassCS__Group__4__Impl : ( ( rule__StructuredClassCS__Group_4__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15131:1: rule__StructuredClassCS__Group__4__Impl : ( ( rule__StructuredClassCS__Group_4__0 )? ) ;
     public final void rule__StructuredClassCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14117:1: ( ( ( rule__StructuredClassCS__Group_4__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14118:1: ( ( rule__StructuredClassCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15135:1: ( ( ( rule__StructuredClassCS__Group_4__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15136:1: ( ( rule__StructuredClassCS__Group_4__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14118:1: ( ( rule__StructuredClassCS__Group_4__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14119:1: ( rule__StructuredClassCS__Group_4__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15136:1: ( ( rule__StructuredClassCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15137:1: ( rule__StructuredClassCS__Group_4__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getGroup_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14120:1: ( rule__StructuredClassCS__Group_4__0 )?
-            int alt168=2;
-            int LA168_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15138:1: ( rule__StructuredClassCS__Group_4__0 )?
+            int alt196=2;
+            int LA196_0 = input.LA(1);
 
-            if ( (LA168_0==28) ) {
-                alt168=1;
+            if ( (LA196_0==28) ) {
+                alt196=1;
             }
-            switch (alt168) {
+            switch (alt196) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14120:2: rule__StructuredClassCS__Group_4__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15138:2: rule__StructuredClassCS__Group_4__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__0_in_rule__StructuredClassCS__Group__4__Impl29443);
+                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__0_in_rule__StructuredClassCS__Group__4__Impl31313);
                     rule__StructuredClassCS__Group_4__0();
 
                     state._fsp--;
@@ -43699,21 +46167,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14130:1: rule__StructuredClassCS__Group__5 : rule__StructuredClassCS__Group__5__Impl rule__StructuredClassCS__Group__6 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15148:1: rule__StructuredClassCS__Group__5 : rule__StructuredClassCS__Group__5__Impl rule__StructuredClassCS__Group__6 ;
     public final void rule__StructuredClassCS__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14134:1: ( rule__StructuredClassCS__Group__5__Impl rule__StructuredClassCS__Group__6 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14135:2: rule__StructuredClassCS__Group__5__Impl rule__StructuredClassCS__Group__6
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15152:1: ( rule__StructuredClassCS__Group__5__Impl rule__StructuredClassCS__Group__6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15153:2: rule__StructuredClassCS__Group__5__Impl rule__StructuredClassCS__Group__6
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__5__Impl_in_rule__StructuredClassCS__Group__529474);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__5__Impl_in_rule__StructuredClassCS__Group__531344);
             rule__StructuredClassCS__Group__5__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__6_in_rule__StructuredClassCS__Group__529477);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__6_in_rule__StructuredClassCS__Group__531347);
             rule__StructuredClassCS__Group__6();
 
             state._fsp--;
@@ -43737,33 +46205,33 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__5__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14142:1: rule__StructuredClassCS__Group__5__Impl : ( ( rule__StructuredClassCS__Group_5__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15160:1: rule__StructuredClassCS__Group__5__Impl : ( ( rule__StructuredClassCS__Group_5__0 )? ) ;
     public final void rule__StructuredClassCS__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14146:1: ( ( ( rule__StructuredClassCS__Group_5__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14147:1: ( ( rule__StructuredClassCS__Group_5__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15164:1: ( ( ( rule__StructuredClassCS__Group_5__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15165:1: ( ( rule__StructuredClassCS__Group_5__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14147:1: ( ( rule__StructuredClassCS__Group_5__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14148:1: ( rule__StructuredClassCS__Group_5__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15165:1: ( ( rule__StructuredClassCS__Group_5__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15166:1: ( rule__StructuredClassCS__Group_5__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getGroup_5()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14149:1: ( rule__StructuredClassCS__Group_5__0 )?
-            int alt169=2;
-            int LA169_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15167:1: ( rule__StructuredClassCS__Group_5__0 )?
+            int alt197=2;
+            int LA197_0 = input.LA(1);
 
-            if ( (LA169_0==97) ) {
-                alt169=1;
+            if ( (LA197_0==106) ) {
+                alt197=1;
             }
-            switch (alt169) {
+            switch (alt197) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14149:2: rule__StructuredClassCS__Group_5__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15167:2: rule__StructuredClassCS__Group_5__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_5__0_in_rule__StructuredClassCS__Group__5__Impl29504);
+                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_5__0_in_rule__StructuredClassCS__Group__5__Impl31374);
                     rule__StructuredClassCS__Group_5__0();
 
                     state._fsp--;
@@ -43799,21 +46267,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14159:1: rule__StructuredClassCS__Group__6 : rule__StructuredClassCS__Group__6__Impl rule__StructuredClassCS__Group__7 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15177:1: rule__StructuredClassCS__Group__6 : rule__StructuredClassCS__Group__6__Impl rule__StructuredClassCS__Group__7 ;
     public final void rule__StructuredClassCS__Group__6() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14163:1: ( rule__StructuredClassCS__Group__6__Impl rule__StructuredClassCS__Group__7 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14164:2: rule__StructuredClassCS__Group__6__Impl rule__StructuredClassCS__Group__7
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15181:1: ( rule__StructuredClassCS__Group__6__Impl rule__StructuredClassCS__Group__7 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15182:2: rule__StructuredClassCS__Group__6__Impl rule__StructuredClassCS__Group__7
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__6__Impl_in_rule__StructuredClassCS__Group__629535);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__6__Impl_in_rule__StructuredClassCS__Group__631405);
             rule__StructuredClassCS__Group__6__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__7_in_rule__StructuredClassCS__Group__629538);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__7_in_rule__StructuredClassCS__Group__631408);
             rule__StructuredClassCS__Group__7();
 
             state._fsp--;
@@ -43837,44 +46305,44 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__6__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14171:1: rule__StructuredClassCS__Group__6__Impl : ( ( rule__StructuredClassCS__Group_6__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15189:1: rule__StructuredClassCS__Group__6__Impl : ( ( rule__StructuredClassCS__Group_6__0 )? ) ;
     public final void rule__StructuredClassCS__Group__6__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14175:1: ( ( ( rule__StructuredClassCS__Group_6__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14176:1: ( ( rule__StructuredClassCS__Group_6__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15193:1: ( ( ( rule__StructuredClassCS__Group_6__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15194:1: ( ( rule__StructuredClassCS__Group_6__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14176:1: ( ( rule__StructuredClassCS__Group_6__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14177:1: ( rule__StructuredClassCS__Group_6__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15194:1: ( ( rule__StructuredClassCS__Group_6__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15195:1: ( rule__StructuredClassCS__Group_6__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getGroup_6()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14178:1: ( rule__StructuredClassCS__Group_6__0 )?
-            int alt170=2;
-            int LA170_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15196:1: ( rule__StructuredClassCS__Group_6__0 )?
+            int alt198=2;
+            int LA198_0 = input.LA(1);
 
-            if ( (LA170_0==99) ) {
-                int LA170_1 = input.LA(2);
+            if ( (LA198_0==108) ) {
+                int LA198_1 = input.LA(2);
 
-                if ( (LA170_1==32) ) {
-                    alt170=1;
-                }
-                else if ( (LA170_1==100) ) {
-                    int LA170_4 = input.LA(3);
+                if ( (LA198_1==109) ) {
+                    int LA198_3 = input.LA(3);
 
-                    if ( (LA170_4==53||LA170_4==99) ) {
-                        alt170=1;
+                    if ( (LA198_3==53||LA198_3==108) ) {
+                        alt198=1;
                     }
                 }
+                else if ( (LA198_1==32) ) {
+                    alt198=1;
+                }
             }
-            switch (alt170) {
+            switch (alt198) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14178:2: rule__StructuredClassCS__Group_6__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15196:2: rule__StructuredClassCS__Group_6__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__0_in_rule__StructuredClassCS__Group__6__Impl29565);
+                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__0_in_rule__StructuredClassCS__Group__6__Impl31435);
                     rule__StructuredClassCS__Group_6__0();
 
                     state._fsp--;
@@ -43910,16 +46378,16 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__7"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14188:1: rule__StructuredClassCS__Group__7 : rule__StructuredClassCS__Group__7__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15206:1: rule__StructuredClassCS__Group__7 : rule__StructuredClassCS__Group__7__Impl ;
     public final void rule__StructuredClassCS__Group__7() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14192:1: ( rule__StructuredClassCS__Group__7__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14193:2: rule__StructuredClassCS__Group__7__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15210:1: ( rule__StructuredClassCS__Group__7__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15211:2: rule__StructuredClassCS__Group__7__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__7__Impl_in_rule__StructuredClassCS__Group__729596);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group__7__Impl_in_rule__StructuredClassCS__Group__731466);
             rule__StructuredClassCS__Group__7__Impl();
 
             state._fsp--;
@@ -43943,25 +46411,25 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group__7__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14199:1: rule__StructuredClassCS__Group__7__Impl : ( ( rule__StructuredClassCS__Alternatives_7 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15217:1: rule__StructuredClassCS__Group__7__Impl : ( ( rule__StructuredClassCS__Alternatives_7 ) ) ;
     public final void rule__StructuredClassCS__Group__7__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14203:1: ( ( ( rule__StructuredClassCS__Alternatives_7 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14204:1: ( ( rule__StructuredClassCS__Alternatives_7 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15221:1: ( ( ( rule__StructuredClassCS__Alternatives_7 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15222:1: ( ( rule__StructuredClassCS__Alternatives_7 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14204:1: ( ( rule__StructuredClassCS__Alternatives_7 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14205:1: ( rule__StructuredClassCS__Alternatives_7 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15222:1: ( ( rule__StructuredClassCS__Alternatives_7 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15223:1: ( rule__StructuredClassCS__Alternatives_7 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getAlternatives_7()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14206:1: ( rule__StructuredClassCS__Alternatives_7 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14206:2: rule__StructuredClassCS__Alternatives_7
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15224:1: ( rule__StructuredClassCS__Alternatives_7 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15224:2: rule__StructuredClassCS__Alternatives_7
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Alternatives_7_in_rule__StructuredClassCS__Group__7__Impl29623);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Alternatives_7_in_rule__StructuredClassCS__Group__7__Impl31493);
             rule__StructuredClassCS__Alternatives_7();
 
             state._fsp--;
@@ -43994,21 +46462,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14232:1: rule__StructuredClassCS__Group_4__0 : rule__StructuredClassCS__Group_4__0__Impl rule__StructuredClassCS__Group_4__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15250:1: rule__StructuredClassCS__Group_4__0 : rule__StructuredClassCS__Group_4__0__Impl rule__StructuredClassCS__Group_4__1 ;
     public final void rule__StructuredClassCS__Group_4__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14236:1: ( rule__StructuredClassCS__Group_4__0__Impl rule__StructuredClassCS__Group_4__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14237:2: rule__StructuredClassCS__Group_4__0__Impl rule__StructuredClassCS__Group_4__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15254:1: ( rule__StructuredClassCS__Group_4__0__Impl rule__StructuredClassCS__Group_4__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15255:2: rule__StructuredClassCS__Group_4__0__Impl rule__StructuredClassCS__Group_4__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__0__Impl_in_rule__StructuredClassCS__Group_4__029669);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__0__Impl_in_rule__StructuredClassCS__Group_4__031539);
             rule__StructuredClassCS__Group_4__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__1_in_rule__StructuredClassCS__Group_4__029672);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__1_in_rule__StructuredClassCS__Group_4__031542);
             rule__StructuredClassCS__Group_4__1();
 
             state._fsp--;
@@ -44032,22 +46500,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14244:1: rule__StructuredClassCS__Group_4__0__Impl : ( 'extends' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15262:1: rule__StructuredClassCS__Group_4__0__Impl : ( 'extends' ) ;
     public final void rule__StructuredClassCS__Group_4__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14248:1: ( ( 'extends' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14249:1: ( 'extends' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15266:1: ( ( 'extends' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15267:1: ( 'extends' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14249:1: ( 'extends' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14250:1: 'extends'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15267:1: ( 'extends' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15268:1: 'extends'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getExtendsKeyword_4_0()); 
             }
-            match(input,28,FollowSets001.FOLLOW_28_in_rule__StructuredClassCS__Group_4__0__Impl29700); if (state.failed) return ;
+            match(input,28,FollowSets001.FOLLOW_28_in_rule__StructuredClassCS__Group_4__0__Impl31570); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getExtendsKeyword_4_0()); 
             }
@@ -44073,21 +46541,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14263:1: rule__StructuredClassCS__Group_4__1 : rule__StructuredClassCS__Group_4__1__Impl rule__StructuredClassCS__Group_4__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15281:1: rule__StructuredClassCS__Group_4__1 : rule__StructuredClassCS__Group_4__1__Impl rule__StructuredClassCS__Group_4__2 ;
     public final void rule__StructuredClassCS__Group_4__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14267:1: ( rule__StructuredClassCS__Group_4__1__Impl rule__StructuredClassCS__Group_4__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14268:2: rule__StructuredClassCS__Group_4__1__Impl rule__StructuredClassCS__Group_4__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15285:1: ( rule__StructuredClassCS__Group_4__1__Impl rule__StructuredClassCS__Group_4__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15286:2: rule__StructuredClassCS__Group_4__1__Impl rule__StructuredClassCS__Group_4__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__1__Impl_in_rule__StructuredClassCS__Group_4__129731);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__1__Impl_in_rule__StructuredClassCS__Group_4__131601);
             rule__StructuredClassCS__Group_4__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__2_in_rule__StructuredClassCS__Group_4__129734);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__2_in_rule__StructuredClassCS__Group_4__131604);
             rule__StructuredClassCS__Group_4__2();
 
             state._fsp--;
@@ -44111,25 +46579,25 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14275:1: rule__StructuredClassCS__Group_4__1__Impl : ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15293:1: rule__StructuredClassCS__Group_4__1__Impl : ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 ) ) ;
     public final void rule__StructuredClassCS__Group_4__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14279:1: ( ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14280:1: ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15297:1: ( ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15298:1: ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14280:1: ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14281:1: ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15298:1: ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15299:1: ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedSuperTypesAssignment_4_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14282:1: ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14282:2: rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15300:1: ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15300:2: rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1_in_rule__StructuredClassCS__Group_4__1__Impl29761);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1_in_rule__StructuredClassCS__Group_4__1__Impl31631);
             rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1();
 
             state._fsp--;
@@ -44162,16 +46630,16 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14292:1: rule__StructuredClassCS__Group_4__2 : rule__StructuredClassCS__Group_4__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15310:1: rule__StructuredClassCS__Group_4__2 : rule__StructuredClassCS__Group_4__2__Impl ;
     public final void rule__StructuredClassCS__Group_4__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14296:1: ( rule__StructuredClassCS__Group_4__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14297:2: rule__StructuredClassCS__Group_4__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15314:1: ( rule__StructuredClassCS__Group_4__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15315:2: rule__StructuredClassCS__Group_4__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__2__Impl_in_rule__StructuredClassCS__Group_4__229791);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4__2__Impl_in_rule__StructuredClassCS__Group_4__231661);
             rule__StructuredClassCS__Group_4__2__Impl();
 
             state._fsp--;
@@ -44195,37 +46663,37 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14303:1: rule__StructuredClassCS__Group_4__2__Impl : ( ( rule__StructuredClassCS__Group_4_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15321:1: rule__StructuredClassCS__Group_4__2__Impl : ( ( rule__StructuredClassCS__Group_4_2__0 )* ) ;
     public final void rule__StructuredClassCS__Group_4__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14307:1: ( ( ( rule__StructuredClassCS__Group_4_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14308:1: ( ( rule__StructuredClassCS__Group_4_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15325:1: ( ( ( rule__StructuredClassCS__Group_4_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15326:1: ( ( rule__StructuredClassCS__Group_4_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14308:1: ( ( rule__StructuredClassCS__Group_4_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14309:1: ( rule__StructuredClassCS__Group_4_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15326:1: ( ( rule__StructuredClassCS__Group_4_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15327:1: ( rule__StructuredClassCS__Group_4_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getGroup_4_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14310:1: ( rule__StructuredClassCS__Group_4_2__0 )*
-            loop171:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15328:1: ( rule__StructuredClassCS__Group_4_2__0 )*
+            loop199:
             do {
-                int alt171=2;
-                int LA171_0 = input.LA(1);
+                int alt199=2;
+                int LA199_0 = input.LA(1);
 
-                if ( (LA171_0==98) ) {
-                    alt171=1;
+                if ( (LA199_0==107) ) {
+                    alt199=1;
                 }
 
 
-                switch (alt171) {
+                switch (alt199) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14310:2: rule__StructuredClassCS__Group_4_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15328:2: rule__StructuredClassCS__Group_4_2__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4_2__0_in_rule__StructuredClassCS__Group_4__2__Impl29818);
+            	    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4_2__0_in_rule__StructuredClassCS__Group_4__2__Impl31688);
             	    rule__StructuredClassCS__Group_4_2__0();
 
             	    state._fsp--;
@@ -44235,7 +46703,7 @@
             	    break;
 
             	default :
-            	    break loop171;
+            	    break loop199;
                 }
             } while (true);
 
@@ -44264,21 +46732,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14326:1: rule__StructuredClassCS__Group_4_2__0 : rule__StructuredClassCS__Group_4_2__0__Impl rule__StructuredClassCS__Group_4_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15344:1: rule__StructuredClassCS__Group_4_2__0 : rule__StructuredClassCS__Group_4_2__0__Impl rule__StructuredClassCS__Group_4_2__1 ;
     public final void rule__StructuredClassCS__Group_4_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14330:1: ( rule__StructuredClassCS__Group_4_2__0__Impl rule__StructuredClassCS__Group_4_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14331:2: rule__StructuredClassCS__Group_4_2__0__Impl rule__StructuredClassCS__Group_4_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15348:1: ( rule__StructuredClassCS__Group_4_2__0__Impl rule__StructuredClassCS__Group_4_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15349:2: rule__StructuredClassCS__Group_4_2__0__Impl rule__StructuredClassCS__Group_4_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4_2__0__Impl_in_rule__StructuredClassCS__Group_4_2__029855);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4_2__0__Impl_in_rule__StructuredClassCS__Group_4_2__031725);
             rule__StructuredClassCS__Group_4_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4_2__1_in_rule__StructuredClassCS__Group_4_2__029858);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4_2__1_in_rule__StructuredClassCS__Group_4_2__031728);
             rule__StructuredClassCS__Group_4_2__1();
 
             state._fsp--;
@@ -44302,22 +46770,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14338:1: rule__StructuredClassCS__Group_4_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15356:1: rule__StructuredClassCS__Group_4_2__0__Impl : ( ',' ) ;
     public final void rule__StructuredClassCS__Group_4_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14342:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14343:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15360:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15361:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14343:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14344:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15361:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15362:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getCommaKeyword_4_2_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__StructuredClassCS__Group_4_2__0__Impl29886); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__StructuredClassCS__Group_4_2__0__Impl31756); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getCommaKeyword_4_2_0()); 
             }
@@ -44343,16 +46811,16 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14357:1: rule__StructuredClassCS__Group_4_2__1 : rule__StructuredClassCS__Group_4_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15375:1: rule__StructuredClassCS__Group_4_2__1 : rule__StructuredClassCS__Group_4_2__1__Impl ;
     public final void rule__StructuredClassCS__Group_4_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14361:1: ( rule__StructuredClassCS__Group_4_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14362:2: rule__StructuredClassCS__Group_4_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15379:1: ( rule__StructuredClassCS__Group_4_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15380:2: rule__StructuredClassCS__Group_4_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4_2__1__Impl_in_rule__StructuredClassCS__Group_4_2__129917);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_4_2__1__Impl_in_rule__StructuredClassCS__Group_4_2__131787);
             rule__StructuredClassCS__Group_4_2__1__Impl();
 
             state._fsp--;
@@ -44376,25 +46844,25 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_4_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14368:1: rule__StructuredClassCS__Group_4_2__1__Impl : ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15386:1: rule__StructuredClassCS__Group_4_2__1__Impl : ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 ) ) ;
     public final void rule__StructuredClassCS__Group_4_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14372:1: ( ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14373:1: ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15390:1: ( ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15391:1: ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14373:1: ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14374:1: ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15391:1: ( ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15392:1: ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedSuperTypesAssignment_4_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14375:1: ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14375:2: rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15393:1: ( rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15393:2: rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1_in_rule__StructuredClassCS__Group_4_2__1__Impl29944);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1_in_rule__StructuredClassCS__Group_4_2__1__Impl31814);
             rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1();
 
             state._fsp--;
@@ -44427,21 +46895,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_5__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14389:1: rule__StructuredClassCS__Group_5__0 : rule__StructuredClassCS__Group_5__0__Impl rule__StructuredClassCS__Group_5__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15407:1: rule__StructuredClassCS__Group_5__0 : rule__StructuredClassCS__Group_5__0__Impl rule__StructuredClassCS__Group_5__1 ;
     public final void rule__StructuredClassCS__Group_5__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14393:1: ( rule__StructuredClassCS__Group_5__0__Impl rule__StructuredClassCS__Group_5__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14394:2: rule__StructuredClassCS__Group_5__0__Impl rule__StructuredClassCS__Group_5__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15411:1: ( rule__StructuredClassCS__Group_5__0__Impl rule__StructuredClassCS__Group_5__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15412:2: rule__StructuredClassCS__Group_5__0__Impl rule__StructuredClassCS__Group_5__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_5__0__Impl_in_rule__StructuredClassCS__Group_5__029978);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_5__0__Impl_in_rule__StructuredClassCS__Group_5__031848);
             rule__StructuredClassCS__Group_5__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_5__1_in_rule__StructuredClassCS__Group_5__029981);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_5__1_in_rule__StructuredClassCS__Group_5__031851);
             rule__StructuredClassCS__Group_5__1();
 
             state._fsp--;
@@ -44465,22 +46933,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_5__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14401:1: rule__StructuredClassCS__Group_5__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15419:1: rule__StructuredClassCS__Group_5__0__Impl : ( ':' ) ;
     public final void rule__StructuredClassCS__Group_5__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14405:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14406:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15423:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15424:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14406:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14407:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15424:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15425:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getColonKeyword_5_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__StructuredClassCS__Group_5__0__Impl30009); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__StructuredClassCS__Group_5__0__Impl31879); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getColonKeyword_5_0()); 
             }
@@ -44506,16 +46974,16 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_5__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14420:1: rule__StructuredClassCS__Group_5__1 : rule__StructuredClassCS__Group_5__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15438:1: rule__StructuredClassCS__Group_5__1 : rule__StructuredClassCS__Group_5__1__Impl ;
     public final void rule__StructuredClassCS__Group_5__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14424:1: ( rule__StructuredClassCS__Group_5__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14425:2: rule__StructuredClassCS__Group_5__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15442:1: ( rule__StructuredClassCS__Group_5__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15443:2: rule__StructuredClassCS__Group_5__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_5__1__Impl_in_rule__StructuredClassCS__Group_5__130040);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_5__1__Impl_in_rule__StructuredClassCS__Group_5__131910);
             rule__StructuredClassCS__Group_5__1__Impl();
 
             state._fsp--;
@@ -44539,25 +47007,25 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_5__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14431:1: rule__StructuredClassCS__Group_5__1__Impl : ( ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15449:1: rule__StructuredClassCS__Group_5__1__Impl : ( ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 ) ) ;
     public final void rule__StructuredClassCS__Group_5__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14435:1: ( ( ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14436:1: ( ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15453:1: ( ( ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15454:1: ( ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14436:1: ( ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14437:1: ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15454:1: ( ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15455:1: ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getInstanceClassNameAssignment_5_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14438:1: ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14438:2: rule__StructuredClassCS__InstanceClassNameAssignment_5_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15456:1: ( rule__StructuredClassCS__InstanceClassNameAssignment_5_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15456:2: rule__StructuredClassCS__InstanceClassNameAssignment_5_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__InstanceClassNameAssignment_5_1_in_rule__StructuredClassCS__Group_5__1__Impl30067);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__InstanceClassNameAssignment_5_1_in_rule__StructuredClassCS__Group_5__1__Impl31937);
             rule__StructuredClassCS__InstanceClassNameAssignment_5_1();
 
             state._fsp--;
@@ -44590,21 +47058,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_6__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14452:1: rule__StructuredClassCS__Group_6__0 : rule__StructuredClassCS__Group_6__0__Impl rule__StructuredClassCS__Group_6__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15470:1: rule__StructuredClassCS__Group_6__0 : rule__StructuredClassCS__Group_6__0__Impl rule__StructuredClassCS__Group_6__1 ;
     public final void rule__StructuredClassCS__Group_6__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14456:1: ( rule__StructuredClassCS__Group_6__0__Impl rule__StructuredClassCS__Group_6__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14457:2: rule__StructuredClassCS__Group_6__0__Impl rule__StructuredClassCS__Group_6__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15474:1: ( rule__StructuredClassCS__Group_6__0__Impl rule__StructuredClassCS__Group_6__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15475:2: rule__StructuredClassCS__Group_6__0__Impl rule__StructuredClassCS__Group_6__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__0__Impl_in_rule__StructuredClassCS__Group_6__030101);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__0__Impl_in_rule__StructuredClassCS__Group_6__031971);
             rule__StructuredClassCS__Group_6__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__1_in_rule__StructuredClassCS__Group_6__030104);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__1_in_rule__StructuredClassCS__Group_6__031974);
             rule__StructuredClassCS__Group_6__1();
 
             state._fsp--;
@@ -44628,22 +47096,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_6__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14464:1: rule__StructuredClassCS__Group_6__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15482:1: rule__StructuredClassCS__Group_6__0__Impl : ( '{' ) ;
     public final void rule__StructuredClassCS__Group_6__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14468:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14469:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15486:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15487:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14469:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14470:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15487:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15488:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_6_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__StructuredClassCS__Group_6__0__Impl30132); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__StructuredClassCS__Group_6__0__Impl32002); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_6_0()); 
             }
@@ -44669,21 +47137,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_6__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14483:1: rule__StructuredClassCS__Group_6__1 : rule__StructuredClassCS__Group_6__1__Impl rule__StructuredClassCS__Group_6__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15501:1: rule__StructuredClassCS__Group_6__1 : rule__StructuredClassCS__Group_6__1__Impl rule__StructuredClassCS__Group_6__2 ;
     public final void rule__StructuredClassCS__Group_6__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14487:1: ( rule__StructuredClassCS__Group_6__1__Impl rule__StructuredClassCS__Group_6__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14488:2: rule__StructuredClassCS__Group_6__1__Impl rule__StructuredClassCS__Group_6__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15505:1: ( rule__StructuredClassCS__Group_6__1__Impl rule__StructuredClassCS__Group_6__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15506:2: rule__StructuredClassCS__Group_6__1__Impl rule__StructuredClassCS__Group_6__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__1__Impl_in_rule__StructuredClassCS__Group_6__130163);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__1__Impl_in_rule__StructuredClassCS__Group_6__132033);
             rule__StructuredClassCS__Group_6__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__2_in_rule__StructuredClassCS__Group_6__130166);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__2_in_rule__StructuredClassCS__Group_6__132036);
             rule__StructuredClassCS__Group_6__2();
 
             state._fsp--;
@@ -44707,33 +47175,33 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_6__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14495:1: rule__StructuredClassCS__Group_6__1__Impl : ( ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15513:1: rule__StructuredClassCS__Group_6__1__Impl : ( ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )? ) ;
     public final void rule__StructuredClassCS__Group_6__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14499:1: ( ( ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14500:1: ( ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15517:1: ( ( ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15518:1: ( ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14500:1: ( ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14501:1: ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15518:1: ( ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15519:1: ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getIsInterfaceAssignment_6_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14502:1: ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )?
-            int alt172=2;
-            int LA172_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15520:1: ( rule__StructuredClassCS__IsInterfaceAssignment_6_1 )?
+            int alt200=2;
+            int LA200_0 = input.LA(1);
 
-            if ( (LA172_0==32) ) {
-                alt172=1;
+            if ( (LA200_0==32) ) {
+                alt200=1;
             }
-            switch (alt172) {
+            switch (alt200) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14502:2: rule__StructuredClassCS__IsInterfaceAssignment_6_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15520:2: rule__StructuredClassCS__IsInterfaceAssignment_6_1
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__IsInterfaceAssignment_6_1_in_rule__StructuredClassCS__Group_6__1__Impl30193);
+                    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__IsInterfaceAssignment_6_1_in_rule__StructuredClassCS__Group_6__1__Impl32063);
                     rule__StructuredClassCS__IsInterfaceAssignment_6_1();
 
                     state._fsp--;
@@ -44769,16 +47237,16 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_6__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14512:1: rule__StructuredClassCS__Group_6__2 : rule__StructuredClassCS__Group_6__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15530:1: rule__StructuredClassCS__Group_6__2 : rule__StructuredClassCS__Group_6__2__Impl ;
     public final void rule__StructuredClassCS__Group_6__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14516:1: ( rule__StructuredClassCS__Group_6__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14517:2: rule__StructuredClassCS__Group_6__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15534:1: ( rule__StructuredClassCS__Group_6__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15535:2: rule__StructuredClassCS__Group_6__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__2__Impl_in_rule__StructuredClassCS__Group_6__230224);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_6__2__Impl_in_rule__StructuredClassCS__Group_6__232094);
             rule__StructuredClassCS__Group_6__2__Impl();
 
             state._fsp--;
@@ -44802,22 +47270,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_6__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14523:1: rule__StructuredClassCS__Group_6__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15541:1: rule__StructuredClassCS__Group_6__2__Impl : ( '}' ) ;
     public final void rule__StructuredClassCS__Group_6__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14527:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14528:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15545:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15546:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14528:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14529:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15546:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15547:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_6_2()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__StructuredClassCS__Group_6__2__Impl30252); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__StructuredClassCS__Group_6__2__Impl32122); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_6_2()); 
             }
@@ -44843,21 +47311,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_7_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14548:1: rule__StructuredClassCS__Group_7_0__0 : rule__StructuredClassCS__Group_7_0__0__Impl rule__StructuredClassCS__Group_7_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15566:1: rule__StructuredClassCS__Group_7_0__0 : rule__StructuredClassCS__Group_7_0__0__Impl rule__StructuredClassCS__Group_7_0__1 ;
     public final void rule__StructuredClassCS__Group_7_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14552:1: ( rule__StructuredClassCS__Group_7_0__0__Impl rule__StructuredClassCS__Group_7_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14553:2: rule__StructuredClassCS__Group_7_0__0__Impl rule__StructuredClassCS__Group_7_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15570:1: ( rule__StructuredClassCS__Group_7_0__0__Impl rule__StructuredClassCS__Group_7_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15571:2: rule__StructuredClassCS__Group_7_0__0__Impl rule__StructuredClassCS__Group_7_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__0__Impl_in_rule__StructuredClassCS__Group_7_0__030289);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__0__Impl_in_rule__StructuredClassCS__Group_7_0__032159);
             rule__StructuredClassCS__Group_7_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__1_in_rule__StructuredClassCS__Group_7_0__030292);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__1_in_rule__StructuredClassCS__Group_7_0__032162);
             rule__StructuredClassCS__Group_7_0__1();
 
             state._fsp--;
@@ -44881,22 +47349,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_7_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14560:1: rule__StructuredClassCS__Group_7_0__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15578:1: rule__StructuredClassCS__Group_7_0__0__Impl : ( '{' ) ;
     public final void rule__StructuredClassCS__Group_7_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14564:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14565:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15582:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15583:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14565:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14566:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15583:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15584:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_7_0_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__StructuredClassCS__Group_7_0__0__Impl30320); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__StructuredClassCS__Group_7_0__0__Impl32190); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_7_0_0()); 
             }
@@ -44922,21 +47390,21 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_7_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14579:1: rule__StructuredClassCS__Group_7_0__1 : rule__StructuredClassCS__Group_7_0__1__Impl rule__StructuredClassCS__Group_7_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15597:1: rule__StructuredClassCS__Group_7_0__1 : rule__StructuredClassCS__Group_7_0__1__Impl rule__StructuredClassCS__Group_7_0__2 ;
     public final void rule__StructuredClassCS__Group_7_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14583:1: ( rule__StructuredClassCS__Group_7_0__1__Impl rule__StructuredClassCS__Group_7_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14584:2: rule__StructuredClassCS__Group_7_0__1__Impl rule__StructuredClassCS__Group_7_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15601:1: ( rule__StructuredClassCS__Group_7_0__1__Impl rule__StructuredClassCS__Group_7_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15602:2: rule__StructuredClassCS__Group_7_0__1__Impl rule__StructuredClassCS__Group_7_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__1__Impl_in_rule__StructuredClassCS__Group_7_0__130351);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__1__Impl_in_rule__StructuredClassCS__Group_7_0__132221);
             rule__StructuredClassCS__Group_7_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__2_in_rule__StructuredClassCS__Group_7_0__130354);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__2_in_rule__StructuredClassCS__Group_7_0__132224);
             rule__StructuredClassCS__Group_7_0__2();
 
             state._fsp--;
@@ -44960,37 +47428,37 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_7_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14591:1: rule__StructuredClassCS__Group_7_0__1__Impl : ( ( rule__StructuredClassCS__Alternatives_7_0_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15609:1: rule__StructuredClassCS__Group_7_0__1__Impl : ( ( rule__StructuredClassCS__Alternatives_7_0_1 )* ) ;
     public final void rule__StructuredClassCS__Group_7_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14595:1: ( ( ( rule__StructuredClassCS__Alternatives_7_0_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14596:1: ( ( rule__StructuredClassCS__Alternatives_7_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15613:1: ( ( ( rule__StructuredClassCS__Alternatives_7_0_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15614:1: ( ( rule__StructuredClassCS__Alternatives_7_0_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14596:1: ( ( rule__StructuredClassCS__Alternatives_7_0_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14597:1: ( rule__StructuredClassCS__Alternatives_7_0_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15614:1: ( ( rule__StructuredClassCS__Alternatives_7_0_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15615:1: ( rule__StructuredClassCS__Alternatives_7_0_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getAlternatives_7_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14598:1: ( rule__StructuredClassCS__Alternatives_7_0_1 )*
-            loop173:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15616:1: ( rule__StructuredClassCS__Alternatives_7_0_1 )*
+            loop201:
             do {
-                int alt173=2;
-                int LA173_0 = input.LA(1);
+                int alt201=2;
+                int LA201_0 = input.LA(1);
 
-                if ( (LA173_0==18||LA173_0==20||LA173_0==24||LA173_0==36||LA173_0==42||LA173_0==46||(LA173_0>=55 && LA173_0<=57)||LA173_0==60) ) {
-                    alt173=1;
+                if ( (LA201_0==18||LA201_0==20||LA201_0==24||LA201_0==36||LA201_0==42||LA201_0==46||(LA201_0>=64 && LA201_0<=66)||LA201_0==69) ) {
+                    alt201=1;
                 }
 
 
-                switch (alt173) {
+                switch (alt201) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14598:2: rule__StructuredClassCS__Alternatives_7_0_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15616:2: rule__StructuredClassCS__Alternatives_7_0_1
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Alternatives_7_0_1_in_rule__StructuredClassCS__Group_7_0__1__Impl30381);
+            	    pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Alternatives_7_0_1_in_rule__StructuredClassCS__Group_7_0__1__Impl32251);
             	    rule__StructuredClassCS__Alternatives_7_0_1();
 
             	    state._fsp--;
@@ -45000,7 +47468,7 @@
             	    break;
 
             	default :
-            	    break loop173;
+            	    break loop201;
                 }
             } while (true);
 
@@ -45029,16 +47497,16 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_7_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14608:1: rule__StructuredClassCS__Group_7_0__2 : rule__StructuredClassCS__Group_7_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15626:1: rule__StructuredClassCS__Group_7_0__2 : rule__StructuredClassCS__Group_7_0__2__Impl ;
     public final void rule__StructuredClassCS__Group_7_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14612:1: ( rule__StructuredClassCS__Group_7_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14613:2: rule__StructuredClassCS__Group_7_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15630:1: ( rule__StructuredClassCS__Group_7_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15631:2: rule__StructuredClassCS__Group_7_0__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__2__Impl_in_rule__StructuredClassCS__Group_7_0__230412);
+            pushFollow(FollowSets001.FOLLOW_rule__StructuredClassCS__Group_7_0__2__Impl_in_rule__StructuredClassCS__Group_7_0__232282);
             rule__StructuredClassCS__Group_7_0__2__Impl();
 
             state._fsp--;
@@ -45062,22 +47530,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__Group_7_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14619:1: rule__StructuredClassCS__Group_7_0__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15637:1: rule__StructuredClassCS__Group_7_0__2__Impl : ( '}' ) ;
     public final void rule__StructuredClassCS__Group_7_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14623:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14624:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15641:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15642:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14624:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14625:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15642:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15643:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_7_0_2()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__StructuredClassCS__Group_7_0__2__Impl30440); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__StructuredClassCS__Group_7_0__2__Impl32310); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_7_0_2()); 
             }
@@ -45103,21 +47571,21 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14644:1: rule__SysMLCS__Group__0 : rule__SysMLCS__Group__0__Impl rule__SysMLCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15662:1: rule__SysMLCS__Group__0 : rule__SysMLCS__Group__0__Impl rule__SysMLCS__Group__1 ;
     public final void rule__SysMLCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14648:1: ( rule__SysMLCS__Group__0__Impl rule__SysMLCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14649:2: rule__SysMLCS__Group__0__Impl rule__SysMLCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15666:1: ( rule__SysMLCS__Group__0__Impl rule__SysMLCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15667:2: rule__SysMLCS__Group__0__Impl rule__SysMLCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__0__Impl_in_rule__SysMLCS__Group__030477);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__0__Impl_in_rule__SysMLCS__Group__032347);
             rule__SysMLCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__1_in_rule__SysMLCS__Group__030480);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__1_in_rule__SysMLCS__Group__032350);
             rule__SysMLCS__Group__1();
 
             state._fsp--;
@@ -45141,23 +47609,23 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14656:1: rule__SysMLCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15674:1: rule__SysMLCS__Group__0__Impl : ( () ) ;
     public final void rule__SysMLCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14660:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14661:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15678:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15679:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14661:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14662:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15679:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15680:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getSysMLCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14663:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14665:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15681:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15683:1: 
             {
             }
 
@@ -45182,21 +47650,21 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14675:1: rule__SysMLCS__Group__1 : rule__SysMLCS__Group__1__Impl rule__SysMLCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15693:1: rule__SysMLCS__Group__1 : rule__SysMLCS__Group__1__Impl rule__SysMLCS__Group__2 ;
     public final void rule__SysMLCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14679:1: ( rule__SysMLCS__Group__1__Impl rule__SysMLCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14680:2: rule__SysMLCS__Group__1__Impl rule__SysMLCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15697:1: ( rule__SysMLCS__Group__1__Impl rule__SysMLCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15698:2: rule__SysMLCS__Group__1__Impl rule__SysMLCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__1__Impl_in_rule__SysMLCS__Group__130538);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__1__Impl_in_rule__SysMLCS__Group__132408);
             rule__SysMLCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__2_in_rule__SysMLCS__Group__130541);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__2_in_rule__SysMLCS__Group__132411);
             rule__SysMLCS__Group__2();
 
             state._fsp--;
@@ -45220,22 +47688,22 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14687:1: rule__SysMLCS__Group__1__Impl : ( 'sysml' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15705:1: rule__SysMLCS__Group__1__Impl : ( 'sysml' ) ;
     public final void rule__SysMLCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14691:1: ( ( 'sysml' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14692:1: ( 'sysml' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15709:1: ( ( 'sysml' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15710:1: ( 'sysml' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14692:1: ( 'sysml' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14693:1: 'sysml'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15710:1: ( 'sysml' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15711:1: 'sysml'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getSysmlKeyword_1()); 
             }
-            match(input,60,FollowSets001.FOLLOW_60_in_rule__SysMLCS__Group__1__Impl30569); if (state.failed) return ;
+            match(input,69,FollowSets001.FOLLOW_69_in_rule__SysMLCS__Group__1__Impl32439); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSysMLCSAccess().getSysmlKeyword_1()); 
             }
@@ -45261,16 +47729,16 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14706:1: rule__SysMLCS__Group__2 : rule__SysMLCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15724:1: rule__SysMLCS__Group__2 : rule__SysMLCS__Group__2__Impl ;
     public final void rule__SysMLCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14710:1: ( rule__SysMLCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14711:2: rule__SysMLCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15728:1: ( rule__SysMLCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15729:2: rule__SysMLCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__2__Impl_in_rule__SysMLCS__Group__230600);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group__2__Impl_in_rule__SysMLCS__Group__232470);
             rule__SysMLCS__Group__2__Impl();
 
             state._fsp--;
@@ -45294,25 +47762,25 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14717:1: rule__SysMLCS__Group__2__Impl : ( ( rule__SysMLCS__Alternatives_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15735:1: rule__SysMLCS__Group__2__Impl : ( ( rule__SysMLCS__Alternatives_2 ) ) ;
     public final void rule__SysMLCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14721:1: ( ( ( rule__SysMLCS__Alternatives_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14722:1: ( ( rule__SysMLCS__Alternatives_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15739:1: ( ( ( rule__SysMLCS__Alternatives_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15740:1: ( ( rule__SysMLCS__Alternatives_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14722:1: ( ( rule__SysMLCS__Alternatives_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14723:1: ( rule__SysMLCS__Alternatives_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15740:1: ( ( rule__SysMLCS__Alternatives_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15741:1: ( rule__SysMLCS__Alternatives_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getAlternatives_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14724:1: ( rule__SysMLCS__Alternatives_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14724:2: rule__SysMLCS__Alternatives_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15742:1: ( rule__SysMLCS__Alternatives_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15742:2: rule__SysMLCS__Alternatives_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Alternatives_2_in_rule__SysMLCS__Group__2__Impl30627);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Alternatives_2_in_rule__SysMLCS__Group__2__Impl32497);
             rule__SysMLCS__Alternatives_2();
 
             state._fsp--;
@@ -45345,21 +47813,21 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14740:1: rule__SysMLCS__Group_2_0__0 : rule__SysMLCS__Group_2_0__0__Impl rule__SysMLCS__Group_2_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15758:1: rule__SysMLCS__Group_2_0__0 : rule__SysMLCS__Group_2_0__0__Impl rule__SysMLCS__Group_2_0__1 ;
     public final void rule__SysMLCS__Group_2_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14744:1: ( rule__SysMLCS__Group_2_0__0__Impl rule__SysMLCS__Group_2_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14745:2: rule__SysMLCS__Group_2_0__0__Impl rule__SysMLCS__Group_2_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15762:1: ( rule__SysMLCS__Group_2_0__0__Impl rule__SysMLCS__Group_2_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15763:2: rule__SysMLCS__Group_2_0__0__Impl rule__SysMLCS__Group_2_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_0__0__Impl_in_rule__SysMLCS__Group_2_0__030663);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_0__0__Impl_in_rule__SysMLCS__Group_2_0__032533);
             rule__SysMLCS__Group_2_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_0__1_in_rule__SysMLCS__Group_2_0__030666);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_0__1_in_rule__SysMLCS__Group_2_0__032536);
             rule__SysMLCS__Group_2_0__1();
 
             state._fsp--;
@@ -45383,25 +47851,25 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14752:1: rule__SysMLCS__Group_2_0__0__Impl : ( ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15770:1: rule__SysMLCS__Group_2_0__0__Impl : ( ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 ) ) ;
     public final void rule__SysMLCS__Group_2_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14756:1: ( ( ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14757:1: ( ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15774:1: ( ( ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15775:1: ( ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14757:1: ( ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14758:1: ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15775:1: ( ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15776:1: ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getOwnedDetailsAssignment_2_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14759:1: ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14759:2: rule__SysMLCS__OwnedDetailsAssignment_2_0_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15777:1: ( rule__SysMLCS__OwnedDetailsAssignment_2_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15777:2: rule__SysMLCS__OwnedDetailsAssignment_2_0_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__OwnedDetailsAssignment_2_0_0_in_rule__SysMLCS__Group_2_0__0__Impl30693);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__OwnedDetailsAssignment_2_0_0_in_rule__SysMLCS__Group_2_0__0__Impl32563);
             rule__SysMLCS__OwnedDetailsAssignment_2_0_0();
 
             state._fsp--;
@@ -45434,16 +47902,16 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14769:1: rule__SysMLCS__Group_2_0__1 : rule__SysMLCS__Group_2_0__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15787:1: rule__SysMLCS__Group_2_0__1 : rule__SysMLCS__Group_2_0__1__Impl ;
     public final void rule__SysMLCS__Group_2_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14773:1: ( rule__SysMLCS__Group_2_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14774:2: rule__SysMLCS__Group_2_0__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15791:1: ( rule__SysMLCS__Group_2_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15792:2: rule__SysMLCS__Group_2_0__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_0__1__Impl_in_rule__SysMLCS__Group_2_0__130723);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_0__1__Impl_in_rule__SysMLCS__Group_2_0__132593);
             rule__SysMLCS__Group_2_0__1__Impl();
 
             state._fsp--;
@@ -45467,22 +47935,22 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14780:1: rule__SysMLCS__Group_2_0__1__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15798:1: rule__SysMLCS__Group_2_0__1__Impl : ( ';' ) ;
     public final void rule__SysMLCS__Group_2_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14784:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14785:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15802:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15803:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14785:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14786:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15803:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15804:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getSemicolonKeyword_2_0_1()); 
             }
-            match(input,53,FollowSets001.FOLLOW_53_in_rule__SysMLCS__Group_2_0__1__Impl30751); if (state.failed) return ;
+            match(input,53,FollowSets001.FOLLOW_53_in_rule__SysMLCS__Group_2_0__1__Impl32621); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSysMLCSAccess().getSemicolonKeyword_2_0_1()); 
             }
@@ -45508,21 +47976,21 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14803:1: rule__SysMLCS__Group_2_1__0 : rule__SysMLCS__Group_2_1__0__Impl rule__SysMLCS__Group_2_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15821:1: rule__SysMLCS__Group_2_1__0 : rule__SysMLCS__Group_2_1__0__Impl rule__SysMLCS__Group_2_1__1 ;
     public final void rule__SysMLCS__Group_2_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14807:1: ( rule__SysMLCS__Group_2_1__0__Impl rule__SysMLCS__Group_2_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14808:2: rule__SysMLCS__Group_2_1__0__Impl rule__SysMLCS__Group_2_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15825:1: ( rule__SysMLCS__Group_2_1__0__Impl rule__SysMLCS__Group_2_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15826:2: rule__SysMLCS__Group_2_1__0__Impl rule__SysMLCS__Group_2_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__0__Impl_in_rule__SysMLCS__Group_2_1__030786);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__0__Impl_in_rule__SysMLCS__Group_2_1__032656);
             rule__SysMLCS__Group_2_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__1_in_rule__SysMLCS__Group_2_1__030789);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__1_in_rule__SysMLCS__Group_2_1__032659);
             rule__SysMLCS__Group_2_1__1();
 
             state._fsp--;
@@ -45546,22 +48014,22 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14815:1: rule__SysMLCS__Group_2_1__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15833:1: rule__SysMLCS__Group_2_1__0__Impl : ( '{' ) ;
     public final void rule__SysMLCS__Group_2_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14819:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14820:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15837:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15838:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14820:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14821:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15838:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15839:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getLeftCurlyBracketKeyword_2_1_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__SysMLCS__Group_2_1__0__Impl30817); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__SysMLCS__Group_2_1__0__Impl32687); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSysMLCSAccess().getLeftCurlyBracketKeyword_2_1_0()); 
             }
@@ -45587,21 +48055,21 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14834:1: rule__SysMLCS__Group_2_1__1 : rule__SysMLCS__Group_2_1__1__Impl rule__SysMLCS__Group_2_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15852:1: rule__SysMLCS__Group_2_1__1 : rule__SysMLCS__Group_2_1__1__Impl rule__SysMLCS__Group_2_1__2 ;
     public final void rule__SysMLCS__Group_2_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14838:1: ( rule__SysMLCS__Group_2_1__1__Impl rule__SysMLCS__Group_2_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14839:2: rule__SysMLCS__Group_2_1__1__Impl rule__SysMLCS__Group_2_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15856:1: ( rule__SysMLCS__Group_2_1__1__Impl rule__SysMLCS__Group_2_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15857:2: rule__SysMLCS__Group_2_1__1__Impl rule__SysMLCS__Group_2_1__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__1__Impl_in_rule__SysMLCS__Group_2_1__130848);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__1__Impl_in_rule__SysMLCS__Group_2_1__132718);
             rule__SysMLCS__Group_2_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__2_in_rule__SysMLCS__Group_2_1__130851);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__2_in_rule__SysMLCS__Group_2_1__132721);
             rule__SysMLCS__Group_2_1__2();
 
             state._fsp--;
@@ -45625,37 +48093,37 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14846:1: rule__SysMLCS__Group_2_1__1__Impl : ( ( rule__SysMLCS__Group_2_1_1__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15864:1: rule__SysMLCS__Group_2_1__1__Impl : ( ( rule__SysMLCS__Group_2_1_1__0 )* ) ;
     public final void rule__SysMLCS__Group_2_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14850:1: ( ( ( rule__SysMLCS__Group_2_1_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14851:1: ( ( rule__SysMLCS__Group_2_1_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15868:1: ( ( ( rule__SysMLCS__Group_2_1_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15869:1: ( ( rule__SysMLCS__Group_2_1_1__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14851:1: ( ( rule__SysMLCS__Group_2_1_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14852:1: ( rule__SysMLCS__Group_2_1_1__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15869:1: ( ( rule__SysMLCS__Group_2_1_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15870:1: ( rule__SysMLCS__Group_2_1_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getGroup_2_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14853:1: ( rule__SysMLCS__Group_2_1_1__0 )*
-            loop174:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15871:1: ( rule__SysMLCS__Group_2_1_1__0 )*
+            loop202:
             do {
-                int alt174=2;
-                int LA174_0 = input.LA(1);
+                int alt202=2;
+                int LA202_0 = input.LA(1);
 
-                if ( (LA174_0==RULE_SINGLE_QUOTED_STRING||(LA174_0>=RULE_SIMPLE_ID && LA174_0<=RULE_ESCAPED_ID)||(LA174_0>=17 && LA174_0<=52)||(LA174_0>=55 && LA174_0<=60)) ) {
-                    alt174=1;
+                if ( (LA202_0==RULE_SINGLE_QUOTED_STRING||(LA202_0>=RULE_SIMPLE_ID && LA202_0<=RULE_ESCAPED_ID)||(LA202_0>=17 && LA202_0<=52)||(LA202_0>=64 && LA202_0<=69)) ) {
+                    alt202=1;
                 }
 
 
-                switch (alt174) {
+                switch (alt202) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14853:2: rule__SysMLCS__Group_2_1_1__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15871:2: rule__SysMLCS__Group_2_1_1__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1_1__0_in_rule__SysMLCS__Group_2_1__1__Impl30878);
+            	    pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1_1__0_in_rule__SysMLCS__Group_2_1__1__Impl32748);
             	    rule__SysMLCS__Group_2_1_1__0();
 
             	    state._fsp--;
@@ -45665,7 +48133,7 @@
             	    break;
 
             	default :
-            	    break loop174;
+            	    break loop202;
                 }
             } while (true);
 
@@ -45694,16 +48162,16 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14863:1: rule__SysMLCS__Group_2_1__2 : rule__SysMLCS__Group_2_1__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15881:1: rule__SysMLCS__Group_2_1__2 : rule__SysMLCS__Group_2_1__2__Impl ;
     public final void rule__SysMLCS__Group_2_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14867:1: ( rule__SysMLCS__Group_2_1__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14868:2: rule__SysMLCS__Group_2_1__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15885:1: ( rule__SysMLCS__Group_2_1__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15886:2: rule__SysMLCS__Group_2_1__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__2__Impl_in_rule__SysMLCS__Group_2_1__230909);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1__2__Impl_in_rule__SysMLCS__Group_2_1__232779);
             rule__SysMLCS__Group_2_1__2__Impl();
 
             state._fsp--;
@@ -45727,22 +48195,22 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14874:1: rule__SysMLCS__Group_2_1__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15892:1: rule__SysMLCS__Group_2_1__2__Impl : ( '}' ) ;
     public final void rule__SysMLCS__Group_2_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14878:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14879:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15896:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15897:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14879:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14880:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15897:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15898:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getRightCurlyBracketKeyword_2_1_2()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__SysMLCS__Group_2_1__2__Impl30937); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__SysMLCS__Group_2_1__2__Impl32807); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSysMLCSAccess().getRightCurlyBracketKeyword_2_1_2()); 
             }
@@ -45768,21 +48236,21 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14899:1: rule__SysMLCS__Group_2_1_1__0 : rule__SysMLCS__Group_2_1_1__0__Impl rule__SysMLCS__Group_2_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15917:1: rule__SysMLCS__Group_2_1_1__0 : rule__SysMLCS__Group_2_1_1__0__Impl rule__SysMLCS__Group_2_1_1__1 ;
     public final void rule__SysMLCS__Group_2_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14903:1: ( rule__SysMLCS__Group_2_1_1__0__Impl rule__SysMLCS__Group_2_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14904:2: rule__SysMLCS__Group_2_1_1__0__Impl rule__SysMLCS__Group_2_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15921:1: ( rule__SysMLCS__Group_2_1_1__0__Impl rule__SysMLCS__Group_2_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15922:2: rule__SysMLCS__Group_2_1_1__0__Impl rule__SysMLCS__Group_2_1_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1_1__0__Impl_in_rule__SysMLCS__Group_2_1_1__030974);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1_1__0__Impl_in_rule__SysMLCS__Group_2_1_1__032844);
             rule__SysMLCS__Group_2_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1_1__1_in_rule__SysMLCS__Group_2_1_1__030977);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1_1__1_in_rule__SysMLCS__Group_2_1_1__032847);
             rule__SysMLCS__Group_2_1_1__1();
 
             state._fsp--;
@@ -45806,25 +48274,25 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14911:1: rule__SysMLCS__Group_2_1_1__0__Impl : ( ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15929:1: rule__SysMLCS__Group_2_1_1__0__Impl : ( ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 ) ) ;
     public final void rule__SysMLCS__Group_2_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14915:1: ( ( ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14916:1: ( ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15933:1: ( ( ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15934:1: ( ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14916:1: ( ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14917:1: ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15934:1: ( ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15935:1: ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getOwnedDetailsAssignment_2_1_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14918:1: ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14918:2: rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15936:1: ( rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15936:2: rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0_in_rule__SysMLCS__Group_2_1_1__0__Impl31004);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0_in_rule__SysMLCS__Group_2_1_1__0__Impl32874);
             rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0();
 
             state._fsp--;
@@ -45857,16 +48325,16 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14928:1: rule__SysMLCS__Group_2_1_1__1 : rule__SysMLCS__Group_2_1_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15946:1: rule__SysMLCS__Group_2_1_1__1 : rule__SysMLCS__Group_2_1_1__1__Impl ;
     public final void rule__SysMLCS__Group_2_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14932:1: ( rule__SysMLCS__Group_2_1_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14933:2: rule__SysMLCS__Group_2_1_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15950:1: ( rule__SysMLCS__Group_2_1_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15951:2: rule__SysMLCS__Group_2_1_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1_1__1__Impl_in_rule__SysMLCS__Group_2_1_1__131034);
+            pushFollow(FollowSets001.FOLLOW_rule__SysMLCS__Group_2_1_1__1__Impl_in_rule__SysMLCS__Group_2_1_1__132904);
             rule__SysMLCS__Group_2_1_1__1__Impl();
 
             state._fsp--;
@@ -45890,22 +48358,22 @@
 
 
     // $ANTLR start "rule__SysMLCS__Group_2_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14939:1: rule__SysMLCS__Group_2_1_1__1__Impl : ( ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15957:1: rule__SysMLCS__Group_2_1_1__1__Impl : ( ';' ) ;
     public final void rule__SysMLCS__Group_2_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14943:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14944:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15961:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15962:1: ( ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14944:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14945:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15962:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15963:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getSemicolonKeyword_2_1_1_1()); 
             }
-            match(input,53,FollowSets001.FOLLOW_53_in_rule__SysMLCS__Group_2_1_1__1__Impl31062); if (state.failed) return ;
+            match(input,53,FollowSets001.FOLLOW_53_in_rule__SysMLCS__Group_2_1_1__1__Impl32932); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSysMLCSAccess().getSemicolonKeyword_2_1_1_1()); 
             }
@@ -45931,21 +48399,21 @@
 
 
     // $ANTLR start "rule__TypedMultiplicityRefCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14962:1: rule__TypedMultiplicityRefCS__Group__0 : rule__TypedMultiplicityRefCS__Group__0__Impl rule__TypedMultiplicityRefCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15980:1: rule__TypedMultiplicityRefCS__Group__0 : rule__TypedMultiplicityRefCS__Group__0__Impl rule__TypedMultiplicityRefCS__Group__1 ;
     public final void rule__TypedMultiplicityRefCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14966:1: ( rule__TypedMultiplicityRefCS__Group__0__Impl rule__TypedMultiplicityRefCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14967:2: rule__TypedMultiplicityRefCS__Group__0__Impl rule__TypedMultiplicityRefCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15984:1: ( rule__TypedMultiplicityRefCS__Group__0__Impl rule__TypedMultiplicityRefCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15985:2: rule__TypedMultiplicityRefCS__Group__0__Impl rule__TypedMultiplicityRefCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypedMultiplicityRefCS__Group__0__Impl_in_rule__TypedMultiplicityRefCS__Group__031097);
+            pushFollow(FollowSets001.FOLLOW_rule__TypedMultiplicityRefCS__Group__0__Impl_in_rule__TypedMultiplicityRefCS__Group__032967);
             rule__TypedMultiplicityRefCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TypedMultiplicityRefCS__Group__1_in_rule__TypedMultiplicityRefCS__Group__031100);
+            pushFollow(FollowSets001.FOLLOW_rule__TypedMultiplicityRefCS__Group__1_in_rule__TypedMultiplicityRefCS__Group__032970);
             rule__TypedMultiplicityRefCS__Group__1();
 
             state._fsp--;
@@ -45969,22 +48437,22 @@
 
 
     // $ANTLR start "rule__TypedMultiplicityRefCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14974:1: rule__TypedMultiplicityRefCS__Group__0__Impl : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15992:1: rule__TypedMultiplicityRefCS__Group__0__Impl : ( ruleTypedRefCS ) ;
     public final void rule__TypedMultiplicityRefCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14978:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14979:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15996:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15997:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14979:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14980:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15997:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15998:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypedMultiplicityRefCSAccess().getTypedRefCSParserRuleCall_0()); 
             }
-            pushFollow(FollowSets001.FOLLOW_ruleTypedRefCS_in_rule__TypedMultiplicityRefCS__Group__0__Impl31127);
+            pushFollow(FollowSets001.FOLLOW_ruleTypedRefCS_in_rule__TypedMultiplicityRefCS__Group__0__Impl32997);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -46014,16 +48482,16 @@
 
 
     // $ANTLR start "rule__TypedMultiplicityRefCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14991:1: rule__TypedMultiplicityRefCS__Group__1 : rule__TypedMultiplicityRefCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16009:1: rule__TypedMultiplicityRefCS__Group__1 : rule__TypedMultiplicityRefCS__Group__1__Impl ;
     public final void rule__TypedMultiplicityRefCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14995:1: ( rule__TypedMultiplicityRefCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:14996:2: rule__TypedMultiplicityRefCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16013:1: ( rule__TypedMultiplicityRefCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16014:2: rule__TypedMultiplicityRefCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypedMultiplicityRefCS__Group__1__Impl_in_rule__TypedMultiplicityRefCS__Group__131156);
+            pushFollow(FollowSets001.FOLLOW_rule__TypedMultiplicityRefCS__Group__1__Impl_in_rule__TypedMultiplicityRefCS__Group__133026);
             rule__TypedMultiplicityRefCS__Group__1__Impl();
 
             state._fsp--;
@@ -46047,33 +48515,33 @@
 
 
     // $ANTLR start "rule__TypedMultiplicityRefCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15002:1: rule__TypedMultiplicityRefCS__Group__1__Impl : ( ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16020:1: rule__TypedMultiplicityRefCS__Group__1__Impl : ( ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )? ) ;
     public final void rule__TypedMultiplicityRefCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15006:1: ( ( ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15007:1: ( ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16024:1: ( ( ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16025:1: ( ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15007:1: ( ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15008:1: ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16025:1: ( ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16026:1: ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypedMultiplicityRefCSAccess().getOwnedMultiplicityAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15009:1: ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )?
-            int alt175=2;
-            int LA175_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16027:1: ( rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 )?
+            int alt203=2;
+            int LA203_0 = input.LA(1);
 
-            if ( (LA175_0==109) ) {
-                alt175=1;
+            if ( (LA203_0==118) ) {
+                alt203=1;
             }
-            switch (alt175) {
+            switch (alt203) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15009:2: rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16027:2: rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1_in_rule__TypedMultiplicityRefCS__Group__1__Impl31183);
+                    pushFollow(FollowSets001.FOLLOW_rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1_in_rule__TypedMultiplicityRefCS__Group__1__Impl33053);
                     rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1();
 
                     state._fsp--;
@@ -46109,21 +48577,21 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15023:1: rule__TemplateBindingCS__Group_0__0 : rule__TemplateBindingCS__Group_0__0__Impl rule__TemplateBindingCS__Group_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16041:1: rule__TemplateBindingCS__Group_0__0 : rule__TemplateBindingCS__Group_0__0__Impl rule__TemplateBindingCS__Group_0__1 ;
     public final void rule__TemplateBindingCS__Group_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15027:1: ( rule__TemplateBindingCS__Group_0__0__Impl rule__TemplateBindingCS__Group_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15028:2: rule__TemplateBindingCS__Group_0__0__Impl rule__TemplateBindingCS__Group_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16045:1: ( rule__TemplateBindingCS__Group_0__0__Impl rule__TemplateBindingCS__Group_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16046:2: rule__TemplateBindingCS__Group_0__0__Impl rule__TemplateBindingCS__Group_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__0__Impl_in_rule__TemplateBindingCS__Group_0__031218);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__0__Impl_in_rule__TemplateBindingCS__Group_0__033088);
             rule__TemplateBindingCS__Group_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__1_in_rule__TemplateBindingCS__Group_0__031221);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__1_in_rule__TemplateBindingCS__Group_0__033091);
             rule__TemplateBindingCS__Group_0__1();
 
             state._fsp--;
@@ -46147,22 +48615,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15035:1: rule__TemplateBindingCS__Group_0__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16053:1: rule__TemplateBindingCS__Group_0__0__Impl : ( '(' ) ;
     public final void rule__TemplateBindingCS__Group_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15039:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15040:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16057:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16058:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15040:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15041:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16058:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16059:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getLeftParenthesisKeyword_0_0()); 
             }
-            match(input,95,FollowSets001.FOLLOW_95_in_rule__TemplateBindingCS__Group_0__0__Impl31249); if (state.failed) return ;
+            match(input,104,FollowSets001.FOLLOW_104_in_rule__TemplateBindingCS__Group_0__0__Impl33119); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateBindingCSAccess().getLeftParenthesisKeyword_0_0()); 
             }
@@ -46188,21 +48656,21 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15054:1: rule__TemplateBindingCS__Group_0__1 : rule__TemplateBindingCS__Group_0__1__Impl rule__TemplateBindingCS__Group_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16072:1: rule__TemplateBindingCS__Group_0__1 : rule__TemplateBindingCS__Group_0__1__Impl rule__TemplateBindingCS__Group_0__2 ;
     public final void rule__TemplateBindingCS__Group_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15058:1: ( rule__TemplateBindingCS__Group_0__1__Impl rule__TemplateBindingCS__Group_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15059:2: rule__TemplateBindingCS__Group_0__1__Impl rule__TemplateBindingCS__Group_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16076:1: ( rule__TemplateBindingCS__Group_0__1__Impl rule__TemplateBindingCS__Group_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16077:2: rule__TemplateBindingCS__Group_0__1__Impl rule__TemplateBindingCS__Group_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__1__Impl_in_rule__TemplateBindingCS__Group_0__131280);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__1__Impl_in_rule__TemplateBindingCS__Group_0__133150);
             rule__TemplateBindingCS__Group_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__2_in_rule__TemplateBindingCS__Group_0__131283);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__2_in_rule__TemplateBindingCS__Group_0__133153);
             rule__TemplateBindingCS__Group_0__2();
 
             state._fsp--;
@@ -46226,25 +48694,25 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15066:1: rule__TemplateBindingCS__Group_0__1__Impl : ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16084:1: rule__TemplateBindingCS__Group_0__1__Impl : ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 ) ) ;
     public final void rule__TemplateBindingCS__Group_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15070:1: ( ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15071:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16088:1: ( ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16089:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15071:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15072:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16089:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16090:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsAssignment_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15073:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15073:2: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16091:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16091:2: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1_in_rule__TemplateBindingCS__Group_0__1__Impl31310);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1_in_rule__TemplateBindingCS__Group_0__1__Impl33180);
             rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1();
 
             state._fsp--;
@@ -46277,21 +48745,21 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15083:1: rule__TemplateBindingCS__Group_0__2 : rule__TemplateBindingCS__Group_0__2__Impl rule__TemplateBindingCS__Group_0__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16101:1: rule__TemplateBindingCS__Group_0__2 : rule__TemplateBindingCS__Group_0__2__Impl rule__TemplateBindingCS__Group_0__3 ;
     public final void rule__TemplateBindingCS__Group_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15087:1: ( rule__TemplateBindingCS__Group_0__2__Impl rule__TemplateBindingCS__Group_0__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15088:2: rule__TemplateBindingCS__Group_0__2__Impl rule__TemplateBindingCS__Group_0__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16105:1: ( rule__TemplateBindingCS__Group_0__2__Impl rule__TemplateBindingCS__Group_0__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16106:2: rule__TemplateBindingCS__Group_0__2__Impl rule__TemplateBindingCS__Group_0__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__2__Impl_in_rule__TemplateBindingCS__Group_0__231340);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__2__Impl_in_rule__TemplateBindingCS__Group_0__233210);
             rule__TemplateBindingCS__Group_0__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__3_in_rule__TemplateBindingCS__Group_0__231343);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__3_in_rule__TemplateBindingCS__Group_0__233213);
             rule__TemplateBindingCS__Group_0__3();
 
             state._fsp--;
@@ -46315,37 +48783,37 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15095:1: rule__TemplateBindingCS__Group_0__2__Impl : ( ( rule__TemplateBindingCS__Group_0_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16113:1: rule__TemplateBindingCS__Group_0__2__Impl : ( ( rule__TemplateBindingCS__Group_0_2__0 )* ) ;
     public final void rule__TemplateBindingCS__Group_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15099:1: ( ( ( rule__TemplateBindingCS__Group_0_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15100:1: ( ( rule__TemplateBindingCS__Group_0_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16117:1: ( ( ( rule__TemplateBindingCS__Group_0_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16118:1: ( ( rule__TemplateBindingCS__Group_0_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15100:1: ( ( rule__TemplateBindingCS__Group_0_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15101:1: ( rule__TemplateBindingCS__Group_0_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16118:1: ( ( rule__TemplateBindingCS__Group_0_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16119:1: ( rule__TemplateBindingCS__Group_0_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getGroup_0_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15102:1: ( rule__TemplateBindingCS__Group_0_2__0 )*
-            loop176:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16120:1: ( rule__TemplateBindingCS__Group_0_2__0 )*
+            loop204:
             do {
-                int alt176=2;
-                int LA176_0 = input.LA(1);
+                int alt204=2;
+                int LA204_0 = input.LA(1);
 
-                if ( (LA176_0==98) ) {
-                    alt176=1;
+                if ( (LA204_0==107) ) {
+                    alt204=1;
                 }
 
 
-                switch (alt176) {
+                switch (alt204) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15102:2: rule__TemplateBindingCS__Group_0_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16120:2: rule__TemplateBindingCS__Group_0_2__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0_2__0_in_rule__TemplateBindingCS__Group_0__2__Impl31370);
+            	    pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0_2__0_in_rule__TemplateBindingCS__Group_0__2__Impl33240);
             	    rule__TemplateBindingCS__Group_0_2__0();
 
             	    state._fsp--;
@@ -46355,7 +48823,7 @@
             	    break;
 
             	default :
-            	    break loop176;
+            	    break loop204;
                 }
             } while (true);
 
@@ -46384,16 +48852,16 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15112:1: rule__TemplateBindingCS__Group_0__3 : rule__TemplateBindingCS__Group_0__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16130:1: rule__TemplateBindingCS__Group_0__3 : rule__TemplateBindingCS__Group_0__3__Impl ;
     public final void rule__TemplateBindingCS__Group_0__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15116:1: ( rule__TemplateBindingCS__Group_0__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15117:2: rule__TemplateBindingCS__Group_0__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16134:1: ( rule__TemplateBindingCS__Group_0__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16135:2: rule__TemplateBindingCS__Group_0__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__3__Impl_in_rule__TemplateBindingCS__Group_0__331401);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0__3__Impl_in_rule__TemplateBindingCS__Group_0__333271);
             rule__TemplateBindingCS__Group_0__3__Impl();
 
             state._fsp--;
@@ -46417,22 +48885,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15123:1: rule__TemplateBindingCS__Group_0__3__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16141:1: rule__TemplateBindingCS__Group_0__3__Impl : ( ')' ) ;
     public final void rule__TemplateBindingCS__Group_0__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15127:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15128:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16145:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16146:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15128:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15129:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16146:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16147:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getRightParenthesisKeyword_0_3()); 
             }
-            match(input,96,FollowSets001.FOLLOW_96_in_rule__TemplateBindingCS__Group_0__3__Impl31429); if (state.failed) return ;
+            match(input,105,FollowSets001.FOLLOW_105_in_rule__TemplateBindingCS__Group_0__3__Impl33299); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateBindingCSAccess().getRightParenthesisKeyword_0_3()); 
             }
@@ -46458,21 +48926,21 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15150:1: rule__TemplateBindingCS__Group_0_2__0 : rule__TemplateBindingCS__Group_0_2__0__Impl rule__TemplateBindingCS__Group_0_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16168:1: rule__TemplateBindingCS__Group_0_2__0 : rule__TemplateBindingCS__Group_0_2__0__Impl rule__TemplateBindingCS__Group_0_2__1 ;
     public final void rule__TemplateBindingCS__Group_0_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15154:1: ( rule__TemplateBindingCS__Group_0_2__0__Impl rule__TemplateBindingCS__Group_0_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15155:2: rule__TemplateBindingCS__Group_0_2__0__Impl rule__TemplateBindingCS__Group_0_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16172:1: ( rule__TemplateBindingCS__Group_0_2__0__Impl rule__TemplateBindingCS__Group_0_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16173:2: rule__TemplateBindingCS__Group_0_2__0__Impl rule__TemplateBindingCS__Group_0_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0_2__0__Impl_in_rule__TemplateBindingCS__Group_0_2__031468);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0_2__0__Impl_in_rule__TemplateBindingCS__Group_0_2__033338);
             rule__TemplateBindingCS__Group_0_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0_2__1_in_rule__TemplateBindingCS__Group_0_2__031471);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0_2__1_in_rule__TemplateBindingCS__Group_0_2__033341);
             rule__TemplateBindingCS__Group_0_2__1();
 
             state._fsp--;
@@ -46496,22 +48964,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15162:1: rule__TemplateBindingCS__Group_0_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16180:1: rule__TemplateBindingCS__Group_0_2__0__Impl : ( ',' ) ;
     public final void rule__TemplateBindingCS__Group_0_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15166:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15167:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16184:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16185:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15167:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15168:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16185:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16186:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getCommaKeyword_0_2_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__TemplateBindingCS__Group_0_2__0__Impl31499); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__TemplateBindingCS__Group_0_2__0__Impl33369); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateBindingCSAccess().getCommaKeyword_0_2_0()); 
             }
@@ -46537,16 +49005,16 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15181:1: rule__TemplateBindingCS__Group_0_2__1 : rule__TemplateBindingCS__Group_0_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16199:1: rule__TemplateBindingCS__Group_0_2__1 : rule__TemplateBindingCS__Group_0_2__1__Impl ;
     public final void rule__TemplateBindingCS__Group_0_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15185:1: ( rule__TemplateBindingCS__Group_0_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15186:2: rule__TemplateBindingCS__Group_0_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16203:1: ( rule__TemplateBindingCS__Group_0_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16204:2: rule__TemplateBindingCS__Group_0_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0_2__1__Impl_in_rule__TemplateBindingCS__Group_0_2__131530);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_0_2__1__Impl_in_rule__TemplateBindingCS__Group_0_2__133400);
             rule__TemplateBindingCS__Group_0_2__1__Impl();
 
             state._fsp--;
@@ -46570,25 +49038,25 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_0_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15192:1: rule__TemplateBindingCS__Group_0_2__1__Impl : ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16210:1: rule__TemplateBindingCS__Group_0_2__1__Impl : ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 ) ) ;
     public final void rule__TemplateBindingCS__Group_0_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15196:1: ( ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15197:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16214:1: ( ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16215:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15197:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15198:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16215:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16216:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsAssignment_0_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15199:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15199:2: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16217:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16217:2: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1_in_rule__TemplateBindingCS__Group_0_2__1__Impl31557);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1_in_rule__TemplateBindingCS__Group_0_2__1__Impl33427);
             rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1();
 
             state._fsp--;
@@ -46621,21 +49089,21 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15213:1: rule__TemplateBindingCS__Group_1__0 : rule__TemplateBindingCS__Group_1__0__Impl rule__TemplateBindingCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16231:1: rule__TemplateBindingCS__Group_1__0 : rule__TemplateBindingCS__Group_1__0__Impl rule__TemplateBindingCS__Group_1__1 ;
     public final void rule__TemplateBindingCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15217:1: ( rule__TemplateBindingCS__Group_1__0__Impl rule__TemplateBindingCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15218:2: rule__TemplateBindingCS__Group_1__0__Impl rule__TemplateBindingCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16235:1: ( rule__TemplateBindingCS__Group_1__0__Impl rule__TemplateBindingCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16236:2: rule__TemplateBindingCS__Group_1__0__Impl rule__TemplateBindingCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__0__Impl_in_rule__TemplateBindingCS__Group_1__031591);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__0__Impl_in_rule__TemplateBindingCS__Group_1__033461);
             rule__TemplateBindingCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__1_in_rule__TemplateBindingCS__Group_1__031594);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__1_in_rule__TemplateBindingCS__Group_1__033464);
             rule__TemplateBindingCS__Group_1__1();
 
             state._fsp--;
@@ -46659,22 +49127,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15225:1: rule__TemplateBindingCS__Group_1__0__Impl : ( '<' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16243:1: rule__TemplateBindingCS__Group_1__0__Impl : ( '<' ) ;
     public final void rule__TemplateBindingCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15229:1: ( ( '<' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15230:1: ( '<' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16247:1: ( ( '<' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16248:1: ( '<' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15230:1: ( '<' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15231:1: '<'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16248:1: ( '<' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16249:1: '<'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getLessThanSignKeyword_1_0()); 
             }
-            match(input,67,FollowSets001.FOLLOW_67_in_rule__TemplateBindingCS__Group_1__0__Impl31622); if (state.failed) return ;
+            match(input,76,FollowSets001.FOLLOW_76_in_rule__TemplateBindingCS__Group_1__0__Impl33492); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateBindingCSAccess().getLessThanSignKeyword_1_0()); 
             }
@@ -46700,21 +49168,21 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15244:1: rule__TemplateBindingCS__Group_1__1 : rule__TemplateBindingCS__Group_1__1__Impl rule__TemplateBindingCS__Group_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16262:1: rule__TemplateBindingCS__Group_1__1 : rule__TemplateBindingCS__Group_1__1__Impl rule__TemplateBindingCS__Group_1__2 ;
     public final void rule__TemplateBindingCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15248:1: ( rule__TemplateBindingCS__Group_1__1__Impl rule__TemplateBindingCS__Group_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15249:2: rule__TemplateBindingCS__Group_1__1__Impl rule__TemplateBindingCS__Group_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16266:1: ( rule__TemplateBindingCS__Group_1__1__Impl rule__TemplateBindingCS__Group_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16267:2: rule__TemplateBindingCS__Group_1__1__Impl rule__TemplateBindingCS__Group_1__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__1__Impl_in_rule__TemplateBindingCS__Group_1__131653);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__1__Impl_in_rule__TemplateBindingCS__Group_1__133523);
             rule__TemplateBindingCS__Group_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__2_in_rule__TemplateBindingCS__Group_1__131656);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__2_in_rule__TemplateBindingCS__Group_1__133526);
             rule__TemplateBindingCS__Group_1__2();
 
             state._fsp--;
@@ -46738,25 +49206,25 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15256:1: rule__TemplateBindingCS__Group_1__1__Impl : ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16274:1: rule__TemplateBindingCS__Group_1__1__Impl : ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 ) ) ;
     public final void rule__TemplateBindingCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15260:1: ( ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15261:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16278:1: ( ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16279:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15261:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15262:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16279:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16280:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15263:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15263:2: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16281:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16281:2: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1_in_rule__TemplateBindingCS__Group_1__1__Impl31683);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1_in_rule__TemplateBindingCS__Group_1__1__Impl33553);
             rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1();
 
             state._fsp--;
@@ -46789,21 +49257,21 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15273:1: rule__TemplateBindingCS__Group_1__2 : rule__TemplateBindingCS__Group_1__2__Impl rule__TemplateBindingCS__Group_1__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16291:1: rule__TemplateBindingCS__Group_1__2 : rule__TemplateBindingCS__Group_1__2__Impl rule__TemplateBindingCS__Group_1__3 ;
     public final void rule__TemplateBindingCS__Group_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15277:1: ( rule__TemplateBindingCS__Group_1__2__Impl rule__TemplateBindingCS__Group_1__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15278:2: rule__TemplateBindingCS__Group_1__2__Impl rule__TemplateBindingCS__Group_1__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16295:1: ( rule__TemplateBindingCS__Group_1__2__Impl rule__TemplateBindingCS__Group_1__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16296:2: rule__TemplateBindingCS__Group_1__2__Impl rule__TemplateBindingCS__Group_1__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__2__Impl_in_rule__TemplateBindingCS__Group_1__231713);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__2__Impl_in_rule__TemplateBindingCS__Group_1__233583);
             rule__TemplateBindingCS__Group_1__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__3_in_rule__TemplateBindingCS__Group_1__231716);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__3_in_rule__TemplateBindingCS__Group_1__233586);
             rule__TemplateBindingCS__Group_1__3();
 
             state._fsp--;
@@ -46827,37 +49295,37 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15285:1: rule__TemplateBindingCS__Group_1__2__Impl : ( ( rule__TemplateBindingCS__Group_1_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16303:1: rule__TemplateBindingCS__Group_1__2__Impl : ( ( rule__TemplateBindingCS__Group_1_2__0 )* ) ;
     public final void rule__TemplateBindingCS__Group_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15289:1: ( ( ( rule__TemplateBindingCS__Group_1_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15290:1: ( ( rule__TemplateBindingCS__Group_1_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16307:1: ( ( ( rule__TemplateBindingCS__Group_1_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16308:1: ( ( rule__TemplateBindingCS__Group_1_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15290:1: ( ( rule__TemplateBindingCS__Group_1_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15291:1: ( rule__TemplateBindingCS__Group_1_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16308:1: ( ( rule__TemplateBindingCS__Group_1_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16309:1: ( rule__TemplateBindingCS__Group_1_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getGroup_1_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15292:1: ( rule__TemplateBindingCS__Group_1_2__0 )*
-            loop177:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16310:1: ( rule__TemplateBindingCS__Group_1_2__0 )*
+            loop205:
             do {
-                int alt177=2;
-                int LA177_0 = input.LA(1);
+                int alt205=2;
+                int LA205_0 = input.LA(1);
 
-                if ( (LA177_0==98) ) {
-                    alt177=1;
+                if ( (LA205_0==107) ) {
+                    alt205=1;
                 }
 
 
-                switch (alt177) {
+                switch (alt205) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15292:2: rule__TemplateBindingCS__Group_1_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16310:2: rule__TemplateBindingCS__Group_1_2__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1_2__0_in_rule__TemplateBindingCS__Group_1__2__Impl31743);
+            	    pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1_2__0_in_rule__TemplateBindingCS__Group_1__2__Impl33613);
             	    rule__TemplateBindingCS__Group_1_2__0();
 
             	    state._fsp--;
@@ -46867,7 +49335,7 @@
             	    break;
 
             	default :
-            	    break loop177;
+            	    break loop205;
                 }
             } while (true);
 
@@ -46896,16 +49364,16 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15302:1: rule__TemplateBindingCS__Group_1__3 : rule__TemplateBindingCS__Group_1__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16320:1: rule__TemplateBindingCS__Group_1__3 : rule__TemplateBindingCS__Group_1__3__Impl ;
     public final void rule__TemplateBindingCS__Group_1__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15306:1: ( rule__TemplateBindingCS__Group_1__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15307:2: rule__TemplateBindingCS__Group_1__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16324:1: ( rule__TemplateBindingCS__Group_1__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16325:2: rule__TemplateBindingCS__Group_1__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__3__Impl_in_rule__TemplateBindingCS__Group_1__331774);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1__3__Impl_in_rule__TemplateBindingCS__Group_1__333644);
             rule__TemplateBindingCS__Group_1__3__Impl();
 
             state._fsp--;
@@ -46929,22 +49397,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15313:1: rule__TemplateBindingCS__Group_1__3__Impl : ( '>' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16331:1: rule__TemplateBindingCS__Group_1__3__Impl : ( '>' ) ;
     public final void rule__TemplateBindingCS__Group_1__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15317:1: ( ( '>' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15318:1: ( '>' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16335:1: ( ( '>' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16336:1: ( '>' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15318:1: ( '>' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15319:1: '>'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16336:1: ( '>' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16337:1: '>'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getGreaterThanSignKeyword_1_3()); 
             }
-            match(input,66,FollowSets001.FOLLOW_66_in_rule__TemplateBindingCS__Group_1__3__Impl31802); if (state.failed) return ;
+            match(input,75,FollowSets001.FOLLOW_75_in_rule__TemplateBindingCS__Group_1__3__Impl33672); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateBindingCSAccess().getGreaterThanSignKeyword_1_3()); 
             }
@@ -46970,21 +49438,21 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15340:1: rule__TemplateBindingCS__Group_1_2__0 : rule__TemplateBindingCS__Group_1_2__0__Impl rule__TemplateBindingCS__Group_1_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16358:1: rule__TemplateBindingCS__Group_1_2__0 : rule__TemplateBindingCS__Group_1_2__0__Impl rule__TemplateBindingCS__Group_1_2__1 ;
     public final void rule__TemplateBindingCS__Group_1_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15344:1: ( rule__TemplateBindingCS__Group_1_2__0__Impl rule__TemplateBindingCS__Group_1_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15345:2: rule__TemplateBindingCS__Group_1_2__0__Impl rule__TemplateBindingCS__Group_1_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16362:1: ( rule__TemplateBindingCS__Group_1_2__0__Impl rule__TemplateBindingCS__Group_1_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16363:2: rule__TemplateBindingCS__Group_1_2__0__Impl rule__TemplateBindingCS__Group_1_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1_2__0__Impl_in_rule__TemplateBindingCS__Group_1_2__031841);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1_2__0__Impl_in_rule__TemplateBindingCS__Group_1_2__033711);
             rule__TemplateBindingCS__Group_1_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1_2__1_in_rule__TemplateBindingCS__Group_1_2__031844);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1_2__1_in_rule__TemplateBindingCS__Group_1_2__033714);
             rule__TemplateBindingCS__Group_1_2__1();
 
             state._fsp--;
@@ -47008,22 +49476,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15352:1: rule__TemplateBindingCS__Group_1_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16370:1: rule__TemplateBindingCS__Group_1_2__0__Impl : ( ',' ) ;
     public final void rule__TemplateBindingCS__Group_1_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15356:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15357:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16374:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16375:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15357:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15358:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16375:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16376:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getCommaKeyword_1_2_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__TemplateBindingCS__Group_1_2__0__Impl31872); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__TemplateBindingCS__Group_1_2__0__Impl33742); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateBindingCSAccess().getCommaKeyword_1_2_0()); 
             }
@@ -47049,16 +49517,16 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15371:1: rule__TemplateBindingCS__Group_1_2__1 : rule__TemplateBindingCS__Group_1_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16389:1: rule__TemplateBindingCS__Group_1_2__1 : rule__TemplateBindingCS__Group_1_2__1__Impl ;
     public final void rule__TemplateBindingCS__Group_1_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15375:1: ( rule__TemplateBindingCS__Group_1_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15376:2: rule__TemplateBindingCS__Group_1_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16393:1: ( rule__TemplateBindingCS__Group_1_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16394:2: rule__TemplateBindingCS__Group_1_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1_2__1__Impl_in_rule__TemplateBindingCS__Group_1_2__131903);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__Group_1_2__1__Impl_in_rule__TemplateBindingCS__Group_1_2__133773);
             rule__TemplateBindingCS__Group_1_2__1__Impl();
 
             state._fsp--;
@@ -47082,25 +49550,25 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__Group_1_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15382:1: rule__TemplateBindingCS__Group_1_2__1__Impl : ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16400:1: rule__TemplateBindingCS__Group_1_2__1__Impl : ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 ) ) ;
     public final void rule__TemplateBindingCS__Group_1_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15386:1: ( ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15387:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16404:1: ( ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16405:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15387:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15388:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16405:1: ( ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16406:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsAssignment_1_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15389:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15389:2: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16407:1: ( rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16407:2: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1_in_rule__TemplateBindingCS__Group_1_2__1__Impl31930);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1_in_rule__TemplateBindingCS__Group_1_2__1__Impl33800);
             rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1();
 
             state._fsp--;
@@ -47133,21 +49601,21 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15403:1: rule__TemplateSignatureCS__Group_0__0 : rule__TemplateSignatureCS__Group_0__0__Impl rule__TemplateSignatureCS__Group_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16421:1: rule__TemplateSignatureCS__Group_0__0 : rule__TemplateSignatureCS__Group_0__0__Impl rule__TemplateSignatureCS__Group_0__1 ;
     public final void rule__TemplateSignatureCS__Group_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15407:1: ( rule__TemplateSignatureCS__Group_0__0__Impl rule__TemplateSignatureCS__Group_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15408:2: rule__TemplateSignatureCS__Group_0__0__Impl rule__TemplateSignatureCS__Group_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16425:1: ( rule__TemplateSignatureCS__Group_0__0__Impl rule__TemplateSignatureCS__Group_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16426:2: rule__TemplateSignatureCS__Group_0__0__Impl rule__TemplateSignatureCS__Group_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__0__Impl_in_rule__TemplateSignatureCS__Group_0__031964);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__0__Impl_in_rule__TemplateSignatureCS__Group_0__033834);
             rule__TemplateSignatureCS__Group_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__1_in_rule__TemplateSignatureCS__Group_0__031967);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__1_in_rule__TemplateSignatureCS__Group_0__033837);
             rule__TemplateSignatureCS__Group_0__1();
 
             state._fsp--;
@@ -47171,22 +49639,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15415:1: rule__TemplateSignatureCS__Group_0__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16433:1: rule__TemplateSignatureCS__Group_0__0__Impl : ( '(' ) ;
     public final void rule__TemplateSignatureCS__Group_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15419:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15420:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16437:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16438:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15420:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15421:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16438:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16439:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getLeftParenthesisKeyword_0_0()); 
             }
-            match(input,95,FollowSets001.FOLLOW_95_in_rule__TemplateSignatureCS__Group_0__0__Impl31995); if (state.failed) return ;
+            match(input,104,FollowSets001.FOLLOW_104_in_rule__TemplateSignatureCS__Group_0__0__Impl33865); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateSignatureCSAccess().getLeftParenthesisKeyword_0_0()); 
             }
@@ -47212,21 +49680,21 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15434:1: rule__TemplateSignatureCS__Group_0__1 : rule__TemplateSignatureCS__Group_0__1__Impl rule__TemplateSignatureCS__Group_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16452:1: rule__TemplateSignatureCS__Group_0__1 : rule__TemplateSignatureCS__Group_0__1__Impl rule__TemplateSignatureCS__Group_0__2 ;
     public final void rule__TemplateSignatureCS__Group_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15438:1: ( rule__TemplateSignatureCS__Group_0__1__Impl rule__TemplateSignatureCS__Group_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15439:2: rule__TemplateSignatureCS__Group_0__1__Impl rule__TemplateSignatureCS__Group_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16456:1: ( rule__TemplateSignatureCS__Group_0__1__Impl rule__TemplateSignatureCS__Group_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16457:2: rule__TemplateSignatureCS__Group_0__1__Impl rule__TemplateSignatureCS__Group_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__1__Impl_in_rule__TemplateSignatureCS__Group_0__132026);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__1__Impl_in_rule__TemplateSignatureCS__Group_0__133896);
             rule__TemplateSignatureCS__Group_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__2_in_rule__TemplateSignatureCS__Group_0__132029);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__2_in_rule__TemplateSignatureCS__Group_0__133899);
             rule__TemplateSignatureCS__Group_0__2();
 
             state._fsp--;
@@ -47250,25 +49718,25 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15446:1: rule__TemplateSignatureCS__Group_0__1__Impl : ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16464:1: rule__TemplateSignatureCS__Group_0__1__Impl : ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 ) ) ;
     public final void rule__TemplateSignatureCS__Group_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15450:1: ( ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15451:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16468:1: ( ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16469:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15451:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15452:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16469:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16470:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersAssignment_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15453:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15453:2: rule__TemplateSignatureCS__OwnedParametersAssignment_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16471:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16471:2: rule__TemplateSignatureCS__OwnedParametersAssignment_0_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_0_1_in_rule__TemplateSignatureCS__Group_0__1__Impl32056);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_0_1_in_rule__TemplateSignatureCS__Group_0__1__Impl33926);
             rule__TemplateSignatureCS__OwnedParametersAssignment_0_1();
 
             state._fsp--;
@@ -47301,21 +49769,21 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15463:1: rule__TemplateSignatureCS__Group_0__2 : rule__TemplateSignatureCS__Group_0__2__Impl rule__TemplateSignatureCS__Group_0__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16481:1: rule__TemplateSignatureCS__Group_0__2 : rule__TemplateSignatureCS__Group_0__2__Impl rule__TemplateSignatureCS__Group_0__3 ;
     public final void rule__TemplateSignatureCS__Group_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15467:1: ( rule__TemplateSignatureCS__Group_0__2__Impl rule__TemplateSignatureCS__Group_0__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15468:2: rule__TemplateSignatureCS__Group_0__2__Impl rule__TemplateSignatureCS__Group_0__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16485:1: ( rule__TemplateSignatureCS__Group_0__2__Impl rule__TemplateSignatureCS__Group_0__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16486:2: rule__TemplateSignatureCS__Group_0__2__Impl rule__TemplateSignatureCS__Group_0__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__2__Impl_in_rule__TemplateSignatureCS__Group_0__232086);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__2__Impl_in_rule__TemplateSignatureCS__Group_0__233956);
             rule__TemplateSignatureCS__Group_0__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__3_in_rule__TemplateSignatureCS__Group_0__232089);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__3_in_rule__TemplateSignatureCS__Group_0__233959);
             rule__TemplateSignatureCS__Group_0__3();
 
             state._fsp--;
@@ -47339,37 +49807,37 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15475:1: rule__TemplateSignatureCS__Group_0__2__Impl : ( ( rule__TemplateSignatureCS__Group_0_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16493:1: rule__TemplateSignatureCS__Group_0__2__Impl : ( ( rule__TemplateSignatureCS__Group_0_2__0 )* ) ;
     public final void rule__TemplateSignatureCS__Group_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15479:1: ( ( ( rule__TemplateSignatureCS__Group_0_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15480:1: ( ( rule__TemplateSignatureCS__Group_0_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16497:1: ( ( ( rule__TemplateSignatureCS__Group_0_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16498:1: ( ( rule__TemplateSignatureCS__Group_0_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15480:1: ( ( rule__TemplateSignatureCS__Group_0_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15481:1: ( rule__TemplateSignatureCS__Group_0_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16498:1: ( ( rule__TemplateSignatureCS__Group_0_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16499:1: ( rule__TemplateSignatureCS__Group_0_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getGroup_0_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15482:1: ( rule__TemplateSignatureCS__Group_0_2__0 )*
-            loop178:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16500:1: ( rule__TemplateSignatureCS__Group_0_2__0 )*
+            loop206:
             do {
-                int alt178=2;
-                int LA178_0 = input.LA(1);
+                int alt206=2;
+                int LA206_0 = input.LA(1);
 
-                if ( (LA178_0==98) ) {
-                    alt178=1;
+                if ( (LA206_0==107) ) {
+                    alt206=1;
                 }
 
 
-                switch (alt178) {
+                switch (alt206) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15482:2: rule__TemplateSignatureCS__Group_0_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16500:2: rule__TemplateSignatureCS__Group_0_2__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0_2__0_in_rule__TemplateSignatureCS__Group_0__2__Impl32116);
+            	    pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0_2__0_in_rule__TemplateSignatureCS__Group_0__2__Impl33986);
             	    rule__TemplateSignatureCS__Group_0_2__0();
 
             	    state._fsp--;
@@ -47379,7 +49847,7 @@
             	    break;
 
             	default :
-            	    break loop178;
+            	    break loop206;
                 }
             } while (true);
 
@@ -47408,16 +49876,16 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15492:1: rule__TemplateSignatureCS__Group_0__3 : rule__TemplateSignatureCS__Group_0__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16510:1: rule__TemplateSignatureCS__Group_0__3 : rule__TemplateSignatureCS__Group_0__3__Impl ;
     public final void rule__TemplateSignatureCS__Group_0__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15496:1: ( rule__TemplateSignatureCS__Group_0__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15497:2: rule__TemplateSignatureCS__Group_0__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16514:1: ( rule__TemplateSignatureCS__Group_0__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16515:2: rule__TemplateSignatureCS__Group_0__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__3__Impl_in_rule__TemplateSignatureCS__Group_0__332147);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0__3__Impl_in_rule__TemplateSignatureCS__Group_0__334017);
             rule__TemplateSignatureCS__Group_0__3__Impl();
 
             state._fsp--;
@@ -47441,22 +49909,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15503:1: rule__TemplateSignatureCS__Group_0__3__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16521:1: rule__TemplateSignatureCS__Group_0__3__Impl : ( ')' ) ;
     public final void rule__TemplateSignatureCS__Group_0__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15507:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15508:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16525:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16526:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15508:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15509:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16526:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16527:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getRightParenthesisKeyword_0_3()); 
             }
-            match(input,96,FollowSets001.FOLLOW_96_in_rule__TemplateSignatureCS__Group_0__3__Impl32175); if (state.failed) return ;
+            match(input,105,FollowSets001.FOLLOW_105_in_rule__TemplateSignatureCS__Group_0__3__Impl34045); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateSignatureCSAccess().getRightParenthesisKeyword_0_3()); 
             }
@@ -47482,21 +49950,21 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15530:1: rule__TemplateSignatureCS__Group_0_2__0 : rule__TemplateSignatureCS__Group_0_2__0__Impl rule__TemplateSignatureCS__Group_0_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16548:1: rule__TemplateSignatureCS__Group_0_2__0 : rule__TemplateSignatureCS__Group_0_2__0__Impl rule__TemplateSignatureCS__Group_0_2__1 ;
     public final void rule__TemplateSignatureCS__Group_0_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15534:1: ( rule__TemplateSignatureCS__Group_0_2__0__Impl rule__TemplateSignatureCS__Group_0_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15535:2: rule__TemplateSignatureCS__Group_0_2__0__Impl rule__TemplateSignatureCS__Group_0_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16552:1: ( rule__TemplateSignatureCS__Group_0_2__0__Impl rule__TemplateSignatureCS__Group_0_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16553:2: rule__TemplateSignatureCS__Group_0_2__0__Impl rule__TemplateSignatureCS__Group_0_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0_2__0__Impl_in_rule__TemplateSignatureCS__Group_0_2__032214);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0_2__0__Impl_in_rule__TemplateSignatureCS__Group_0_2__034084);
             rule__TemplateSignatureCS__Group_0_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0_2__1_in_rule__TemplateSignatureCS__Group_0_2__032217);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0_2__1_in_rule__TemplateSignatureCS__Group_0_2__034087);
             rule__TemplateSignatureCS__Group_0_2__1();
 
             state._fsp--;
@@ -47520,22 +49988,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15542:1: rule__TemplateSignatureCS__Group_0_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16560:1: rule__TemplateSignatureCS__Group_0_2__0__Impl : ( ',' ) ;
     public final void rule__TemplateSignatureCS__Group_0_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15546:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15547:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16564:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16565:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15547:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15548:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16565:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16566:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getCommaKeyword_0_2_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__TemplateSignatureCS__Group_0_2__0__Impl32245); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__TemplateSignatureCS__Group_0_2__0__Impl34115); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateSignatureCSAccess().getCommaKeyword_0_2_0()); 
             }
@@ -47561,16 +50029,16 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15561:1: rule__TemplateSignatureCS__Group_0_2__1 : rule__TemplateSignatureCS__Group_0_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16579:1: rule__TemplateSignatureCS__Group_0_2__1 : rule__TemplateSignatureCS__Group_0_2__1__Impl ;
     public final void rule__TemplateSignatureCS__Group_0_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15565:1: ( rule__TemplateSignatureCS__Group_0_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15566:2: rule__TemplateSignatureCS__Group_0_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16583:1: ( rule__TemplateSignatureCS__Group_0_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16584:2: rule__TemplateSignatureCS__Group_0_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0_2__1__Impl_in_rule__TemplateSignatureCS__Group_0_2__132276);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_0_2__1__Impl_in_rule__TemplateSignatureCS__Group_0_2__134146);
             rule__TemplateSignatureCS__Group_0_2__1__Impl();
 
             state._fsp--;
@@ -47594,25 +50062,25 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_0_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15572:1: rule__TemplateSignatureCS__Group_0_2__1__Impl : ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16590:1: rule__TemplateSignatureCS__Group_0_2__1__Impl : ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 ) ) ;
     public final void rule__TemplateSignatureCS__Group_0_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15576:1: ( ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15577:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16594:1: ( ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16595:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15577:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15578:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16595:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16596:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersAssignment_0_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15579:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15579:2: rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16597:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16597:2: rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1_in_rule__TemplateSignatureCS__Group_0_2__1__Impl32303);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1_in_rule__TemplateSignatureCS__Group_0_2__1__Impl34173);
             rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1();
 
             state._fsp--;
@@ -47645,21 +50113,21 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15593:1: rule__TemplateSignatureCS__Group_1__0 : rule__TemplateSignatureCS__Group_1__0__Impl rule__TemplateSignatureCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16611:1: rule__TemplateSignatureCS__Group_1__0 : rule__TemplateSignatureCS__Group_1__0__Impl rule__TemplateSignatureCS__Group_1__1 ;
     public final void rule__TemplateSignatureCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15597:1: ( rule__TemplateSignatureCS__Group_1__0__Impl rule__TemplateSignatureCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15598:2: rule__TemplateSignatureCS__Group_1__0__Impl rule__TemplateSignatureCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16615:1: ( rule__TemplateSignatureCS__Group_1__0__Impl rule__TemplateSignatureCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16616:2: rule__TemplateSignatureCS__Group_1__0__Impl rule__TemplateSignatureCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__0__Impl_in_rule__TemplateSignatureCS__Group_1__032337);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__0__Impl_in_rule__TemplateSignatureCS__Group_1__034207);
             rule__TemplateSignatureCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__1_in_rule__TemplateSignatureCS__Group_1__032340);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__1_in_rule__TemplateSignatureCS__Group_1__034210);
             rule__TemplateSignatureCS__Group_1__1();
 
             state._fsp--;
@@ -47683,22 +50151,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15605:1: rule__TemplateSignatureCS__Group_1__0__Impl : ( '<' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16623:1: rule__TemplateSignatureCS__Group_1__0__Impl : ( '<' ) ;
     public final void rule__TemplateSignatureCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15609:1: ( ( '<' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15610:1: ( '<' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16627:1: ( ( '<' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16628:1: ( '<' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15610:1: ( '<' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15611:1: '<'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16628:1: ( '<' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16629:1: '<'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getLessThanSignKeyword_1_0()); 
             }
-            match(input,67,FollowSets001.FOLLOW_67_in_rule__TemplateSignatureCS__Group_1__0__Impl32368); if (state.failed) return ;
+            match(input,76,FollowSets001.FOLLOW_76_in_rule__TemplateSignatureCS__Group_1__0__Impl34238); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateSignatureCSAccess().getLessThanSignKeyword_1_0()); 
             }
@@ -47724,21 +50192,21 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15624:1: rule__TemplateSignatureCS__Group_1__1 : rule__TemplateSignatureCS__Group_1__1__Impl rule__TemplateSignatureCS__Group_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16642:1: rule__TemplateSignatureCS__Group_1__1 : rule__TemplateSignatureCS__Group_1__1__Impl rule__TemplateSignatureCS__Group_1__2 ;
     public final void rule__TemplateSignatureCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15628:1: ( rule__TemplateSignatureCS__Group_1__1__Impl rule__TemplateSignatureCS__Group_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15629:2: rule__TemplateSignatureCS__Group_1__1__Impl rule__TemplateSignatureCS__Group_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16646:1: ( rule__TemplateSignatureCS__Group_1__1__Impl rule__TemplateSignatureCS__Group_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16647:2: rule__TemplateSignatureCS__Group_1__1__Impl rule__TemplateSignatureCS__Group_1__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__1__Impl_in_rule__TemplateSignatureCS__Group_1__132399);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__1__Impl_in_rule__TemplateSignatureCS__Group_1__134269);
             rule__TemplateSignatureCS__Group_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__2_in_rule__TemplateSignatureCS__Group_1__132402);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__2_in_rule__TemplateSignatureCS__Group_1__134272);
             rule__TemplateSignatureCS__Group_1__2();
 
             state._fsp--;
@@ -47762,25 +50230,25 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15636:1: rule__TemplateSignatureCS__Group_1__1__Impl : ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16654:1: rule__TemplateSignatureCS__Group_1__1__Impl : ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 ) ) ;
     public final void rule__TemplateSignatureCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15640:1: ( ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15641:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16658:1: ( ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16659:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15641:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15642:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16659:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16660:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15643:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15643:2: rule__TemplateSignatureCS__OwnedParametersAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16661:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16661:2: rule__TemplateSignatureCS__OwnedParametersAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_1_1_in_rule__TemplateSignatureCS__Group_1__1__Impl32429);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_1_1_in_rule__TemplateSignatureCS__Group_1__1__Impl34299);
             rule__TemplateSignatureCS__OwnedParametersAssignment_1_1();
 
             state._fsp--;
@@ -47813,21 +50281,21 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15653:1: rule__TemplateSignatureCS__Group_1__2 : rule__TemplateSignatureCS__Group_1__2__Impl rule__TemplateSignatureCS__Group_1__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16671:1: rule__TemplateSignatureCS__Group_1__2 : rule__TemplateSignatureCS__Group_1__2__Impl rule__TemplateSignatureCS__Group_1__3 ;
     public final void rule__TemplateSignatureCS__Group_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15657:1: ( rule__TemplateSignatureCS__Group_1__2__Impl rule__TemplateSignatureCS__Group_1__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15658:2: rule__TemplateSignatureCS__Group_1__2__Impl rule__TemplateSignatureCS__Group_1__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16675:1: ( rule__TemplateSignatureCS__Group_1__2__Impl rule__TemplateSignatureCS__Group_1__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16676:2: rule__TemplateSignatureCS__Group_1__2__Impl rule__TemplateSignatureCS__Group_1__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__2__Impl_in_rule__TemplateSignatureCS__Group_1__232459);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__2__Impl_in_rule__TemplateSignatureCS__Group_1__234329);
             rule__TemplateSignatureCS__Group_1__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__3_in_rule__TemplateSignatureCS__Group_1__232462);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__3_in_rule__TemplateSignatureCS__Group_1__234332);
             rule__TemplateSignatureCS__Group_1__3();
 
             state._fsp--;
@@ -47851,37 +50319,37 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15665:1: rule__TemplateSignatureCS__Group_1__2__Impl : ( ( rule__TemplateSignatureCS__Group_1_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16683:1: rule__TemplateSignatureCS__Group_1__2__Impl : ( ( rule__TemplateSignatureCS__Group_1_2__0 )* ) ;
     public final void rule__TemplateSignatureCS__Group_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15669:1: ( ( ( rule__TemplateSignatureCS__Group_1_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15670:1: ( ( rule__TemplateSignatureCS__Group_1_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16687:1: ( ( ( rule__TemplateSignatureCS__Group_1_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16688:1: ( ( rule__TemplateSignatureCS__Group_1_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15670:1: ( ( rule__TemplateSignatureCS__Group_1_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15671:1: ( rule__TemplateSignatureCS__Group_1_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16688:1: ( ( rule__TemplateSignatureCS__Group_1_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16689:1: ( rule__TemplateSignatureCS__Group_1_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getGroup_1_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15672:1: ( rule__TemplateSignatureCS__Group_1_2__0 )*
-            loop179:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16690:1: ( rule__TemplateSignatureCS__Group_1_2__0 )*
+            loop207:
             do {
-                int alt179=2;
-                int LA179_0 = input.LA(1);
+                int alt207=2;
+                int LA207_0 = input.LA(1);
 
-                if ( (LA179_0==98) ) {
-                    alt179=1;
+                if ( (LA207_0==107) ) {
+                    alt207=1;
                 }
 
 
-                switch (alt179) {
+                switch (alt207) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15672:2: rule__TemplateSignatureCS__Group_1_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16690:2: rule__TemplateSignatureCS__Group_1_2__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1_2__0_in_rule__TemplateSignatureCS__Group_1__2__Impl32489);
+            	    pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1_2__0_in_rule__TemplateSignatureCS__Group_1__2__Impl34359);
             	    rule__TemplateSignatureCS__Group_1_2__0();
 
             	    state._fsp--;
@@ -47891,7 +50359,7 @@
             	    break;
 
             	default :
-            	    break loop179;
+            	    break loop207;
                 }
             } while (true);
 
@@ -47920,16 +50388,16 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15682:1: rule__TemplateSignatureCS__Group_1__3 : rule__TemplateSignatureCS__Group_1__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16700:1: rule__TemplateSignatureCS__Group_1__3 : rule__TemplateSignatureCS__Group_1__3__Impl ;
     public final void rule__TemplateSignatureCS__Group_1__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15686:1: ( rule__TemplateSignatureCS__Group_1__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15687:2: rule__TemplateSignatureCS__Group_1__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16704:1: ( rule__TemplateSignatureCS__Group_1__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16705:2: rule__TemplateSignatureCS__Group_1__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__3__Impl_in_rule__TemplateSignatureCS__Group_1__332520);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1__3__Impl_in_rule__TemplateSignatureCS__Group_1__334390);
             rule__TemplateSignatureCS__Group_1__3__Impl();
 
             state._fsp--;
@@ -47953,22 +50421,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15693:1: rule__TemplateSignatureCS__Group_1__3__Impl : ( '>' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16711:1: rule__TemplateSignatureCS__Group_1__3__Impl : ( '>' ) ;
     public final void rule__TemplateSignatureCS__Group_1__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15697:1: ( ( '>' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15698:1: ( '>' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16715:1: ( ( '>' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16716:1: ( '>' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15698:1: ( '>' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15699:1: '>'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16716:1: ( '>' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16717:1: '>'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getGreaterThanSignKeyword_1_3()); 
             }
-            match(input,66,FollowSets001.FOLLOW_66_in_rule__TemplateSignatureCS__Group_1__3__Impl32548); if (state.failed) return ;
+            match(input,75,FollowSets001.FOLLOW_75_in_rule__TemplateSignatureCS__Group_1__3__Impl34418); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateSignatureCSAccess().getGreaterThanSignKeyword_1_3()); 
             }
@@ -47994,21 +50462,21 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15720:1: rule__TemplateSignatureCS__Group_1_2__0 : rule__TemplateSignatureCS__Group_1_2__0__Impl rule__TemplateSignatureCS__Group_1_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16738:1: rule__TemplateSignatureCS__Group_1_2__0 : rule__TemplateSignatureCS__Group_1_2__0__Impl rule__TemplateSignatureCS__Group_1_2__1 ;
     public final void rule__TemplateSignatureCS__Group_1_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15724:1: ( rule__TemplateSignatureCS__Group_1_2__0__Impl rule__TemplateSignatureCS__Group_1_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15725:2: rule__TemplateSignatureCS__Group_1_2__0__Impl rule__TemplateSignatureCS__Group_1_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16742:1: ( rule__TemplateSignatureCS__Group_1_2__0__Impl rule__TemplateSignatureCS__Group_1_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16743:2: rule__TemplateSignatureCS__Group_1_2__0__Impl rule__TemplateSignatureCS__Group_1_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1_2__0__Impl_in_rule__TemplateSignatureCS__Group_1_2__032587);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1_2__0__Impl_in_rule__TemplateSignatureCS__Group_1_2__034457);
             rule__TemplateSignatureCS__Group_1_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1_2__1_in_rule__TemplateSignatureCS__Group_1_2__032590);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1_2__1_in_rule__TemplateSignatureCS__Group_1_2__034460);
             rule__TemplateSignatureCS__Group_1_2__1();
 
             state._fsp--;
@@ -48032,22 +50500,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15732:1: rule__TemplateSignatureCS__Group_1_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16750:1: rule__TemplateSignatureCS__Group_1_2__0__Impl : ( ',' ) ;
     public final void rule__TemplateSignatureCS__Group_1_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15736:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15737:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16754:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16755:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15737:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15738:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16755:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16756:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getCommaKeyword_1_2_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__TemplateSignatureCS__Group_1_2__0__Impl32618); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__TemplateSignatureCS__Group_1_2__0__Impl34488); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTemplateSignatureCSAccess().getCommaKeyword_1_2_0()); 
             }
@@ -48073,16 +50541,16 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15751:1: rule__TemplateSignatureCS__Group_1_2__1 : rule__TemplateSignatureCS__Group_1_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16769:1: rule__TemplateSignatureCS__Group_1_2__1 : rule__TemplateSignatureCS__Group_1_2__1__Impl ;
     public final void rule__TemplateSignatureCS__Group_1_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15755:1: ( rule__TemplateSignatureCS__Group_1_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15756:2: rule__TemplateSignatureCS__Group_1_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16773:1: ( rule__TemplateSignatureCS__Group_1_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16774:2: rule__TemplateSignatureCS__Group_1_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1_2__1__Impl_in_rule__TemplateSignatureCS__Group_1_2__132649);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__Group_1_2__1__Impl_in_rule__TemplateSignatureCS__Group_1_2__134519);
             rule__TemplateSignatureCS__Group_1_2__1__Impl();
 
             state._fsp--;
@@ -48106,25 +50574,25 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__Group_1_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15762:1: rule__TemplateSignatureCS__Group_1_2__1__Impl : ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16780:1: rule__TemplateSignatureCS__Group_1_2__1__Impl : ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 ) ) ;
     public final void rule__TemplateSignatureCS__Group_1_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15766:1: ( ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15767:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16784:1: ( ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16785:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15767:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15768:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16785:1: ( ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16786:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersAssignment_1_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15769:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15769:2: rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16787:1: ( rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16787:2: rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1_in_rule__TemplateSignatureCS__Group_1_2__1__Impl32676);
+            pushFollow(FollowSets001.FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1_in_rule__TemplateSignatureCS__Group_1_2__1__Impl34546);
             rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1();
 
             state._fsp--;
@@ -48157,21 +50625,21 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15783:1: rule__URIPathNameCS__Group__0 : rule__URIPathNameCS__Group__0__Impl rule__URIPathNameCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16801:1: rule__URIPathNameCS__Group__0 : rule__URIPathNameCS__Group__0__Impl rule__URIPathNameCS__Group__1 ;
     public final void rule__URIPathNameCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15787:1: ( rule__URIPathNameCS__Group__0__Impl rule__URIPathNameCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15788:2: rule__URIPathNameCS__Group__0__Impl rule__URIPathNameCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16805:1: ( rule__URIPathNameCS__Group__0__Impl rule__URIPathNameCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16806:2: rule__URIPathNameCS__Group__0__Impl rule__URIPathNameCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group__0__Impl_in_rule__URIPathNameCS__Group__032710);
+            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group__0__Impl_in_rule__URIPathNameCS__Group__034580);
             rule__URIPathNameCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group__1_in_rule__URIPathNameCS__Group__032713);
+            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group__1_in_rule__URIPathNameCS__Group__034583);
             rule__URIPathNameCS__Group__1();
 
             state._fsp--;
@@ -48195,25 +50663,25 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15795:1: rule__URIPathNameCS__Group__0__Impl : ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16813:1: rule__URIPathNameCS__Group__0__Impl : ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 ) ) ;
     public final void rule__URIPathNameCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15799:1: ( ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15800:1: ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16817:1: ( ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16818:1: ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15800:1: ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15801:1: ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16818:1: ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16819:1: ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIPathNameCSAccess().getOwnedPathElementsAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15802:1: ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15802:2: rule__URIPathNameCS__OwnedPathElementsAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16820:1: ( rule__URIPathNameCS__OwnedPathElementsAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16820:2: rule__URIPathNameCS__OwnedPathElementsAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__OwnedPathElementsAssignment_0_in_rule__URIPathNameCS__Group__0__Impl32740);
+            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__OwnedPathElementsAssignment_0_in_rule__URIPathNameCS__Group__0__Impl34610);
             rule__URIPathNameCS__OwnedPathElementsAssignment_0();
 
             state._fsp--;
@@ -48246,16 +50714,16 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15812:1: rule__URIPathNameCS__Group__1 : rule__URIPathNameCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16830:1: rule__URIPathNameCS__Group__1 : rule__URIPathNameCS__Group__1__Impl ;
     public final void rule__URIPathNameCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15816:1: ( rule__URIPathNameCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15817:2: rule__URIPathNameCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16834:1: ( rule__URIPathNameCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16835:2: rule__URIPathNameCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group__1__Impl_in_rule__URIPathNameCS__Group__132770);
+            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group__1__Impl_in_rule__URIPathNameCS__Group__134640);
             rule__URIPathNameCS__Group__1__Impl();
 
             state._fsp--;
@@ -48279,37 +50747,37 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15823:1: rule__URIPathNameCS__Group__1__Impl : ( ( rule__URIPathNameCS__Group_1__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16841:1: rule__URIPathNameCS__Group__1__Impl : ( ( rule__URIPathNameCS__Group_1__0 )* ) ;
     public final void rule__URIPathNameCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15827:1: ( ( ( rule__URIPathNameCS__Group_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15828:1: ( ( rule__URIPathNameCS__Group_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16845:1: ( ( ( rule__URIPathNameCS__Group_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16846:1: ( ( rule__URIPathNameCS__Group_1__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15828:1: ( ( rule__URIPathNameCS__Group_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15829:1: ( rule__URIPathNameCS__Group_1__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16846:1: ( ( rule__URIPathNameCS__Group_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16847:1: ( rule__URIPathNameCS__Group_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIPathNameCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15830:1: ( rule__URIPathNameCS__Group_1__0 )*
-            loop180:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16848:1: ( rule__URIPathNameCS__Group_1__0 )*
+            loop208:
             do {
-                int alt180=2;
-                int LA180_0 = input.LA(1);
+                int alt208=2;
+                int LA208_0 = input.LA(1);
 
-                if ( (LA180_0==102) ) {
-                    alt180=1;
+                if ( (LA208_0==111) ) {
+                    alt208=1;
                 }
 
 
-                switch (alt180) {
+                switch (alt208) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15830:2: rule__URIPathNameCS__Group_1__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16848:2: rule__URIPathNameCS__Group_1__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group_1__0_in_rule__URIPathNameCS__Group__1__Impl32797);
+            	    pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group_1__0_in_rule__URIPathNameCS__Group__1__Impl34667);
             	    rule__URIPathNameCS__Group_1__0();
 
             	    state._fsp--;
@@ -48319,7 +50787,7 @@
             	    break;
 
             	default :
-            	    break loop180;
+            	    break loop208;
                 }
             } while (true);
 
@@ -48348,21 +50816,21 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15844:1: rule__URIPathNameCS__Group_1__0 : rule__URIPathNameCS__Group_1__0__Impl rule__URIPathNameCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16862:1: rule__URIPathNameCS__Group_1__0 : rule__URIPathNameCS__Group_1__0__Impl rule__URIPathNameCS__Group_1__1 ;
     public final void rule__URIPathNameCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15848:1: ( rule__URIPathNameCS__Group_1__0__Impl rule__URIPathNameCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15849:2: rule__URIPathNameCS__Group_1__0__Impl rule__URIPathNameCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16866:1: ( rule__URIPathNameCS__Group_1__0__Impl rule__URIPathNameCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16867:2: rule__URIPathNameCS__Group_1__0__Impl rule__URIPathNameCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group_1__0__Impl_in_rule__URIPathNameCS__Group_1__032832);
+            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group_1__0__Impl_in_rule__URIPathNameCS__Group_1__034702);
             rule__URIPathNameCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group_1__1_in_rule__URIPathNameCS__Group_1__032835);
+            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group_1__1_in_rule__URIPathNameCS__Group_1__034705);
             rule__URIPathNameCS__Group_1__1();
 
             state._fsp--;
@@ -48386,22 +50854,22 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15856:1: rule__URIPathNameCS__Group_1__0__Impl : ( '::' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16874:1: rule__URIPathNameCS__Group_1__0__Impl : ( '::' ) ;
     public final void rule__URIPathNameCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15860:1: ( ( '::' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15861:1: ( '::' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16878:1: ( ( '::' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16879:1: ( '::' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15861:1: ( '::' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15862:1: '::'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16879:1: ( '::' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16880:1: '::'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIPathNameCSAccess().getColonColonKeyword_1_0()); 
             }
-            match(input,102,FollowSets001.FOLLOW_102_in_rule__URIPathNameCS__Group_1__0__Impl32863); if (state.failed) return ;
+            match(input,111,FollowSets001.FOLLOW_111_in_rule__URIPathNameCS__Group_1__0__Impl34733); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getURIPathNameCSAccess().getColonColonKeyword_1_0()); 
             }
@@ -48427,16 +50895,16 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15875:1: rule__URIPathNameCS__Group_1__1 : rule__URIPathNameCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16893:1: rule__URIPathNameCS__Group_1__1 : rule__URIPathNameCS__Group_1__1__Impl ;
     public final void rule__URIPathNameCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15879:1: ( rule__URIPathNameCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15880:2: rule__URIPathNameCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16897:1: ( rule__URIPathNameCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16898:2: rule__URIPathNameCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group_1__1__Impl_in_rule__URIPathNameCS__Group_1__132894);
+            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__Group_1__1__Impl_in_rule__URIPathNameCS__Group_1__134764);
             rule__URIPathNameCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -48460,25 +50928,25 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15886:1: rule__URIPathNameCS__Group_1__1__Impl : ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16904:1: rule__URIPathNameCS__Group_1__1__Impl : ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 ) ) ;
     public final void rule__URIPathNameCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15890:1: ( ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15891:1: ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16908:1: ( ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16909:1: ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15891:1: ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15892:1: ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16909:1: ( ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16910:1: ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIPathNameCSAccess().getOwnedPathElementsAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15893:1: ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15893:2: rule__URIPathNameCS__OwnedPathElementsAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16911:1: ( rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16911:2: rule__URIPathNameCS__OwnedPathElementsAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__OwnedPathElementsAssignment_1_1_in_rule__URIPathNameCS__Group_1__1__Impl32921);
+            pushFollow(FollowSets001.FOLLOW_rule__URIPathNameCS__OwnedPathElementsAssignment_1_1_in_rule__URIPathNameCS__Group_1__1__Impl34791);
             rule__URIPathNameCS__OwnedPathElementsAssignment_1_1();
 
             state._fsp--;
@@ -48511,21 +50979,21 @@
 
 
     // $ANTLR start "rule__URIFirstPathElementCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15907:1: rule__URIFirstPathElementCS__Group_1__0 : rule__URIFirstPathElementCS__Group_1__0__Impl rule__URIFirstPathElementCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16925:1: rule__URIFirstPathElementCS__Group_1__0 : rule__URIFirstPathElementCS__Group_1__0__Impl rule__URIFirstPathElementCS__Group_1__1 ;
     public final void rule__URIFirstPathElementCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15911:1: ( rule__URIFirstPathElementCS__Group_1__0__Impl rule__URIFirstPathElementCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15912:2: rule__URIFirstPathElementCS__Group_1__0__Impl rule__URIFirstPathElementCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16929:1: ( rule__URIFirstPathElementCS__Group_1__0__Impl rule__URIFirstPathElementCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16930:2: rule__URIFirstPathElementCS__Group_1__0__Impl rule__URIFirstPathElementCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__URIFirstPathElementCS__Group_1__0__Impl_in_rule__URIFirstPathElementCS__Group_1__032955);
+            pushFollow(FollowSets001.FOLLOW_rule__URIFirstPathElementCS__Group_1__0__Impl_in_rule__URIFirstPathElementCS__Group_1__034825);
             rule__URIFirstPathElementCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__URIFirstPathElementCS__Group_1__1_in_rule__URIFirstPathElementCS__Group_1__032958);
+            pushFollow(FollowSets001.FOLLOW_rule__URIFirstPathElementCS__Group_1__1_in_rule__URIFirstPathElementCS__Group_1__034828);
             rule__URIFirstPathElementCS__Group_1__1();
 
             state._fsp--;
@@ -48549,23 +51017,23 @@
 
 
     // $ANTLR start "rule__URIFirstPathElementCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15919:1: rule__URIFirstPathElementCS__Group_1__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16937:1: rule__URIFirstPathElementCS__Group_1__0__Impl : ( () ) ;
     public final void rule__URIFirstPathElementCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15923:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15924:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16941:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16942:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15924:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15925:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16942:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16943:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIFirstPathElementCSAccess().getPathElementWithURICSAction_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15926:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15928:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16944:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16946:1: 
             {
             }
 
@@ -48590,16 +51058,16 @@
 
 
     // $ANTLR start "rule__URIFirstPathElementCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15938:1: rule__URIFirstPathElementCS__Group_1__1 : rule__URIFirstPathElementCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16956:1: rule__URIFirstPathElementCS__Group_1__1 : rule__URIFirstPathElementCS__Group_1__1__Impl ;
     public final void rule__URIFirstPathElementCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15942:1: ( rule__URIFirstPathElementCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15943:2: rule__URIFirstPathElementCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16960:1: ( rule__URIFirstPathElementCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16961:2: rule__URIFirstPathElementCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__URIFirstPathElementCS__Group_1__1__Impl_in_rule__URIFirstPathElementCS__Group_1__133016);
+            pushFollow(FollowSets001.FOLLOW_rule__URIFirstPathElementCS__Group_1__1__Impl_in_rule__URIFirstPathElementCS__Group_1__134886);
             rule__URIFirstPathElementCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -48623,25 +51091,25 @@
 
 
     // $ANTLR start "rule__URIFirstPathElementCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15949:1: rule__URIFirstPathElementCS__Group_1__1__Impl : ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16967:1: rule__URIFirstPathElementCS__Group_1__1__Impl : ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 ) ) ;
     public final void rule__URIFirstPathElementCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15953:1: ( ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15954:1: ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16971:1: ( ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16972:1: ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15954:1: ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15955:1: ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16972:1: ( ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16973:1: ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIFirstPathElementCSAccess().getReferredElementAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15956:1: ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15956:2: rule__URIFirstPathElementCS__ReferredElementAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16974:1: ( rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16974:2: rule__URIFirstPathElementCS__ReferredElementAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__URIFirstPathElementCS__ReferredElementAssignment_1_1_in_rule__URIFirstPathElementCS__Group_1__1__Impl33043);
+            pushFollow(FollowSets001.FOLLOW_rule__URIFirstPathElementCS__ReferredElementAssignment_1_1_in_rule__URIFirstPathElementCS__Group_1__1__Impl34913);
             rule__URIFirstPathElementCS__ReferredElementAssignment_1_1();
 
             state._fsp--;
@@ -48674,21 +51142,21 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15970:1: rule__CollectionTypeCS__Group__0 : rule__CollectionTypeCS__Group__0__Impl rule__CollectionTypeCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16988:1: rule__CollectionTypeCS__Group__0 : rule__CollectionTypeCS__Group__0__Impl rule__CollectionTypeCS__Group__1 ;
     public final void rule__CollectionTypeCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15974:1: ( rule__CollectionTypeCS__Group__0__Impl rule__CollectionTypeCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15975:2: rule__CollectionTypeCS__Group__0__Impl rule__CollectionTypeCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16992:1: ( rule__CollectionTypeCS__Group__0__Impl rule__CollectionTypeCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16993:2: rule__CollectionTypeCS__Group__0__Impl rule__CollectionTypeCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group__0__Impl_in_rule__CollectionTypeCS__Group__033077);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group__0__Impl_in_rule__CollectionTypeCS__Group__034947);
             rule__CollectionTypeCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group__1_in_rule__CollectionTypeCS__Group__033080);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group__1_in_rule__CollectionTypeCS__Group__034950);
             rule__CollectionTypeCS__Group__1();
 
             state._fsp--;
@@ -48712,25 +51180,25 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15982:1: rule__CollectionTypeCS__Group__0__Impl : ( ( rule__CollectionTypeCS__NameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17000:1: rule__CollectionTypeCS__Group__0__Impl : ( ( rule__CollectionTypeCS__NameAssignment_0 ) ) ;
     public final void rule__CollectionTypeCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15986:1: ( ( ( rule__CollectionTypeCS__NameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15987:1: ( ( rule__CollectionTypeCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17004:1: ( ( ( rule__CollectionTypeCS__NameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17005:1: ( ( rule__CollectionTypeCS__NameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15987:1: ( ( rule__CollectionTypeCS__NameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15988:1: ( rule__CollectionTypeCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17005:1: ( ( rule__CollectionTypeCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17006:1: ( rule__CollectionTypeCS__NameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionTypeCSAccess().getNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15989:1: ( rule__CollectionTypeCS__NameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15989:2: rule__CollectionTypeCS__NameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17007:1: ( rule__CollectionTypeCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17007:2: rule__CollectionTypeCS__NameAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__NameAssignment_0_in_rule__CollectionTypeCS__Group__0__Impl33107);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__NameAssignment_0_in_rule__CollectionTypeCS__Group__0__Impl34977);
             rule__CollectionTypeCS__NameAssignment_0();
 
             state._fsp--;
@@ -48763,16 +51231,16 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:15999:1: rule__CollectionTypeCS__Group__1 : rule__CollectionTypeCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17017:1: rule__CollectionTypeCS__Group__1 : rule__CollectionTypeCS__Group__1__Impl ;
     public final void rule__CollectionTypeCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16003:1: ( rule__CollectionTypeCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16004:2: rule__CollectionTypeCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17021:1: ( rule__CollectionTypeCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17022:2: rule__CollectionTypeCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group__1__Impl_in_rule__CollectionTypeCS__Group__133137);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group__1__Impl_in_rule__CollectionTypeCS__Group__135007);
             rule__CollectionTypeCS__Group__1__Impl();
 
             state._fsp--;
@@ -48796,33 +51264,33 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16010:1: rule__CollectionTypeCS__Group__1__Impl : ( ( rule__CollectionTypeCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17028:1: rule__CollectionTypeCS__Group__1__Impl : ( ( rule__CollectionTypeCS__Group_1__0 )? ) ;
     public final void rule__CollectionTypeCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16014:1: ( ( ( rule__CollectionTypeCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16015:1: ( ( rule__CollectionTypeCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17032:1: ( ( ( rule__CollectionTypeCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17033:1: ( ( rule__CollectionTypeCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16015:1: ( ( rule__CollectionTypeCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16016:1: ( rule__CollectionTypeCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17033:1: ( ( rule__CollectionTypeCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17034:1: ( rule__CollectionTypeCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionTypeCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16017:1: ( rule__CollectionTypeCS__Group_1__0 )?
-            int alt181=2;
-            int LA181_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17035:1: ( rule__CollectionTypeCS__Group_1__0 )?
+            int alt209=2;
+            int LA209_0 = input.LA(1);
 
-            if ( (LA181_0==95) ) {
-                alt181=1;
+            if ( (LA209_0==104) ) {
+                alt209=1;
             }
-            switch (alt181) {
+            switch (alt209) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16017:2: rule__CollectionTypeCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17035:2: rule__CollectionTypeCS__Group_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__0_in_rule__CollectionTypeCS__Group__1__Impl33164);
+                    pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__0_in_rule__CollectionTypeCS__Group__1__Impl35034);
                     rule__CollectionTypeCS__Group_1__0();
 
                     state._fsp--;
@@ -48858,21 +51326,21 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16031:1: rule__CollectionTypeCS__Group_1__0 : rule__CollectionTypeCS__Group_1__0__Impl rule__CollectionTypeCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17049:1: rule__CollectionTypeCS__Group_1__0 : rule__CollectionTypeCS__Group_1__0__Impl rule__CollectionTypeCS__Group_1__1 ;
     public final void rule__CollectionTypeCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16035:1: ( rule__CollectionTypeCS__Group_1__0__Impl rule__CollectionTypeCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16036:2: rule__CollectionTypeCS__Group_1__0__Impl rule__CollectionTypeCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17053:1: ( rule__CollectionTypeCS__Group_1__0__Impl rule__CollectionTypeCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17054:2: rule__CollectionTypeCS__Group_1__0__Impl rule__CollectionTypeCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__0__Impl_in_rule__CollectionTypeCS__Group_1__033199);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__0__Impl_in_rule__CollectionTypeCS__Group_1__035069);
             rule__CollectionTypeCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__1_in_rule__CollectionTypeCS__Group_1__033202);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__1_in_rule__CollectionTypeCS__Group_1__035072);
             rule__CollectionTypeCS__Group_1__1();
 
             state._fsp--;
@@ -48896,22 +51364,22 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16043:1: rule__CollectionTypeCS__Group_1__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17061:1: rule__CollectionTypeCS__Group_1__0__Impl : ( '(' ) ;
     public final void rule__CollectionTypeCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16047:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16048:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17065:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17066:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16048:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16049:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17066:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17067:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionTypeCSAccess().getLeftParenthesisKeyword_1_0()); 
             }
-            match(input,95,FollowSets001.FOLLOW_95_in_rule__CollectionTypeCS__Group_1__0__Impl33230); if (state.failed) return ;
+            match(input,104,FollowSets001.FOLLOW_104_in_rule__CollectionTypeCS__Group_1__0__Impl35100); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionTypeCSAccess().getLeftParenthesisKeyword_1_0()); 
             }
@@ -48937,21 +51405,21 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16062:1: rule__CollectionTypeCS__Group_1__1 : rule__CollectionTypeCS__Group_1__1__Impl rule__CollectionTypeCS__Group_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17080:1: rule__CollectionTypeCS__Group_1__1 : rule__CollectionTypeCS__Group_1__1__Impl rule__CollectionTypeCS__Group_1__2 ;
     public final void rule__CollectionTypeCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16066:1: ( rule__CollectionTypeCS__Group_1__1__Impl rule__CollectionTypeCS__Group_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16067:2: rule__CollectionTypeCS__Group_1__1__Impl rule__CollectionTypeCS__Group_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17084:1: ( rule__CollectionTypeCS__Group_1__1__Impl rule__CollectionTypeCS__Group_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17085:2: rule__CollectionTypeCS__Group_1__1__Impl rule__CollectionTypeCS__Group_1__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__1__Impl_in_rule__CollectionTypeCS__Group_1__133261);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__1__Impl_in_rule__CollectionTypeCS__Group_1__135131);
             rule__CollectionTypeCS__Group_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__2_in_rule__CollectionTypeCS__Group_1__133264);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__2_in_rule__CollectionTypeCS__Group_1__135134);
             rule__CollectionTypeCS__Group_1__2();
 
             state._fsp--;
@@ -48975,25 +51443,25 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16074:1: rule__CollectionTypeCS__Group_1__1__Impl : ( ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17092:1: rule__CollectionTypeCS__Group_1__1__Impl : ( ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 ) ) ;
     public final void rule__CollectionTypeCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16078:1: ( ( ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16079:1: ( ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17096:1: ( ( ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17097:1: ( ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16079:1: ( ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16080:1: ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17097:1: ( ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17098:1: ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionTypeCSAccess().getOwnedTypeAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16081:1: ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16081:2: rule__CollectionTypeCS__OwnedTypeAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17099:1: ( rule__CollectionTypeCS__OwnedTypeAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17099:2: rule__CollectionTypeCS__OwnedTypeAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__OwnedTypeAssignment_1_1_in_rule__CollectionTypeCS__Group_1__1__Impl33291);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__OwnedTypeAssignment_1_1_in_rule__CollectionTypeCS__Group_1__1__Impl35161);
             rule__CollectionTypeCS__OwnedTypeAssignment_1_1();
 
             state._fsp--;
@@ -49026,16 +51494,16 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16091:1: rule__CollectionTypeCS__Group_1__2 : rule__CollectionTypeCS__Group_1__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17109:1: rule__CollectionTypeCS__Group_1__2 : rule__CollectionTypeCS__Group_1__2__Impl ;
     public final void rule__CollectionTypeCS__Group_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16095:1: ( rule__CollectionTypeCS__Group_1__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16096:2: rule__CollectionTypeCS__Group_1__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17113:1: ( rule__CollectionTypeCS__Group_1__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17114:2: rule__CollectionTypeCS__Group_1__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__2__Impl_in_rule__CollectionTypeCS__Group_1__233321);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionTypeCS__Group_1__2__Impl_in_rule__CollectionTypeCS__Group_1__235191);
             rule__CollectionTypeCS__Group_1__2__Impl();
 
             state._fsp--;
@@ -49059,22 +51527,22 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__Group_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16102:1: rule__CollectionTypeCS__Group_1__2__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17120:1: rule__CollectionTypeCS__Group_1__2__Impl : ( ')' ) ;
     public final void rule__CollectionTypeCS__Group_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16106:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16107:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17124:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17125:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16107:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16108:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17125:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17126:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionTypeCSAccess().getRightParenthesisKeyword_1_2()); 
             }
-            match(input,96,FollowSets001.FOLLOW_96_in_rule__CollectionTypeCS__Group_1__2__Impl33349); if (state.failed) return ;
+            match(input,105,FollowSets001.FOLLOW_105_in_rule__CollectionTypeCS__Group_1__2__Impl35219); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionTypeCSAccess().getRightParenthesisKeyword_1_2()); 
             }
@@ -49100,21 +51568,21 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16127:1: rule__TupleTypeCS__Group__0 : rule__TupleTypeCS__Group__0__Impl rule__TupleTypeCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17145:1: rule__TupleTypeCS__Group__0 : rule__TupleTypeCS__Group__0__Impl rule__TupleTypeCS__Group__1 ;
     public final void rule__TupleTypeCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16131:1: ( rule__TupleTypeCS__Group__0__Impl rule__TupleTypeCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16132:2: rule__TupleTypeCS__Group__0__Impl rule__TupleTypeCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17149:1: ( rule__TupleTypeCS__Group__0__Impl rule__TupleTypeCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17150:2: rule__TupleTypeCS__Group__0__Impl rule__TupleTypeCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group__0__Impl_in_rule__TupleTypeCS__Group__033386);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group__0__Impl_in_rule__TupleTypeCS__Group__035256);
             rule__TupleTypeCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group__1_in_rule__TupleTypeCS__Group__033389);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group__1_in_rule__TupleTypeCS__Group__035259);
             rule__TupleTypeCS__Group__1();
 
             state._fsp--;
@@ -49138,25 +51606,25 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16139:1: rule__TupleTypeCS__Group__0__Impl : ( ( rule__TupleTypeCS__NameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17157:1: rule__TupleTypeCS__Group__0__Impl : ( ( rule__TupleTypeCS__NameAssignment_0 ) ) ;
     public final void rule__TupleTypeCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16143:1: ( ( ( rule__TupleTypeCS__NameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16144:1: ( ( rule__TupleTypeCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17161:1: ( ( ( rule__TupleTypeCS__NameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17162:1: ( ( rule__TupleTypeCS__NameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16144:1: ( ( rule__TupleTypeCS__NameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16145:1: ( rule__TupleTypeCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17162:1: ( ( rule__TupleTypeCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17163:1: ( rule__TupleTypeCS__NameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16146:1: ( rule__TupleTypeCS__NameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16146:2: rule__TupleTypeCS__NameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17164:1: ( rule__TupleTypeCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17164:2: rule__TupleTypeCS__NameAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__NameAssignment_0_in_rule__TupleTypeCS__Group__0__Impl33416);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__NameAssignment_0_in_rule__TupleTypeCS__Group__0__Impl35286);
             rule__TupleTypeCS__NameAssignment_0();
 
             state._fsp--;
@@ -49189,16 +51657,16 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16156:1: rule__TupleTypeCS__Group__1 : rule__TupleTypeCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17174:1: rule__TupleTypeCS__Group__1 : rule__TupleTypeCS__Group__1__Impl ;
     public final void rule__TupleTypeCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16160:1: ( rule__TupleTypeCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16161:2: rule__TupleTypeCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17178:1: ( rule__TupleTypeCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17179:2: rule__TupleTypeCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group__1__Impl_in_rule__TupleTypeCS__Group__133446);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group__1__Impl_in_rule__TupleTypeCS__Group__135316);
             rule__TupleTypeCS__Group__1__Impl();
 
             state._fsp--;
@@ -49222,33 +51690,33 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16167:1: rule__TupleTypeCS__Group__1__Impl : ( ( rule__TupleTypeCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17185:1: rule__TupleTypeCS__Group__1__Impl : ( ( rule__TupleTypeCS__Group_1__0 )? ) ;
     public final void rule__TupleTypeCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16171:1: ( ( ( rule__TupleTypeCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16172:1: ( ( rule__TupleTypeCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17189:1: ( ( ( rule__TupleTypeCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17190:1: ( ( rule__TupleTypeCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16172:1: ( ( rule__TupleTypeCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16173:1: ( rule__TupleTypeCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17190:1: ( ( rule__TupleTypeCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17191:1: ( rule__TupleTypeCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16174:1: ( rule__TupleTypeCS__Group_1__0 )?
-            int alt182=2;
-            int LA182_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17192:1: ( rule__TupleTypeCS__Group_1__0 )?
+            int alt210=2;
+            int LA210_0 = input.LA(1);
 
-            if ( (LA182_0==95) ) {
-                alt182=1;
+            if ( (LA210_0==104) ) {
+                alt210=1;
             }
-            switch (alt182) {
+            switch (alt210) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16174:2: rule__TupleTypeCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17192:2: rule__TupleTypeCS__Group_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__0_in_rule__TupleTypeCS__Group__1__Impl33473);
+                    pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__0_in_rule__TupleTypeCS__Group__1__Impl35343);
                     rule__TupleTypeCS__Group_1__0();
 
                     state._fsp--;
@@ -49284,21 +51752,21 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16188:1: rule__TupleTypeCS__Group_1__0 : rule__TupleTypeCS__Group_1__0__Impl rule__TupleTypeCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17206:1: rule__TupleTypeCS__Group_1__0 : rule__TupleTypeCS__Group_1__0__Impl rule__TupleTypeCS__Group_1__1 ;
     public final void rule__TupleTypeCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16192:1: ( rule__TupleTypeCS__Group_1__0__Impl rule__TupleTypeCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16193:2: rule__TupleTypeCS__Group_1__0__Impl rule__TupleTypeCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17210:1: ( rule__TupleTypeCS__Group_1__0__Impl rule__TupleTypeCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17211:2: rule__TupleTypeCS__Group_1__0__Impl rule__TupleTypeCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__0__Impl_in_rule__TupleTypeCS__Group_1__033508);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__0__Impl_in_rule__TupleTypeCS__Group_1__035378);
             rule__TupleTypeCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__1_in_rule__TupleTypeCS__Group_1__033511);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__1_in_rule__TupleTypeCS__Group_1__035381);
             rule__TupleTypeCS__Group_1__1();
 
             state._fsp--;
@@ -49322,22 +51790,22 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16200:1: rule__TupleTypeCS__Group_1__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17218:1: rule__TupleTypeCS__Group_1__0__Impl : ( '(' ) ;
     public final void rule__TupleTypeCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16204:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16205:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17222:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17223:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16205:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16206:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17223:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17224:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getLeftParenthesisKeyword_1_0()); 
             }
-            match(input,95,FollowSets001.FOLLOW_95_in_rule__TupleTypeCS__Group_1__0__Impl33539); if (state.failed) return ;
+            match(input,104,FollowSets001.FOLLOW_104_in_rule__TupleTypeCS__Group_1__0__Impl35409); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleTypeCSAccess().getLeftParenthesisKeyword_1_0()); 
             }
@@ -49363,21 +51831,21 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16219:1: rule__TupleTypeCS__Group_1__1 : rule__TupleTypeCS__Group_1__1__Impl rule__TupleTypeCS__Group_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17237:1: rule__TupleTypeCS__Group_1__1 : rule__TupleTypeCS__Group_1__1__Impl rule__TupleTypeCS__Group_1__2 ;
     public final void rule__TupleTypeCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16223:1: ( rule__TupleTypeCS__Group_1__1__Impl rule__TupleTypeCS__Group_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16224:2: rule__TupleTypeCS__Group_1__1__Impl rule__TupleTypeCS__Group_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17241:1: ( rule__TupleTypeCS__Group_1__1__Impl rule__TupleTypeCS__Group_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17242:2: rule__TupleTypeCS__Group_1__1__Impl rule__TupleTypeCS__Group_1__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__1__Impl_in_rule__TupleTypeCS__Group_1__133570);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__1__Impl_in_rule__TupleTypeCS__Group_1__135440);
             rule__TupleTypeCS__Group_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__2_in_rule__TupleTypeCS__Group_1__133573);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__2_in_rule__TupleTypeCS__Group_1__135443);
             rule__TupleTypeCS__Group_1__2();
 
             state._fsp--;
@@ -49401,33 +51869,33 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16231:1: rule__TupleTypeCS__Group_1__1__Impl : ( ( rule__TupleTypeCS__Group_1_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17249:1: rule__TupleTypeCS__Group_1__1__Impl : ( ( rule__TupleTypeCS__Group_1_1__0 )? ) ;
     public final void rule__TupleTypeCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16235:1: ( ( ( rule__TupleTypeCS__Group_1_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16236:1: ( ( rule__TupleTypeCS__Group_1_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17253:1: ( ( ( rule__TupleTypeCS__Group_1_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17254:1: ( ( rule__TupleTypeCS__Group_1_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16236:1: ( ( rule__TupleTypeCS__Group_1_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16237:1: ( rule__TupleTypeCS__Group_1_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17254:1: ( ( rule__TupleTypeCS__Group_1_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17255:1: ( rule__TupleTypeCS__Group_1_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getGroup_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16238:1: ( rule__TupleTypeCS__Group_1_1__0 )?
-            int alt183=2;
-            int LA183_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17256:1: ( rule__TupleTypeCS__Group_1_1__0 )?
+            int alt211=2;
+            int LA211_0 = input.LA(1);
 
-            if ( ((LA183_0>=RULE_SIMPLE_ID && LA183_0<=RULE_ESCAPED_ID)||(LA183_0>=17 && LA183_0<=52)||(LA183_0>=55 && LA183_0<=60)) ) {
-                alt183=1;
+            if ( ((LA211_0>=RULE_SIMPLE_ID && LA211_0<=RULE_ESCAPED_ID)||(LA211_0>=17 && LA211_0<=52)||(LA211_0>=64 && LA211_0<=69)) ) {
+                alt211=1;
             }
-            switch (alt183) {
+            switch (alt211) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16238:2: rule__TupleTypeCS__Group_1_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17256:2: rule__TupleTypeCS__Group_1_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1__0_in_rule__TupleTypeCS__Group_1__1__Impl33600);
+                    pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1__0_in_rule__TupleTypeCS__Group_1__1__Impl35470);
                     rule__TupleTypeCS__Group_1_1__0();
 
                     state._fsp--;
@@ -49463,16 +51931,16 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16248:1: rule__TupleTypeCS__Group_1__2 : rule__TupleTypeCS__Group_1__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17266:1: rule__TupleTypeCS__Group_1__2 : rule__TupleTypeCS__Group_1__2__Impl ;
     public final void rule__TupleTypeCS__Group_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16252:1: ( rule__TupleTypeCS__Group_1__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16253:2: rule__TupleTypeCS__Group_1__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17270:1: ( rule__TupleTypeCS__Group_1__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17271:2: rule__TupleTypeCS__Group_1__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__2__Impl_in_rule__TupleTypeCS__Group_1__233631);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1__2__Impl_in_rule__TupleTypeCS__Group_1__235501);
             rule__TupleTypeCS__Group_1__2__Impl();
 
             state._fsp--;
@@ -49496,22 +51964,22 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16259:1: rule__TupleTypeCS__Group_1__2__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17277:1: rule__TupleTypeCS__Group_1__2__Impl : ( ')' ) ;
     public final void rule__TupleTypeCS__Group_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16263:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16264:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17281:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17282:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16264:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16265:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17282:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17283:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getRightParenthesisKeyword_1_2()); 
             }
-            match(input,96,FollowSets001.FOLLOW_96_in_rule__TupleTypeCS__Group_1__2__Impl33659); if (state.failed) return ;
+            match(input,105,FollowSets001.FOLLOW_105_in_rule__TupleTypeCS__Group_1__2__Impl35529); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleTypeCSAccess().getRightParenthesisKeyword_1_2()); 
             }
@@ -49537,21 +52005,21 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16284:1: rule__TupleTypeCS__Group_1_1__0 : rule__TupleTypeCS__Group_1_1__0__Impl rule__TupleTypeCS__Group_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17302:1: rule__TupleTypeCS__Group_1_1__0 : rule__TupleTypeCS__Group_1_1__0__Impl rule__TupleTypeCS__Group_1_1__1 ;
     public final void rule__TupleTypeCS__Group_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16288:1: ( rule__TupleTypeCS__Group_1_1__0__Impl rule__TupleTypeCS__Group_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16289:2: rule__TupleTypeCS__Group_1_1__0__Impl rule__TupleTypeCS__Group_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17306:1: ( rule__TupleTypeCS__Group_1_1__0__Impl rule__TupleTypeCS__Group_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17307:2: rule__TupleTypeCS__Group_1_1__0__Impl rule__TupleTypeCS__Group_1_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1__0__Impl_in_rule__TupleTypeCS__Group_1_1__033696);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1__0__Impl_in_rule__TupleTypeCS__Group_1_1__035566);
             rule__TupleTypeCS__Group_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1__1_in_rule__TupleTypeCS__Group_1_1__033699);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1__1_in_rule__TupleTypeCS__Group_1_1__035569);
             rule__TupleTypeCS__Group_1_1__1();
 
             state._fsp--;
@@ -49575,25 +52043,25 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16296:1: rule__TupleTypeCS__Group_1_1__0__Impl : ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17314:1: rule__TupleTypeCS__Group_1_1__0__Impl : ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 ) ) ;
     public final void rule__TupleTypeCS__Group_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16300:1: ( ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16301:1: ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17318:1: ( ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17319:1: ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16301:1: ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16302:1: ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17319:1: ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17320:1: ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getOwnedPartsAssignment_1_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16303:1: ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16303:2: rule__TupleTypeCS__OwnedPartsAssignment_1_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17321:1: ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17321:2: rule__TupleTypeCS__OwnedPartsAssignment_1_1_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__OwnedPartsAssignment_1_1_0_in_rule__TupleTypeCS__Group_1_1__0__Impl33726);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__OwnedPartsAssignment_1_1_0_in_rule__TupleTypeCS__Group_1_1__0__Impl35596);
             rule__TupleTypeCS__OwnedPartsAssignment_1_1_0();
 
             state._fsp--;
@@ -49626,16 +52094,16 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16313:1: rule__TupleTypeCS__Group_1_1__1 : rule__TupleTypeCS__Group_1_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17331:1: rule__TupleTypeCS__Group_1_1__1 : rule__TupleTypeCS__Group_1_1__1__Impl ;
     public final void rule__TupleTypeCS__Group_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16317:1: ( rule__TupleTypeCS__Group_1_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16318:2: rule__TupleTypeCS__Group_1_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17335:1: ( rule__TupleTypeCS__Group_1_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17336:2: rule__TupleTypeCS__Group_1_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1__1__Impl_in_rule__TupleTypeCS__Group_1_1__133756);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1__1__Impl_in_rule__TupleTypeCS__Group_1_1__135626);
             rule__TupleTypeCS__Group_1_1__1__Impl();
 
             state._fsp--;
@@ -49659,37 +52127,37 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16324:1: rule__TupleTypeCS__Group_1_1__1__Impl : ( ( rule__TupleTypeCS__Group_1_1_1__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17342:1: rule__TupleTypeCS__Group_1_1__1__Impl : ( ( rule__TupleTypeCS__Group_1_1_1__0 )* ) ;
     public final void rule__TupleTypeCS__Group_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16328:1: ( ( ( rule__TupleTypeCS__Group_1_1_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16329:1: ( ( rule__TupleTypeCS__Group_1_1_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17346:1: ( ( ( rule__TupleTypeCS__Group_1_1_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17347:1: ( ( rule__TupleTypeCS__Group_1_1_1__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16329:1: ( ( rule__TupleTypeCS__Group_1_1_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16330:1: ( rule__TupleTypeCS__Group_1_1_1__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17347:1: ( ( rule__TupleTypeCS__Group_1_1_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17348:1: ( rule__TupleTypeCS__Group_1_1_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getGroup_1_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16331:1: ( rule__TupleTypeCS__Group_1_1_1__0 )*
-            loop184:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17349:1: ( rule__TupleTypeCS__Group_1_1_1__0 )*
+            loop212:
             do {
-                int alt184=2;
-                int LA184_0 = input.LA(1);
+                int alt212=2;
+                int LA212_0 = input.LA(1);
 
-                if ( (LA184_0==98) ) {
-                    alt184=1;
+                if ( (LA212_0==107) ) {
+                    alt212=1;
                 }
 
 
-                switch (alt184) {
+                switch (alt212) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16331:2: rule__TupleTypeCS__Group_1_1_1__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17349:2: rule__TupleTypeCS__Group_1_1_1__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1_1__0_in_rule__TupleTypeCS__Group_1_1__1__Impl33783);
+            	    pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1_1__0_in_rule__TupleTypeCS__Group_1_1__1__Impl35653);
             	    rule__TupleTypeCS__Group_1_1_1__0();
 
             	    state._fsp--;
@@ -49699,7 +52167,7 @@
             	    break;
 
             	default :
-            	    break loop184;
+            	    break loop212;
                 }
             } while (true);
 
@@ -49728,21 +52196,21 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16345:1: rule__TupleTypeCS__Group_1_1_1__0 : rule__TupleTypeCS__Group_1_1_1__0__Impl rule__TupleTypeCS__Group_1_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17363:1: rule__TupleTypeCS__Group_1_1_1__0 : rule__TupleTypeCS__Group_1_1_1__0__Impl rule__TupleTypeCS__Group_1_1_1__1 ;
     public final void rule__TupleTypeCS__Group_1_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16349:1: ( rule__TupleTypeCS__Group_1_1_1__0__Impl rule__TupleTypeCS__Group_1_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16350:2: rule__TupleTypeCS__Group_1_1_1__0__Impl rule__TupleTypeCS__Group_1_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17367:1: ( rule__TupleTypeCS__Group_1_1_1__0__Impl rule__TupleTypeCS__Group_1_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17368:2: rule__TupleTypeCS__Group_1_1_1__0__Impl rule__TupleTypeCS__Group_1_1_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1_1__0__Impl_in_rule__TupleTypeCS__Group_1_1_1__033818);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1_1__0__Impl_in_rule__TupleTypeCS__Group_1_1_1__035688);
             rule__TupleTypeCS__Group_1_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1_1__1_in_rule__TupleTypeCS__Group_1_1_1__033821);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1_1__1_in_rule__TupleTypeCS__Group_1_1_1__035691);
             rule__TupleTypeCS__Group_1_1_1__1();
 
             state._fsp--;
@@ -49766,22 +52234,22 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16357:1: rule__TupleTypeCS__Group_1_1_1__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17375:1: rule__TupleTypeCS__Group_1_1_1__0__Impl : ( ',' ) ;
     public final void rule__TupleTypeCS__Group_1_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16361:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16362:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17379:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17380:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16362:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16363:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17380:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17381:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getCommaKeyword_1_1_1_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__TupleTypeCS__Group_1_1_1__0__Impl33849); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__TupleTypeCS__Group_1_1_1__0__Impl35719); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleTypeCSAccess().getCommaKeyword_1_1_1_0()); 
             }
@@ -49807,16 +52275,16 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16376:1: rule__TupleTypeCS__Group_1_1_1__1 : rule__TupleTypeCS__Group_1_1_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17394:1: rule__TupleTypeCS__Group_1_1_1__1 : rule__TupleTypeCS__Group_1_1_1__1__Impl ;
     public final void rule__TupleTypeCS__Group_1_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16380:1: ( rule__TupleTypeCS__Group_1_1_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16381:2: rule__TupleTypeCS__Group_1_1_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17398:1: ( rule__TupleTypeCS__Group_1_1_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17399:2: rule__TupleTypeCS__Group_1_1_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1_1__1__Impl_in_rule__TupleTypeCS__Group_1_1_1__133880);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__Group_1_1_1__1__Impl_in_rule__TupleTypeCS__Group_1_1_1__135750);
             rule__TupleTypeCS__Group_1_1_1__1__Impl();
 
             state._fsp--;
@@ -49840,25 +52308,25 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__Group_1_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16387:1: rule__TupleTypeCS__Group_1_1_1__1__Impl : ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17405:1: rule__TupleTypeCS__Group_1_1_1__1__Impl : ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 ) ) ;
     public final void rule__TupleTypeCS__Group_1_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16391:1: ( ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16392:1: ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17409:1: ( ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17410:1: ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16392:1: ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16393:1: ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17410:1: ( ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17411:1: ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getOwnedPartsAssignment_1_1_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16394:1: ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16394:2: rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17412:1: ( rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17412:2: rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1_in_rule__TupleTypeCS__Group_1_1_1__1__Impl33907);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1_in_rule__TupleTypeCS__Group_1_1_1__1__Impl35777);
             rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1();
 
             state._fsp--;
@@ -49891,21 +52359,21 @@
 
 
     // $ANTLR start "rule__TuplePartCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16408:1: rule__TuplePartCS__Group__0 : rule__TuplePartCS__Group__0__Impl rule__TuplePartCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17426:1: rule__TuplePartCS__Group__0 : rule__TuplePartCS__Group__0__Impl rule__TuplePartCS__Group__1 ;
     public final void rule__TuplePartCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16412:1: ( rule__TuplePartCS__Group__0__Impl rule__TuplePartCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16413:2: rule__TuplePartCS__Group__0__Impl rule__TuplePartCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17430:1: ( rule__TuplePartCS__Group__0__Impl rule__TuplePartCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17431:2: rule__TuplePartCS__Group__0__Impl rule__TuplePartCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__0__Impl_in_rule__TuplePartCS__Group__033941);
+            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__0__Impl_in_rule__TuplePartCS__Group__035811);
             rule__TuplePartCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__1_in_rule__TuplePartCS__Group__033944);
+            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__1_in_rule__TuplePartCS__Group__035814);
             rule__TuplePartCS__Group__1();
 
             state._fsp--;
@@ -49929,25 +52397,25 @@
 
 
     // $ANTLR start "rule__TuplePartCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16420:1: rule__TuplePartCS__Group__0__Impl : ( ( rule__TuplePartCS__NameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17438:1: rule__TuplePartCS__Group__0__Impl : ( ( rule__TuplePartCS__NameAssignment_0 ) ) ;
     public final void rule__TuplePartCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16424:1: ( ( ( rule__TuplePartCS__NameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16425:1: ( ( rule__TuplePartCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17442:1: ( ( ( rule__TuplePartCS__NameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17443:1: ( ( rule__TuplePartCS__NameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16425:1: ( ( rule__TuplePartCS__NameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16426:1: ( rule__TuplePartCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17443:1: ( ( rule__TuplePartCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17444:1: ( rule__TuplePartCS__NameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTuplePartCSAccess().getNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16427:1: ( rule__TuplePartCS__NameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16427:2: rule__TuplePartCS__NameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17445:1: ( rule__TuplePartCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17445:2: rule__TuplePartCS__NameAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__NameAssignment_0_in_rule__TuplePartCS__Group__0__Impl33971);
+            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__NameAssignment_0_in_rule__TuplePartCS__Group__0__Impl35841);
             rule__TuplePartCS__NameAssignment_0();
 
             state._fsp--;
@@ -49980,21 +52448,21 @@
 
 
     // $ANTLR start "rule__TuplePartCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16437:1: rule__TuplePartCS__Group__1 : rule__TuplePartCS__Group__1__Impl rule__TuplePartCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17455:1: rule__TuplePartCS__Group__1 : rule__TuplePartCS__Group__1__Impl rule__TuplePartCS__Group__2 ;
     public final void rule__TuplePartCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16441:1: ( rule__TuplePartCS__Group__1__Impl rule__TuplePartCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16442:2: rule__TuplePartCS__Group__1__Impl rule__TuplePartCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17459:1: ( rule__TuplePartCS__Group__1__Impl rule__TuplePartCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17460:2: rule__TuplePartCS__Group__1__Impl rule__TuplePartCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__1__Impl_in_rule__TuplePartCS__Group__134001);
+            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__1__Impl_in_rule__TuplePartCS__Group__135871);
             rule__TuplePartCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__2_in_rule__TuplePartCS__Group__134004);
+            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__2_in_rule__TuplePartCS__Group__135874);
             rule__TuplePartCS__Group__2();
 
             state._fsp--;
@@ -50018,22 +52486,22 @@
 
 
     // $ANTLR start "rule__TuplePartCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16449:1: rule__TuplePartCS__Group__1__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17467:1: rule__TuplePartCS__Group__1__Impl : ( ':' ) ;
     public final void rule__TuplePartCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16453:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16454:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17471:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17472:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16454:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16455:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17472:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17473:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTuplePartCSAccess().getColonKeyword_1()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__TuplePartCS__Group__1__Impl34032); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__TuplePartCS__Group__1__Impl35902); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTuplePartCSAccess().getColonKeyword_1()); 
             }
@@ -50059,16 +52527,16 @@
 
 
     // $ANTLR start "rule__TuplePartCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16468:1: rule__TuplePartCS__Group__2 : rule__TuplePartCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17486:1: rule__TuplePartCS__Group__2 : rule__TuplePartCS__Group__2__Impl ;
     public final void rule__TuplePartCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16472:1: ( rule__TuplePartCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16473:2: rule__TuplePartCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17490:1: ( rule__TuplePartCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17491:2: rule__TuplePartCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__2__Impl_in_rule__TuplePartCS__Group__234063);
+            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__Group__2__Impl_in_rule__TuplePartCS__Group__235933);
             rule__TuplePartCS__Group__2__Impl();
 
             state._fsp--;
@@ -50092,25 +52560,25 @@
 
 
     // $ANTLR start "rule__TuplePartCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16479:1: rule__TuplePartCS__Group__2__Impl : ( ( rule__TuplePartCS__OwnedTypeAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17497:1: rule__TuplePartCS__Group__2__Impl : ( ( rule__TuplePartCS__OwnedTypeAssignment_2 ) ) ;
     public final void rule__TuplePartCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16483:1: ( ( ( rule__TuplePartCS__OwnedTypeAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16484:1: ( ( rule__TuplePartCS__OwnedTypeAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17501:1: ( ( ( rule__TuplePartCS__OwnedTypeAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17502:1: ( ( rule__TuplePartCS__OwnedTypeAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16484:1: ( ( rule__TuplePartCS__OwnedTypeAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16485:1: ( rule__TuplePartCS__OwnedTypeAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17502:1: ( ( rule__TuplePartCS__OwnedTypeAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17503:1: ( rule__TuplePartCS__OwnedTypeAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTuplePartCSAccess().getOwnedTypeAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16486:1: ( rule__TuplePartCS__OwnedTypeAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16486:2: rule__TuplePartCS__OwnedTypeAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17504:1: ( rule__TuplePartCS__OwnedTypeAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17504:2: rule__TuplePartCS__OwnedTypeAssignment_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__OwnedTypeAssignment_2_in_rule__TuplePartCS__Group__2__Impl34090);
+            pushFollow(FollowSets001.FOLLOW_rule__TuplePartCS__OwnedTypeAssignment_2_in_rule__TuplePartCS__Group__2__Impl35960);
             rule__TuplePartCS__OwnedTypeAssignment_2();
 
             state._fsp--;
@@ -50143,21 +52611,21 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16502:1: rule__CollectionLiteralExpCS__Group__0 : rule__CollectionLiteralExpCS__Group__0__Impl rule__CollectionLiteralExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17520:1: rule__CollectionLiteralExpCS__Group__0 : rule__CollectionLiteralExpCS__Group__0__Impl rule__CollectionLiteralExpCS__Group__1 ;
     public final void rule__CollectionLiteralExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16506:1: ( rule__CollectionLiteralExpCS__Group__0__Impl rule__CollectionLiteralExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16507:2: rule__CollectionLiteralExpCS__Group__0__Impl rule__CollectionLiteralExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17524:1: ( rule__CollectionLiteralExpCS__Group__0__Impl rule__CollectionLiteralExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17525:2: rule__CollectionLiteralExpCS__Group__0__Impl rule__CollectionLiteralExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__0__Impl_in_rule__CollectionLiteralExpCS__Group__034126);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__0__Impl_in_rule__CollectionLiteralExpCS__Group__035996);
             rule__CollectionLiteralExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__1_in_rule__CollectionLiteralExpCS__Group__034129);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__1_in_rule__CollectionLiteralExpCS__Group__035999);
             rule__CollectionLiteralExpCS__Group__1();
 
             state._fsp--;
@@ -50181,25 +52649,25 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16514:1: rule__CollectionLiteralExpCS__Group__0__Impl : ( ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17532:1: rule__CollectionLiteralExpCS__Group__0__Impl : ( ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 ) ) ;
     public final void rule__CollectionLiteralExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16518:1: ( ( ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16519:1: ( ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17536:1: ( ( ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17537:1: ( ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16519:1: ( ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16520:1: ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17537:1: ( ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17538:1: ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getOwnedTypeAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16521:1: ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16521:2: rule__CollectionLiteralExpCS__OwnedTypeAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17539:1: ( rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17539:2: rule__CollectionLiteralExpCS__OwnedTypeAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__OwnedTypeAssignment_0_in_rule__CollectionLiteralExpCS__Group__0__Impl34156);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__OwnedTypeAssignment_0_in_rule__CollectionLiteralExpCS__Group__0__Impl36026);
             rule__CollectionLiteralExpCS__OwnedTypeAssignment_0();
 
             state._fsp--;
@@ -50232,21 +52700,21 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16531:1: rule__CollectionLiteralExpCS__Group__1 : rule__CollectionLiteralExpCS__Group__1__Impl rule__CollectionLiteralExpCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17549:1: rule__CollectionLiteralExpCS__Group__1 : rule__CollectionLiteralExpCS__Group__1__Impl rule__CollectionLiteralExpCS__Group__2 ;
     public final void rule__CollectionLiteralExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16535:1: ( rule__CollectionLiteralExpCS__Group__1__Impl rule__CollectionLiteralExpCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16536:2: rule__CollectionLiteralExpCS__Group__1__Impl rule__CollectionLiteralExpCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17553:1: ( rule__CollectionLiteralExpCS__Group__1__Impl rule__CollectionLiteralExpCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17554:2: rule__CollectionLiteralExpCS__Group__1__Impl rule__CollectionLiteralExpCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__1__Impl_in_rule__CollectionLiteralExpCS__Group__134186);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__1__Impl_in_rule__CollectionLiteralExpCS__Group__136056);
             rule__CollectionLiteralExpCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__2_in_rule__CollectionLiteralExpCS__Group__134189);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__2_in_rule__CollectionLiteralExpCS__Group__136059);
             rule__CollectionLiteralExpCS__Group__2();
 
             state._fsp--;
@@ -50270,22 +52738,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16543:1: rule__CollectionLiteralExpCS__Group__1__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17561:1: rule__CollectionLiteralExpCS__Group__1__Impl : ( '{' ) ;
     public final void rule__CollectionLiteralExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16547:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16548:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17565:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17566:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16548:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16549:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17566:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17567:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__CollectionLiteralExpCS__Group__1__Impl34217); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__CollectionLiteralExpCS__Group__1__Impl36087); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
@@ -50311,21 +52779,21 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16562:1: rule__CollectionLiteralExpCS__Group__2 : rule__CollectionLiteralExpCS__Group__2__Impl rule__CollectionLiteralExpCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17580:1: rule__CollectionLiteralExpCS__Group__2 : rule__CollectionLiteralExpCS__Group__2__Impl rule__CollectionLiteralExpCS__Group__3 ;
     public final void rule__CollectionLiteralExpCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16566:1: ( rule__CollectionLiteralExpCS__Group__2__Impl rule__CollectionLiteralExpCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16567:2: rule__CollectionLiteralExpCS__Group__2__Impl rule__CollectionLiteralExpCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17584:1: ( rule__CollectionLiteralExpCS__Group__2__Impl rule__CollectionLiteralExpCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17585:2: rule__CollectionLiteralExpCS__Group__2__Impl rule__CollectionLiteralExpCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__2__Impl_in_rule__CollectionLiteralExpCS__Group__234248);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__2__Impl_in_rule__CollectionLiteralExpCS__Group__236118);
             rule__CollectionLiteralExpCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__3_in_rule__CollectionLiteralExpCS__Group__234251);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__3_in_rule__CollectionLiteralExpCS__Group__236121);
             rule__CollectionLiteralExpCS__Group__3();
 
             state._fsp--;
@@ -50349,33 +52817,33 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16574:1: rule__CollectionLiteralExpCS__Group__2__Impl : ( ( rule__CollectionLiteralExpCS__Group_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17592:1: rule__CollectionLiteralExpCS__Group__2__Impl : ( ( rule__CollectionLiteralExpCS__Group_2__0 )? ) ;
     public final void rule__CollectionLiteralExpCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16578:1: ( ( ( rule__CollectionLiteralExpCS__Group_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16579:1: ( ( rule__CollectionLiteralExpCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17596:1: ( ( ( rule__CollectionLiteralExpCS__Group_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17597:1: ( ( rule__CollectionLiteralExpCS__Group_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16579:1: ( ( rule__CollectionLiteralExpCS__Group_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16580:1: ( rule__CollectionLiteralExpCS__Group_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17597:1: ( ( rule__CollectionLiteralExpCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17598:1: ( rule__CollectionLiteralExpCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16581:1: ( rule__CollectionLiteralExpCS__Group_2__0 )?
-            int alt185=2;
-            int LA185_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17599:1: ( rule__CollectionLiteralExpCS__Group_2__0 )?
+            int alt213=2;
+            int LA213_0 = input.LA(1);
 
-            if ( ((LA185_0>=RULE_INT && LA185_0<=RULE_SINGLE_QUOTED_STRING)||(LA185_0>=RULE_SIMPLE_ID && LA185_0<=RULE_ESCAPED_ID)||(LA185_0>=17 && LA185_0<=52)||(LA185_0>=55 && LA185_0<=63)||(LA185_0>=80 && LA185_0<=93)||LA185_0==95||LA185_0==97||(LA185_0>=105 && LA185_0<=107)||LA185_0==112||(LA185_0>=117 && LA185_0<=118)||(LA185_0>=131 && LA185_0<=132)) ) {
-                alt185=1;
+            if ( ((LA213_0>=RULE_INT && LA213_0<=RULE_SINGLE_QUOTED_STRING)||(LA213_0>=RULE_SIMPLE_ID && LA213_0<=RULE_ESCAPED_ID)||(LA213_0>=17 && LA213_0<=52)||(LA213_0>=64 && LA213_0<=72)||(LA213_0>=89 && LA213_0<=102)||LA213_0==104||LA213_0==106||(LA213_0>=114 && LA213_0<=116)||LA213_0==121||(LA213_0>=126 && LA213_0<=127)||(LA213_0>=131 && LA213_0<=132)) ) {
+                alt213=1;
             }
-            switch (alt185) {
+            switch (alt213) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16581:2: rule__CollectionLiteralExpCS__Group_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17599:2: rule__CollectionLiteralExpCS__Group_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2__0_in_rule__CollectionLiteralExpCS__Group__2__Impl34278);
+                    pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2__0_in_rule__CollectionLiteralExpCS__Group__2__Impl36148);
                     rule__CollectionLiteralExpCS__Group_2__0();
 
                     state._fsp--;
@@ -50411,16 +52879,16 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16591:1: rule__CollectionLiteralExpCS__Group__3 : rule__CollectionLiteralExpCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17609:1: rule__CollectionLiteralExpCS__Group__3 : rule__CollectionLiteralExpCS__Group__3__Impl ;
     public final void rule__CollectionLiteralExpCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16595:1: ( rule__CollectionLiteralExpCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16596:2: rule__CollectionLiteralExpCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17613:1: ( rule__CollectionLiteralExpCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17614:2: rule__CollectionLiteralExpCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__3__Impl_in_rule__CollectionLiteralExpCS__Group__334309);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group__3__Impl_in_rule__CollectionLiteralExpCS__Group__336179);
             rule__CollectionLiteralExpCS__Group__3__Impl();
 
             state._fsp--;
@@ -50444,22 +52912,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16602:1: rule__CollectionLiteralExpCS__Group__3__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17620:1: rule__CollectionLiteralExpCS__Group__3__Impl : ( '}' ) ;
     public final void rule__CollectionLiteralExpCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16606:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16607:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17624:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17625:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16607:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16608:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17625:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17626:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__CollectionLiteralExpCS__Group__3__Impl34337); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__CollectionLiteralExpCS__Group__3__Impl36207); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); 
             }
@@ -50485,21 +52953,21 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16629:1: rule__CollectionLiteralExpCS__Group_2__0 : rule__CollectionLiteralExpCS__Group_2__0__Impl rule__CollectionLiteralExpCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17647:1: rule__CollectionLiteralExpCS__Group_2__0 : rule__CollectionLiteralExpCS__Group_2__0__Impl rule__CollectionLiteralExpCS__Group_2__1 ;
     public final void rule__CollectionLiteralExpCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16633:1: ( rule__CollectionLiteralExpCS__Group_2__0__Impl rule__CollectionLiteralExpCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16634:2: rule__CollectionLiteralExpCS__Group_2__0__Impl rule__CollectionLiteralExpCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17651:1: ( rule__CollectionLiteralExpCS__Group_2__0__Impl rule__CollectionLiteralExpCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17652:2: rule__CollectionLiteralExpCS__Group_2__0__Impl rule__CollectionLiteralExpCS__Group_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2__0__Impl_in_rule__CollectionLiteralExpCS__Group_2__034376);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2__0__Impl_in_rule__CollectionLiteralExpCS__Group_2__036246);
             rule__CollectionLiteralExpCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2__1_in_rule__CollectionLiteralExpCS__Group_2__034379);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2__1_in_rule__CollectionLiteralExpCS__Group_2__036249);
             rule__CollectionLiteralExpCS__Group_2__1();
 
             state._fsp--;
@@ -50523,25 +52991,25 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16641:1: rule__CollectionLiteralExpCS__Group_2__0__Impl : ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17659:1: rule__CollectionLiteralExpCS__Group_2__0__Impl : ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 ) ) ;
     public final void rule__CollectionLiteralExpCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16645:1: ( ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16646:1: ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17663:1: ( ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17664:1: ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16646:1: ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16647:1: ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17664:1: ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17665:1: ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getOwnedPartsAssignment_2_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16648:1: ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16648:2: rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17666:1: ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17666:2: rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0_in_rule__CollectionLiteralExpCS__Group_2__0__Impl34406);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0_in_rule__CollectionLiteralExpCS__Group_2__0__Impl36276);
             rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0();
 
             state._fsp--;
@@ -50574,16 +53042,16 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16658:1: rule__CollectionLiteralExpCS__Group_2__1 : rule__CollectionLiteralExpCS__Group_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17676:1: rule__CollectionLiteralExpCS__Group_2__1 : rule__CollectionLiteralExpCS__Group_2__1__Impl ;
     public final void rule__CollectionLiteralExpCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16662:1: ( rule__CollectionLiteralExpCS__Group_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16663:2: rule__CollectionLiteralExpCS__Group_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17680:1: ( rule__CollectionLiteralExpCS__Group_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17681:2: rule__CollectionLiteralExpCS__Group_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2__1__Impl_in_rule__CollectionLiteralExpCS__Group_2__134436);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2__1__Impl_in_rule__CollectionLiteralExpCS__Group_2__136306);
             rule__CollectionLiteralExpCS__Group_2__1__Impl();
 
             state._fsp--;
@@ -50607,37 +53075,37 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16669:1: rule__CollectionLiteralExpCS__Group_2__1__Impl : ( ( rule__CollectionLiteralExpCS__Group_2_1__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17687:1: rule__CollectionLiteralExpCS__Group_2__1__Impl : ( ( rule__CollectionLiteralExpCS__Group_2_1__0 )* ) ;
     public final void rule__CollectionLiteralExpCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16673:1: ( ( ( rule__CollectionLiteralExpCS__Group_2_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16674:1: ( ( rule__CollectionLiteralExpCS__Group_2_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17691:1: ( ( ( rule__CollectionLiteralExpCS__Group_2_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17692:1: ( ( rule__CollectionLiteralExpCS__Group_2_1__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16674:1: ( ( rule__CollectionLiteralExpCS__Group_2_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16675:1: ( rule__CollectionLiteralExpCS__Group_2_1__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17692:1: ( ( rule__CollectionLiteralExpCS__Group_2_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17693:1: ( rule__CollectionLiteralExpCS__Group_2_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getGroup_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16676:1: ( rule__CollectionLiteralExpCS__Group_2_1__0 )*
-            loop186:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17694:1: ( rule__CollectionLiteralExpCS__Group_2_1__0 )*
+            loop214:
             do {
-                int alt186=2;
-                int LA186_0 = input.LA(1);
+                int alt214=2;
+                int LA214_0 = input.LA(1);
 
-                if ( (LA186_0==98) ) {
-                    alt186=1;
+                if ( (LA214_0==107) ) {
+                    alt214=1;
                 }
 
 
-                switch (alt186) {
+                switch (alt214) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16676:2: rule__CollectionLiteralExpCS__Group_2_1__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17694:2: rule__CollectionLiteralExpCS__Group_2_1__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__0_in_rule__CollectionLiteralExpCS__Group_2__1__Impl34463);
+            	    pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__0_in_rule__CollectionLiteralExpCS__Group_2__1__Impl36333);
             	    rule__CollectionLiteralExpCS__Group_2_1__0();
 
             	    state._fsp--;
@@ -50647,7 +53115,7 @@
             	    break;
 
             	default :
-            	    break loop186;
+            	    break loop214;
                 }
             } while (true);
 
@@ -50676,21 +53144,21 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group_2_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16690:1: rule__CollectionLiteralExpCS__Group_2_1__0 : rule__CollectionLiteralExpCS__Group_2_1__0__Impl rule__CollectionLiteralExpCS__Group_2_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17708:1: rule__CollectionLiteralExpCS__Group_2_1__0 : rule__CollectionLiteralExpCS__Group_2_1__0__Impl rule__CollectionLiteralExpCS__Group_2_1__1 ;
     public final void rule__CollectionLiteralExpCS__Group_2_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16694:1: ( rule__CollectionLiteralExpCS__Group_2_1__0__Impl rule__CollectionLiteralExpCS__Group_2_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16695:2: rule__CollectionLiteralExpCS__Group_2_1__0__Impl rule__CollectionLiteralExpCS__Group_2_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17712:1: ( rule__CollectionLiteralExpCS__Group_2_1__0__Impl rule__CollectionLiteralExpCS__Group_2_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17713:2: rule__CollectionLiteralExpCS__Group_2_1__0__Impl rule__CollectionLiteralExpCS__Group_2_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__0__Impl_in_rule__CollectionLiteralExpCS__Group_2_1__034498);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__0__Impl_in_rule__CollectionLiteralExpCS__Group_2_1__036368);
             rule__CollectionLiteralExpCS__Group_2_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__1_in_rule__CollectionLiteralExpCS__Group_2_1__034501);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__1_in_rule__CollectionLiteralExpCS__Group_2_1__036371);
             rule__CollectionLiteralExpCS__Group_2_1__1();
 
             state._fsp--;
@@ -50714,22 +53182,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group_2_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16702:1: rule__CollectionLiteralExpCS__Group_2_1__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17720:1: rule__CollectionLiteralExpCS__Group_2_1__0__Impl : ( ',' ) ;
     public final void rule__CollectionLiteralExpCS__Group_2_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16706:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16707:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17724:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17725:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16707:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16708:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17725:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17726:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getCommaKeyword_2_1_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__CollectionLiteralExpCS__Group_2_1__0__Impl34529); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__CollectionLiteralExpCS__Group_2_1__0__Impl36399); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionLiteralExpCSAccess().getCommaKeyword_2_1_0()); 
             }
@@ -50755,16 +53223,16 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group_2_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16721:1: rule__CollectionLiteralExpCS__Group_2_1__1 : rule__CollectionLiteralExpCS__Group_2_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17739:1: rule__CollectionLiteralExpCS__Group_2_1__1 : rule__CollectionLiteralExpCS__Group_2_1__1__Impl ;
     public final void rule__CollectionLiteralExpCS__Group_2_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16725:1: ( rule__CollectionLiteralExpCS__Group_2_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16726:2: rule__CollectionLiteralExpCS__Group_2_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17743:1: ( rule__CollectionLiteralExpCS__Group_2_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17744:2: rule__CollectionLiteralExpCS__Group_2_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__1__Impl_in_rule__CollectionLiteralExpCS__Group_2_1__134560);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__1__Impl_in_rule__CollectionLiteralExpCS__Group_2_1__136430);
             rule__CollectionLiteralExpCS__Group_2_1__1__Impl();
 
             state._fsp--;
@@ -50788,25 +53256,25 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__Group_2_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16732:1: rule__CollectionLiteralExpCS__Group_2_1__1__Impl : ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17750:1: rule__CollectionLiteralExpCS__Group_2_1__1__Impl : ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 ) ) ;
     public final void rule__CollectionLiteralExpCS__Group_2_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16736:1: ( ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16737:1: ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17754:1: ( ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17755:1: ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16737:1: ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16738:1: ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17755:1: ( ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17756:1: ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getOwnedPartsAssignment_2_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16739:1: ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16739:2: rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17757:1: ( rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17757:2: rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1_in_rule__CollectionLiteralExpCS__Group_2_1__1__Impl34587);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1_in_rule__CollectionLiteralExpCS__Group_2_1__1__Impl36457);
             rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1();
 
             state._fsp--;
@@ -50839,21 +53307,21 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__Group_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16753:1: rule__CollectionLiteralPartCS__Group_0__0 : rule__CollectionLiteralPartCS__Group_0__0__Impl rule__CollectionLiteralPartCS__Group_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17771:1: rule__CollectionLiteralPartCS__Group_0__0 : rule__CollectionLiteralPartCS__Group_0__0__Impl rule__CollectionLiteralPartCS__Group_0__1 ;
     public final void rule__CollectionLiteralPartCS__Group_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16757:1: ( rule__CollectionLiteralPartCS__Group_0__0__Impl rule__CollectionLiteralPartCS__Group_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16758:2: rule__CollectionLiteralPartCS__Group_0__0__Impl rule__CollectionLiteralPartCS__Group_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17775:1: ( rule__CollectionLiteralPartCS__Group_0__0__Impl rule__CollectionLiteralPartCS__Group_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17776:2: rule__CollectionLiteralPartCS__Group_0__0__Impl rule__CollectionLiteralPartCS__Group_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0__0__Impl_in_rule__CollectionLiteralPartCS__Group_0__034621);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0__0__Impl_in_rule__CollectionLiteralPartCS__Group_0__036491);
             rule__CollectionLiteralPartCS__Group_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0__1_in_rule__CollectionLiteralPartCS__Group_0__034624);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0__1_in_rule__CollectionLiteralPartCS__Group_0__036494);
             rule__CollectionLiteralPartCS__Group_0__1();
 
             state._fsp--;
@@ -50877,25 +53345,25 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__Group_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16765:1: rule__CollectionLiteralPartCS__Group_0__0__Impl : ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17783:1: rule__CollectionLiteralPartCS__Group_0__0__Impl : ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 ) ) ;
     public final void rule__CollectionLiteralPartCS__Group_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16769:1: ( ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16770:1: ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17787:1: ( ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17788:1: ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16770:1: ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16771:1: ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17788:1: ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17789:1: ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralPartCSAccess().getOwnedExpressionAssignment_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16772:1: ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16772:2: rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17790:1: ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17790:2: rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0_in_rule__CollectionLiteralPartCS__Group_0__0__Impl34651);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0_in_rule__CollectionLiteralPartCS__Group_0__0__Impl36521);
             rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0();
 
             state._fsp--;
@@ -50928,16 +53396,16 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__Group_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16782:1: rule__CollectionLiteralPartCS__Group_0__1 : rule__CollectionLiteralPartCS__Group_0__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17800:1: rule__CollectionLiteralPartCS__Group_0__1 : rule__CollectionLiteralPartCS__Group_0__1__Impl ;
     public final void rule__CollectionLiteralPartCS__Group_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16786:1: ( rule__CollectionLiteralPartCS__Group_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16787:2: rule__CollectionLiteralPartCS__Group_0__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17804:1: ( rule__CollectionLiteralPartCS__Group_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17805:2: rule__CollectionLiteralPartCS__Group_0__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0__1__Impl_in_rule__CollectionLiteralPartCS__Group_0__134681);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0__1__Impl_in_rule__CollectionLiteralPartCS__Group_0__136551);
             rule__CollectionLiteralPartCS__Group_0__1__Impl();
 
             state._fsp--;
@@ -50961,33 +53429,33 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__Group_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16793:1: rule__CollectionLiteralPartCS__Group_0__1__Impl : ( ( rule__CollectionLiteralPartCS__Group_0_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17811:1: rule__CollectionLiteralPartCS__Group_0__1__Impl : ( ( rule__CollectionLiteralPartCS__Group_0_1__0 )? ) ;
     public final void rule__CollectionLiteralPartCS__Group_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16797:1: ( ( ( rule__CollectionLiteralPartCS__Group_0_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16798:1: ( ( rule__CollectionLiteralPartCS__Group_0_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17815:1: ( ( ( rule__CollectionLiteralPartCS__Group_0_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17816:1: ( ( rule__CollectionLiteralPartCS__Group_0_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16798:1: ( ( rule__CollectionLiteralPartCS__Group_0_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16799:1: ( rule__CollectionLiteralPartCS__Group_0_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17816:1: ( ( rule__CollectionLiteralPartCS__Group_0_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17817:1: ( rule__CollectionLiteralPartCS__Group_0_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralPartCSAccess().getGroup_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16800:1: ( rule__CollectionLiteralPartCS__Group_0_1__0 )?
-            int alt187=2;
-            int LA187_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17818:1: ( rule__CollectionLiteralPartCS__Group_0_1__0 )?
+            int alt215=2;
+            int LA215_0 = input.LA(1);
 
-            if ( (LA187_0==103) ) {
-                alt187=1;
+            if ( (LA215_0==112) ) {
+                alt215=1;
             }
-            switch (alt187) {
+            switch (alt215) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16800:2: rule__CollectionLiteralPartCS__Group_0_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17818:2: rule__CollectionLiteralPartCS__Group_0_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__0_in_rule__CollectionLiteralPartCS__Group_0__1__Impl34708);
+                    pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__0_in_rule__CollectionLiteralPartCS__Group_0__1__Impl36578);
                     rule__CollectionLiteralPartCS__Group_0_1__0();
 
                     state._fsp--;
@@ -51023,21 +53491,21 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__Group_0_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16814:1: rule__CollectionLiteralPartCS__Group_0_1__0 : rule__CollectionLiteralPartCS__Group_0_1__0__Impl rule__CollectionLiteralPartCS__Group_0_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17832:1: rule__CollectionLiteralPartCS__Group_0_1__0 : rule__CollectionLiteralPartCS__Group_0_1__0__Impl rule__CollectionLiteralPartCS__Group_0_1__1 ;
     public final void rule__CollectionLiteralPartCS__Group_0_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16818:1: ( rule__CollectionLiteralPartCS__Group_0_1__0__Impl rule__CollectionLiteralPartCS__Group_0_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16819:2: rule__CollectionLiteralPartCS__Group_0_1__0__Impl rule__CollectionLiteralPartCS__Group_0_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17836:1: ( rule__CollectionLiteralPartCS__Group_0_1__0__Impl rule__CollectionLiteralPartCS__Group_0_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17837:2: rule__CollectionLiteralPartCS__Group_0_1__0__Impl rule__CollectionLiteralPartCS__Group_0_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__0__Impl_in_rule__CollectionLiteralPartCS__Group_0_1__034743);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__0__Impl_in_rule__CollectionLiteralPartCS__Group_0_1__036613);
             rule__CollectionLiteralPartCS__Group_0_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__1_in_rule__CollectionLiteralPartCS__Group_0_1__034746);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__1_in_rule__CollectionLiteralPartCS__Group_0_1__036616);
             rule__CollectionLiteralPartCS__Group_0_1__1();
 
             state._fsp--;
@@ -51061,22 +53529,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__Group_0_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16826:1: rule__CollectionLiteralPartCS__Group_0_1__0__Impl : ( '..' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17844:1: rule__CollectionLiteralPartCS__Group_0_1__0__Impl : ( '..' ) ;
     public final void rule__CollectionLiteralPartCS__Group_0_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16830:1: ( ( '..' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16831:1: ( '..' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17848:1: ( ( '..' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17849:1: ( '..' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16831:1: ( '..' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16832:1: '..'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17849:1: ( '..' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17850:1: '..'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_0_1_0()); 
             }
-            match(input,103,FollowSets001.FOLLOW_103_in_rule__CollectionLiteralPartCS__Group_0_1__0__Impl34774); if (state.failed) return ;
+            match(input,112,FollowSets001.FOLLOW_112_in_rule__CollectionLiteralPartCS__Group_0_1__0__Impl36644); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_0_1_0()); 
             }
@@ -51102,16 +53570,16 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__Group_0_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16845:1: rule__CollectionLiteralPartCS__Group_0_1__1 : rule__CollectionLiteralPartCS__Group_0_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17863:1: rule__CollectionLiteralPartCS__Group_0_1__1 : rule__CollectionLiteralPartCS__Group_0_1__1__Impl ;
     public final void rule__CollectionLiteralPartCS__Group_0_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16849:1: ( rule__CollectionLiteralPartCS__Group_0_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16850:2: rule__CollectionLiteralPartCS__Group_0_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17867:1: ( rule__CollectionLiteralPartCS__Group_0_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17868:2: rule__CollectionLiteralPartCS__Group_0_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__1__Impl_in_rule__CollectionLiteralPartCS__Group_0_1__134805);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__1__Impl_in_rule__CollectionLiteralPartCS__Group_0_1__136675);
             rule__CollectionLiteralPartCS__Group_0_1__1__Impl();
 
             state._fsp--;
@@ -51135,25 +53603,25 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__Group_0_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16856:1: rule__CollectionLiteralPartCS__Group_0_1__1__Impl : ( ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17874:1: rule__CollectionLiteralPartCS__Group_0_1__1__Impl : ( ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 ) ) ;
     public final void rule__CollectionLiteralPartCS__Group_0_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16860:1: ( ( ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16861:1: ( ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17878:1: ( ( ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17879:1: ( ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16861:1: ( ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16862:1: ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17879:1: ( ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17880:1: ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralPartCSAccess().getOwnedLastExpressionAssignment_0_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16863:1: ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16863:2: rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17881:1: ( rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17881:2: rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1_in_rule__CollectionLiteralPartCS__Group_0_1__1__Impl34832);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1_in_rule__CollectionLiteralPartCS__Group_0_1__1__Impl36702);
             rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1();
 
             state._fsp--;
@@ -51186,21 +53654,21 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16877:1: rule__CollectionPatternCS__Group__0 : rule__CollectionPatternCS__Group__0__Impl rule__CollectionPatternCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17895:1: rule__CollectionPatternCS__Group__0 : rule__CollectionPatternCS__Group__0__Impl rule__CollectionPatternCS__Group__1 ;
     public final void rule__CollectionPatternCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16881:1: ( rule__CollectionPatternCS__Group__0__Impl rule__CollectionPatternCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16882:2: rule__CollectionPatternCS__Group__0__Impl rule__CollectionPatternCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17899:1: ( rule__CollectionPatternCS__Group__0__Impl rule__CollectionPatternCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17900:2: rule__CollectionPatternCS__Group__0__Impl rule__CollectionPatternCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__0__Impl_in_rule__CollectionPatternCS__Group__034866);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__0__Impl_in_rule__CollectionPatternCS__Group__036736);
             rule__CollectionPatternCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__1_in_rule__CollectionPatternCS__Group__034869);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__1_in_rule__CollectionPatternCS__Group__036739);
             rule__CollectionPatternCS__Group__1();
 
             state._fsp--;
@@ -51224,25 +53692,25 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16889:1: rule__CollectionPatternCS__Group__0__Impl : ( ( rule__CollectionPatternCS__OwnedTypeAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17907:1: rule__CollectionPatternCS__Group__0__Impl : ( ( rule__CollectionPatternCS__OwnedTypeAssignment_0 ) ) ;
     public final void rule__CollectionPatternCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16893:1: ( ( ( rule__CollectionPatternCS__OwnedTypeAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16894:1: ( ( rule__CollectionPatternCS__OwnedTypeAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17911:1: ( ( ( rule__CollectionPatternCS__OwnedTypeAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17912:1: ( ( rule__CollectionPatternCS__OwnedTypeAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16894:1: ( ( rule__CollectionPatternCS__OwnedTypeAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16895:1: ( rule__CollectionPatternCS__OwnedTypeAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17912:1: ( ( rule__CollectionPatternCS__OwnedTypeAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17913:1: ( rule__CollectionPatternCS__OwnedTypeAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getOwnedTypeAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16896:1: ( rule__CollectionPatternCS__OwnedTypeAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16896:2: rule__CollectionPatternCS__OwnedTypeAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17914:1: ( rule__CollectionPatternCS__OwnedTypeAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17914:2: rule__CollectionPatternCS__OwnedTypeAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__OwnedTypeAssignment_0_in_rule__CollectionPatternCS__Group__0__Impl34896);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__OwnedTypeAssignment_0_in_rule__CollectionPatternCS__Group__0__Impl36766);
             rule__CollectionPatternCS__OwnedTypeAssignment_0();
 
             state._fsp--;
@@ -51275,21 +53743,21 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16906:1: rule__CollectionPatternCS__Group__1 : rule__CollectionPatternCS__Group__1__Impl rule__CollectionPatternCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17924:1: rule__CollectionPatternCS__Group__1 : rule__CollectionPatternCS__Group__1__Impl rule__CollectionPatternCS__Group__2 ;
     public final void rule__CollectionPatternCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16910:1: ( rule__CollectionPatternCS__Group__1__Impl rule__CollectionPatternCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16911:2: rule__CollectionPatternCS__Group__1__Impl rule__CollectionPatternCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17928:1: ( rule__CollectionPatternCS__Group__1__Impl rule__CollectionPatternCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17929:2: rule__CollectionPatternCS__Group__1__Impl rule__CollectionPatternCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__1__Impl_in_rule__CollectionPatternCS__Group__134926);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__1__Impl_in_rule__CollectionPatternCS__Group__136796);
             rule__CollectionPatternCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__2_in_rule__CollectionPatternCS__Group__134929);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__2_in_rule__CollectionPatternCS__Group__136799);
             rule__CollectionPatternCS__Group__2();
 
             state._fsp--;
@@ -51313,22 +53781,22 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16918:1: rule__CollectionPatternCS__Group__1__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17936:1: rule__CollectionPatternCS__Group__1__Impl : ( '{' ) ;
     public final void rule__CollectionPatternCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16922:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16923:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17940:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17941:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16923:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16924:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17941:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17942:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__CollectionPatternCS__Group__1__Impl34957); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__CollectionPatternCS__Group__1__Impl36827); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionPatternCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
@@ -51354,21 +53822,21 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16937:1: rule__CollectionPatternCS__Group__2 : rule__CollectionPatternCS__Group__2__Impl rule__CollectionPatternCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17955:1: rule__CollectionPatternCS__Group__2 : rule__CollectionPatternCS__Group__2__Impl rule__CollectionPatternCS__Group__3 ;
     public final void rule__CollectionPatternCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16941:1: ( rule__CollectionPatternCS__Group__2__Impl rule__CollectionPatternCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16942:2: rule__CollectionPatternCS__Group__2__Impl rule__CollectionPatternCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17959:1: ( rule__CollectionPatternCS__Group__2__Impl rule__CollectionPatternCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17960:2: rule__CollectionPatternCS__Group__2__Impl rule__CollectionPatternCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__2__Impl_in_rule__CollectionPatternCS__Group__234988);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__2__Impl_in_rule__CollectionPatternCS__Group__236858);
             rule__CollectionPatternCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__3_in_rule__CollectionPatternCS__Group__234991);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__3_in_rule__CollectionPatternCS__Group__236861);
             rule__CollectionPatternCS__Group__3();
 
             state._fsp--;
@@ -51392,33 +53860,33 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16949:1: rule__CollectionPatternCS__Group__2__Impl : ( ( rule__CollectionPatternCS__Group_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17967:1: rule__CollectionPatternCS__Group__2__Impl : ( ( rule__CollectionPatternCS__Group_2__0 )? ) ;
     public final void rule__CollectionPatternCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16953:1: ( ( ( rule__CollectionPatternCS__Group_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16954:1: ( ( rule__CollectionPatternCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17971:1: ( ( ( rule__CollectionPatternCS__Group_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17972:1: ( ( rule__CollectionPatternCS__Group_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16954:1: ( ( rule__CollectionPatternCS__Group_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16955:1: ( rule__CollectionPatternCS__Group_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17972:1: ( ( rule__CollectionPatternCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17973:1: ( rule__CollectionPatternCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16956:1: ( rule__CollectionPatternCS__Group_2__0 )?
-            int alt188=2;
-            int LA188_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17974:1: ( rule__CollectionPatternCS__Group_2__0 )?
+            int alt216=2;
+            int LA216_0 = input.LA(1);
 
-            if ( ((LA188_0>=RULE_SIMPLE_ID && LA188_0<=RULE_ESCAPED_ID)||(LA188_0>=17 && LA188_0<=52)||(LA188_0>=55 && LA188_0<=60)||LA188_0==97) ) {
-                alt188=1;
+            if ( ((LA216_0>=RULE_SIMPLE_ID && LA216_0<=RULE_ESCAPED_ID)||(LA216_0>=17 && LA216_0<=52)||(LA216_0>=64 && LA216_0<=69)||LA216_0==106) ) {
+                alt216=1;
             }
-            switch (alt188) {
+            switch (alt216) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16956:2: rule__CollectionPatternCS__Group_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17974:2: rule__CollectionPatternCS__Group_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__0_in_rule__CollectionPatternCS__Group__2__Impl35018);
+                    pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__0_in_rule__CollectionPatternCS__Group__2__Impl36888);
                     rule__CollectionPatternCS__Group_2__0();
 
                     state._fsp--;
@@ -51454,16 +53922,16 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16966:1: rule__CollectionPatternCS__Group__3 : rule__CollectionPatternCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17984:1: rule__CollectionPatternCS__Group__3 : rule__CollectionPatternCS__Group__3__Impl ;
     public final void rule__CollectionPatternCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16970:1: ( rule__CollectionPatternCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16971:2: rule__CollectionPatternCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17988:1: ( rule__CollectionPatternCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17989:2: rule__CollectionPatternCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__3__Impl_in_rule__CollectionPatternCS__Group__335049);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group__3__Impl_in_rule__CollectionPatternCS__Group__336919);
             rule__CollectionPatternCS__Group__3__Impl();
 
             state._fsp--;
@@ -51487,22 +53955,22 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16977:1: rule__CollectionPatternCS__Group__3__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17995:1: rule__CollectionPatternCS__Group__3__Impl : ( '}' ) ;
     public final void rule__CollectionPatternCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16981:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16982:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17999:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18000:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16982:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:16983:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18000:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18001:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getRightCurlyBracketKeyword_3()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__CollectionPatternCS__Group__3__Impl35077); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__CollectionPatternCS__Group__3__Impl36947); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionPatternCSAccess().getRightCurlyBracketKeyword_3()); 
             }
@@ -51528,21 +53996,21 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17004:1: rule__CollectionPatternCS__Group_2__0 : rule__CollectionPatternCS__Group_2__0__Impl rule__CollectionPatternCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18022:1: rule__CollectionPatternCS__Group_2__0 : rule__CollectionPatternCS__Group_2__0__Impl rule__CollectionPatternCS__Group_2__1 ;
     public final void rule__CollectionPatternCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17008:1: ( rule__CollectionPatternCS__Group_2__0__Impl rule__CollectionPatternCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17009:2: rule__CollectionPatternCS__Group_2__0__Impl rule__CollectionPatternCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18026:1: ( rule__CollectionPatternCS__Group_2__0__Impl rule__CollectionPatternCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18027:2: rule__CollectionPatternCS__Group_2__0__Impl rule__CollectionPatternCS__Group_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__0__Impl_in_rule__CollectionPatternCS__Group_2__035116);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__0__Impl_in_rule__CollectionPatternCS__Group_2__036986);
             rule__CollectionPatternCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__1_in_rule__CollectionPatternCS__Group_2__035119);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__1_in_rule__CollectionPatternCS__Group_2__036989);
             rule__CollectionPatternCS__Group_2__1();
 
             state._fsp--;
@@ -51566,25 +54034,25 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17016:1: rule__CollectionPatternCS__Group_2__0__Impl : ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18034:1: rule__CollectionPatternCS__Group_2__0__Impl : ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 ) ) ;
     public final void rule__CollectionPatternCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17020:1: ( ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17021:1: ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18038:1: ( ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18039:1: ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17021:1: ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17022:1: ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18039:1: ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18040:1: ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getOwnedPartsAssignment_2_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17023:1: ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17023:2: rule__CollectionPatternCS__OwnedPartsAssignment_2_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18041:1: ( rule__CollectionPatternCS__OwnedPartsAssignment_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18041:2: rule__CollectionPatternCS__OwnedPartsAssignment_2_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__OwnedPartsAssignment_2_0_in_rule__CollectionPatternCS__Group_2__0__Impl35146);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__OwnedPartsAssignment_2_0_in_rule__CollectionPatternCS__Group_2__0__Impl37016);
             rule__CollectionPatternCS__OwnedPartsAssignment_2_0();
 
             state._fsp--;
@@ -51617,21 +54085,21 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17033:1: rule__CollectionPatternCS__Group_2__1 : rule__CollectionPatternCS__Group_2__1__Impl rule__CollectionPatternCS__Group_2__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18051:1: rule__CollectionPatternCS__Group_2__1 : rule__CollectionPatternCS__Group_2__1__Impl rule__CollectionPatternCS__Group_2__2 ;
     public final void rule__CollectionPatternCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17037:1: ( rule__CollectionPatternCS__Group_2__1__Impl rule__CollectionPatternCS__Group_2__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17038:2: rule__CollectionPatternCS__Group_2__1__Impl rule__CollectionPatternCS__Group_2__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18055:1: ( rule__CollectionPatternCS__Group_2__1__Impl rule__CollectionPatternCS__Group_2__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18056:2: rule__CollectionPatternCS__Group_2__1__Impl rule__CollectionPatternCS__Group_2__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__1__Impl_in_rule__CollectionPatternCS__Group_2__135176);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__1__Impl_in_rule__CollectionPatternCS__Group_2__137046);
             rule__CollectionPatternCS__Group_2__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__2_in_rule__CollectionPatternCS__Group_2__135179);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__2_in_rule__CollectionPatternCS__Group_2__137049);
             rule__CollectionPatternCS__Group_2__2();
 
             state._fsp--;
@@ -51655,37 +54123,37 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17045:1: rule__CollectionPatternCS__Group_2__1__Impl : ( ( rule__CollectionPatternCS__Group_2_1__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18063:1: rule__CollectionPatternCS__Group_2__1__Impl : ( ( rule__CollectionPatternCS__Group_2_1__0 )* ) ;
     public final void rule__CollectionPatternCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17049:1: ( ( ( rule__CollectionPatternCS__Group_2_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17050:1: ( ( rule__CollectionPatternCS__Group_2_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18067:1: ( ( ( rule__CollectionPatternCS__Group_2_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18068:1: ( ( rule__CollectionPatternCS__Group_2_1__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17050:1: ( ( rule__CollectionPatternCS__Group_2_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17051:1: ( rule__CollectionPatternCS__Group_2_1__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18068:1: ( ( rule__CollectionPatternCS__Group_2_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18069:1: ( rule__CollectionPatternCS__Group_2_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getGroup_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17052:1: ( rule__CollectionPatternCS__Group_2_1__0 )*
-            loop189:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18070:1: ( rule__CollectionPatternCS__Group_2_1__0 )*
+            loop217:
             do {
-                int alt189=2;
-                int LA189_0 = input.LA(1);
+                int alt217=2;
+                int LA217_0 = input.LA(1);
 
-                if ( (LA189_0==98) ) {
-                    alt189=1;
+                if ( (LA217_0==107) ) {
+                    alt217=1;
                 }
 
 
-                switch (alt189) {
+                switch (alt217) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17052:2: rule__CollectionPatternCS__Group_2_1__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18070:2: rule__CollectionPatternCS__Group_2_1__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_1__0_in_rule__CollectionPatternCS__Group_2__1__Impl35206);
+            	    pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_1__0_in_rule__CollectionPatternCS__Group_2__1__Impl37076);
             	    rule__CollectionPatternCS__Group_2_1__0();
 
             	    state._fsp--;
@@ -51695,7 +54163,7 @@
             	    break;
 
             	default :
-            	    break loop189;
+            	    break loop217;
                 }
             } while (true);
 
@@ -51724,16 +54192,16 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17062:1: rule__CollectionPatternCS__Group_2__2 : rule__CollectionPatternCS__Group_2__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18080:1: rule__CollectionPatternCS__Group_2__2 : rule__CollectionPatternCS__Group_2__2__Impl ;
     public final void rule__CollectionPatternCS__Group_2__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17066:1: ( rule__CollectionPatternCS__Group_2__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17067:2: rule__CollectionPatternCS__Group_2__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18084:1: ( rule__CollectionPatternCS__Group_2__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18085:2: rule__CollectionPatternCS__Group_2__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__2__Impl_in_rule__CollectionPatternCS__Group_2__235237);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2__2__Impl_in_rule__CollectionPatternCS__Group_2__237107);
             rule__CollectionPatternCS__Group_2__2__Impl();
 
             state._fsp--;
@@ -51757,25 +54225,25 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17073:1: rule__CollectionPatternCS__Group_2__2__Impl : ( ( rule__CollectionPatternCS__Group_2_2__0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18091:1: rule__CollectionPatternCS__Group_2__2__Impl : ( ( rule__CollectionPatternCS__Group_2_2__0 ) ) ;
     public final void rule__CollectionPatternCS__Group_2__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17077:1: ( ( ( rule__CollectionPatternCS__Group_2_2__0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17078:1: ( ( rule__CollectionPatternCS__Group_2_2__0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18095:1: ( ( ( rule__CollectionPatternCS__Group_2_2__0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18096:1: ( ( rule__CollectionPatternCS__Group_2_2__0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17078:1: ( ( rule__CollectionPatternCS__Group_2_2__0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17079:1: ( rule__CollectionPatternCS__Group_2_2__0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18096:1: ( ( rule__CollectionPatternCS__Group_2_2__0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18097:1: ( rule__CollectionPatternCS__Group_2_2__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getGroup_2_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17080:1: ( rule__CollectionPatternCS__Group_2_2__0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17080:2: rule__CollectionPatternCS__Group_2_2__0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18098:1: ( rule__CollectionPatternCS__Group_2_2__0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18098:2: rule__CollectionPatternCS__Group_2_2__0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_2__0_in_rule__CollectionPatternCS__Group_2__2__Impl35264);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_2__0_in_rule__CollectionPatternCS__Group_2__2__Impl37134);
             rule__CollectionPatternCS__Group_2_2__0();
 
             state._fsp--;
@@ -51808,21 +54276,21 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17096:1: rule__CollectionPatternCS__Group_2_1__0 : rule__CollectionPatternCS__Group_2_1__0__Impl rule__CollectionPatternCS__Group_2_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18114:1: rule__CollectionPatternCS__Group_2_1__0 : rule__CollectionPatternCS__Group_2_1__0__Impl rule__CollectionPatternCS__Group_2_1__1 ;
     public final void rule__CollectionPatternCS__Group_2_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17100:1: ( rule__CollectionPatternCS__Group_2_1__0__Impl rule__CollectionPatternCS__Group_2_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17101:2: rule__CollectionPatternCS__Group_2_1__0__Impl rule__CollectionPatternCS__Group_2_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18118:1: ( rule__CollectionPatternCS__Group_2_1__0__Impl rule__CollectionPatternCS__Group_2_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18119:2: rule__CollectionPatternCS__Group_2_1__0__Impl rule__CollectionPatternCS__Group_2_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_1__0__Impl_in_rule__CollectionPatternCS__Group_2_1__035300);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_1__0__Impl_in_rule__CollectionPatternCS__Group_2_1__037170);
             rule__CollectionPatternCS__Group_2_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_1__1_in_rule__CollectionPatternCS__Group_2_1__035303);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_1__1_in_rule__CollectionPatternCS__Group_2_1__037173);
             rule__CollectionPatternCS__Group_2_1__1();
 
             state._fsp--;
@@ -51846,22 +54314,22 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17108:1: rule__CollectionPatternCS__Group_2_1__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18126:1: rule__CollectionPatternCS__Group_2_1__0__Impl : ( ',' ) ;
     public final void rule__CollectionPatternCS__Group_2_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17112:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17113:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18130:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18131:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17113:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17114:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18131:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18132:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getCommaKeyword_2_1_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__CollectionPatternCS__Group_2_1__0__Impl35331); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__CollectionPatternCS__Group_2_1__0__Impl37201); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionPatternCSAccess().getCommaKeyword_2_1_0()); 
             }
@@ -51887,16 +54355,16 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17127:1: rule__CollectionPatternCS__Group_2_1__1 : rule__CollectionPatternCS__Group_2_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18145:1: rule__CollectionPatternCS__Group_2_1__1 : rule__CollectionPatternCS__Group_2_1__1__Impl ;
     public final void rule__CollectionPatternCS__Group_2_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17131:1: ( rule__CollectionPatternCS__Group_2_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17132:2: rule__CollectionPatternCS__Group_2_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18149:1: ( rule__CollectionPatternCS__Group_2_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18150:2: rule__CollectionPatternCS__Group_2_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_1__1__Impl_in_rule__CollectionPatternCS__Group_2_1__135362);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_1__1__Impl_in_rule__CollectionPatternCS__Group_2_1__137232);
             rule__CollectionPatternCS__Group_2_1__1__Impl();
 
             state._fsp--;
@@ -51920,25 +54388,25 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17138:1: rule__CollectionPatternCS__Group_2_1__1__Impl : ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18156:1: rule__CollectionPatternCS__Group_2_1__1__Impl : ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 ) ) ;
     public final void rule__CollectionPatternCS__Group_2_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17142:1: ( ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17143:1: ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18160:1: ( ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18161:1: ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17143:1: ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17144:1: ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18161:1: ( ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18162:1: ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getOwnedPartsAssignment_2_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17145:1: ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17145:2: rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18163:1: ( rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18163:2: rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1_in_rule__CollectionPatternCS__Group_2_1__1__Impl35389);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1_in_rule__CollectionPatternCS__Group_2_1__1__Impl37259);
             rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1();
 
             state._fsp--;
@@ -51971,21 +54439,21 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17159:1: rule__CollectionPatternCS__Group_2_2__0 : rule__CollectionPatternCS__Group_2_2__0__Impl rule__CollectionPatternCS__Group_2_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18177:1: rule__CollectionPatternCS__Group_2_2__0 : rule__CollectionPatternCS__Group_2_2__0__Impl rule__CollectionPatternCS__Group_2_2__1 ;
     public final void rule__CollectionPatternCS__Group_2_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17163:1: ( rule__CollectionPatternCS__Group_2_2__0__Impl rule__CollectionPatternCS__Group_2_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17164:2: rule__CollectionPatternCS__Group_2_2__0__Impl rule__CollectionPatternCS__Group_2_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18181:1: ( rule__CollectionPatternCS__Group_2_2__0__Impl rule__CollectionPatternCS__Group_2_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18182:2: rule__CollectionPatternCS__Group_2_2__0__Impl rule__CollectionPatternCS__Group_2_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_2__0__Impl_in_rule__CollectionPatternCS__Group_2_2__035423);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_2__0__Impl_in_rule__CollectionPatternCS__Group_2_2__037293);
             rule__CollectionPatternCS__Group_2_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_2__1_in_rule__CollectionPatternCS__Group_2_2__035426);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_2__1_in_rule__CollectionPatternCS__Group_2_2__037296);
             rule__CollectionPatternCS__Group_2_2__1();
 
             state._fsp--;
@@ -52009,22 +54477,22 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17171:1: rule__CollectionPatternCS__Group_2_2__0__Impl : ( '++' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18189:1: rule__CollectionPatternCS__Group_2_2__0__Impl : ( '++' ) ;
     public final void rule__CollectionPatternCS__Group_2_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17175:1: ( ( '++' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17176:1: ( '++' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18193:1: ( ( '++' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18194:1: ( '++' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17176:1: ( '++' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17177:1: '++'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18194:1: ( '++' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18195:1: '++'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getPlusSignPlusSignKeyword_2_2_0()); 
             }
-            match(input,104,FollowSets001.FOLLOW_104_in_rule__CollectionPatternCS__Group_2_2__0__Impl35454); if (state.failed) return ;
+            match(input,113,FollowSets001.FOLLOW_113_in_rule__CollectionPatternCS__Group_2_2__0__Impl37324); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCollectionPatternCSAccess().getPlusSignPlusSignKeyword_2_2_0()); 
             }
@@ -52050,16 +54518,16 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17190:1: rule__CollectionPatternCS__Group_2_2__1 : rule__CollectionPatternCS__Group_2_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18208:1: rule__CollectionPatternCS__Group_2_2__1 : rule__CollectionPatternCS__Group_2_2__1__Impl ;
     public final void rule__CollectionPatternCS__Group_2_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17194:1: ( rule__CollectionPatternCS__Group_2_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17195:2: rule__CollectionPatternCS__Group_2_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18212:1: ( rule__CollectionPatternCS__Group_2_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18213:2: rule__CollectionPatternCS__Group_2_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_2__1__Impl_in_rule__CollectionPatternCS__Group_2_2__135485);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__Group_2_2__1__Impl_in_rule__CollectionPatternCS__Group_2_2__137355);
             rule__CollectionPatternCS__Group_2_2__1__Impl();
 
             state._fsp--;
@@ -52083,25 +54551,25 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__Group_2_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17201:1: rule__CollectionPatternCS__Group_2_2__1__Impl : ( ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18219:1: rule__CollectionPatternCS__Group_2_2__1__Impl : ( ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 ) ) ;
     public final void rule__CollectionPatternCS__Group_2_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17205:1: ( ( ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17206:1: ( ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18223:1: ( ( ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18224:1: ( ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17206:1: ( ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17207:1: ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18224:1: ( ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18225:1: ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getRestVariableNameAssignment_2_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17208:1: ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17208:2: rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18226:1: ( rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18226:2: rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1_in_rule__CollectionPatternCS__Group_2_2__1__Impl35512);
+            pushFollow(FollowSets001.FOLLOW_rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1_in_rule__CollectionPatternCS__Group_2_2__1__Impl37382);
             rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1();
 
             state._fsp--;
@@ -52134,21 +54602,21 @@
 
 
     // $ANTLR start "rule__ConstructorPartCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17222:1: rule__ConstructorPartCS__Group__0 : rule__ConstructorPartCS__Group__0__Impl rule__ConstructorPartCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18240:1: rule__ConstructorPartCS__Group__0 : rule__ConstructorPartCS__Group__0__Impl rule__ConstructorPartCS__Group__1 ;
     public final void rule__ConstructorPartCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17226:1: ( rule__ConstructorPartCS__Group__0__Impl rule__ConstructorPartCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17227:2: rule__ConstructorPartCS__Group__0__Impl rule__ConstructorPartCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18244:1: ( rule__ConstructorPartCS__Group__0__Impl rule__ConstructorPartCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18245:2: rule__ConstructorPartCS__Group__0__Impl rule__ConstructorPartCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__0__Impl_in_rule__ConstructorPartCS__Group__035546);
+            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__0__Impl_in_rule__ConstructorPartCS__Group__037416);
             rule__ConstructorPartCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__1_in_rule__ConstructorPartCS__Group__035549);
+            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__1_in_rule__ConstructorPartCS__Group__037419);
             rule__ConstructorPartCS__Group__1();
 
             state._fsp--;
@@ -52172,25 +54640,25 @@
 
 
     // $ANTLR start "rule__ConstructorPartCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17234:1: rule__ConstructorPartCS__Group__0__Impl : ( ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18252:1: rule__ConstructorPartCS__Group__0__Impl : ( ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 ) ) ;
     public final void rule__ConstructorPartCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17238:1: ( ( ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17239:1: ( ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18256:1: ( ( ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18257:1: ( ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17239:1: ( ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17240:1: ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18257:1: ( ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18258:1: ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstructorPartCSAccess().getReferredPropertyAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17241:1: ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17241:2: rule__ConstructorPartCS__ReferredPropertyAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18259:1: ( rule__ConstructorPartCS__ReferredPropertyAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18259:2: rule__ConstructorPartCS__ReferredPropertyAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__ReferredPropertyAssignment_0_in_rule__ConstructorPartCS__Group__0__Impl35576);
+            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__ReferredPropertyAssignment_0_in_rule__ConstructorPartCS__Group__0__Impl37446);
             rule__ConstructorPartCS__ReferredPropertyAssignment_0();
 
             state._fsp--;
@@ -52223,21 +54691,21 @@
 
 
     // $ANTLR start "rule__ConstructorPartCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17251:1: rule__ConstructorPartCS__Group__1 : rule__ConstructorPartCS__Group__1__Impl rule__ConstructorPartCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18269:1: rule__ConstructorPartCS__Group__1 : rule__ConstructorPartCS__Group__1__Impl rule__ConstructorPartCS__Group__2 ;
     public final void rule__ConstructorPartCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17255:1: ( rule__ConstructorPartCS__Group__1__Impl rule__ConstructorPartCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17256:2: rule__ConstructorPartCS__Group__1__Impl rule__ConstructorPartCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18273:1: ( rule__ConstructorPartCS__Group__1__Impl rule__ConstructorPartCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18274:2: rule__ConstructorPartCS__Group__1__Impl rule__ConstructorPartCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__1__Impl_in_rule__ConstructorPartCS__Group__135606);
+            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__1__Impl_in_rule__ConstructorPartCS__Group__137476);
             rule__ConstructorPartCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__2_in_rule__ConstructorPartCS__Group__135609);
+            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__2_in_rule__ConstructorPartCS__Group__137479);
             rule__ConstructorPartCS__Group__2();
 
             state._fsp--;
@@ -52261,22 +54729,22 @@
 
 
     // $ANTLR start "rule__ConstructorPartCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17263:1: rule__ConstructorPartCS__Group__1__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18281:1: rule__ConstructorPartCS__Group__1__Impl : ( '=' ) ;
     public final void rule__ConstructorPartCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17267:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17268:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18285:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18286:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17268:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17269:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18286:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18287:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstructorPartCSAccess().getEqualsSignKeyword_1()); 
             }
-            match(input,70,FollowSets001.FOLLOW_70_in_rule__ConstructorPartCS__Group__1__Impl35637); if (state.failed) return ;
+            match(input,79,FollowSets001.FOLLOW_79_in_rule__ConstructorPartCS__Group__1__Impl37507); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getConstructorPartCSAccess().getEqualsSignKeyword_1()); 
             }
@@ -52302,16 +54770,16 @@
 
 
     // $ANTLR start "rule__ConstructorPartCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17282:1: rule__ConstructorPartCS__Group__2 : rule__ConstructorPartCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18300:1: rule__ConstructorPartCS__Group__2 : rule__ConstructorPartCS__Group__2__Impl ;
     public final void rule__ConstructorPartCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17286:1: ( rule__ConstructorPartCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17287:2: rule__ConstructorPartCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18304:1: ( rule__ConstructorPartCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18305:2: rule__ConstructorPartCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__2__Impl_in_rule__ConstructorPartCS__Group__235668);
+            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__Group__2__Impl_in_rule__ConstructorPartCS__Group__237538);
             rule__ConstructorPartCS__Group__2__Impl();
 
             state._fsp--;
@@ -52335,25 +54803,25 @@
 
 
     // $ANTLR start "rule__ConstructorPartCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17293:1: rule__ConstructorPartCS__Group__2__Impl : ( ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18311:1: rule__ConstructorPartCS__Group__2__Impl : ( ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 ) ) ;
     public final void rule__ConstructorPartCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17297:1: ( ( ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17298:1: ( ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18315:1: ( ( ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18316:1: ( ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17298:1: ( ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17299:1: ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18316:1: ( ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18317:1: ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstructorPartCSAccess().getOwnedInitExpressionAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17300:1: ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17300:2: rule__ConstructorPartCS__OwnedInitExpressionAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18318:1: ( rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18318:2: rule__ConstructorPartCS__OwnedInitExpressionAssignment_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__OwnedInitExpressionAssignment_2_in_rule__ConstructorPartCS__Group__2__Impl35695);
+            pushFollow(FollowSets001.FOLLOW_rule__ConstructorPartCS__OwnedInitExpressionAssignment_2_in_rule__ConstructorPartCS__Group__2__Impl37565);
             rule__ConstructorPartCS__OwnedInitExpressionAssignment_2();
 
             state._fsp--;
@@ -52386,21 +54854,21 @@
 
 
     // $ANTLR start "rule__PatternExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17316:1: rule__PatternExpCS__Group__0 : rule__PatternExpCS__Group__0__Impl rule__PatternExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18334:1: rule__PatternExpCS__Group__0 : rule__PatternExpCS__Group__0__Impl rule__PatternExpCS__Group__1 ;
     public final void rule__PatternExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17320:1: ( rule__PatternExpCS__Group__0__Impl rule__PatternExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17321:2: rule__PatternExpCS__Group__0__Impl rule__PatternExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18338:1: ( rule__PatternExpCS__Group__0__Impl rule__PatternExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18339:2: rule__PatternExpCS__Group__0__Impl rule__PatternExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__0__Impl_in_rule__PatternExpCS__Group__035731);
+            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__0__Impl_in_rule__PatternExpCS__Group__037601);
             rule__PatternExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__1_in_rule__PatternExpCS__Group__035734);
+            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__1_in_rule__PatternExpCS__Group__037604);
             rule__PatternExpCS__Group__1();
 
             state._fsp--;
@@ -52424,33 +54892,33 @@
 
 
     // $ANTLR start "rule__PatternExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17328:1: rule__PatternExpCS__Group__0__Impl : ( ( rule__PatternExpCS__PatternVariableNameAssignment_0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18346:1: rule__PatternExpCS__Group__0__Impl : ( ( rule__PatternExpCS__PatternVariableNameAssignment_0 )? ) ;
     public final void rule__PatternExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17332:1: ( ( ( rule__PatternExpCS__PatternVariableNameAssignment_0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17333:1: ( ( rule__PatternExpCS__PatternVariableNameAssignment_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18350:1: ( ( ( rule__PatternExpCS__PatternVariableNameAssignment_0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18351:1: ( ( rule__PatternExpCS__PatternVariableNameAssignment_0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17333:1: ( ( rule__PatternExpCS__PatternVariableNameAssignment_0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17334:1: ( rule__PatternExpCS__PatternVariableNameAssignment_0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18351:1: ( ( rule__PatternExpCS__PatternVariableNameAssignment_0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18352:1: ( rule__PatternExpCS__PatternVariableNameAssignment_0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPatternExpCSAccess().getPatternVariableNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17335:1: ( rule__PatternExpCS__PatternVariableNameAssignment_0 )?
-            int alt190=2;
-            int LA190_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18353:1: ( rule__PatternExpCS__PatternVariableNameAssignment_0 )?
+            int alt218=2;
+            int LA218_0 = input.LA(1);
 
-            if ( ((LA190_0>=RULE_SIMPLE_ID && LA190_0<=RULE_ESCAPED_ID)||(LA190_0>=17 && LA190_0<=52)||(LA190_0>=55 && LA190_0<=60)) ) {
-                alt190=1;
+            if ( ((LA218_0>=RULE_SIMPLE_ID && LA218_0<=RULE_ESCAPED_ID)||(LA218_0>=17 && LA218_0<=52)||(LA218_0>=64 && LA218_0<=69)) ) {
+                alt218=1;
             }
-            switch (alt190) {
+            switch (alt218) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17335:2: rule__PatternExpCS__PatternVariableNameAssignment_0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18353:2: rule__PatternExpCS__PatternVariableNameAssignment_0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__PatternVariableNameAssignment_0_in_rule__PatternExpCS__Group__0__Impl35761);
+                    pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__PatternVariableNameAssignment_0_in_rule__PatternExpCS__Group__0__Impl37631);
                     rule__PatternExpCS__PatternVariableNameAssignment_0();
 
                     state._fsp--;
@@ -52486,21 +54954,21 @@
 
 
     // $ANTLR start "rule__PatternExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17345:1: rule__PatternExpCS__Group__1 : rule__PatternExpCS__Group__1__Impl rule__PatternExpCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18363:1: rule__PatternExpCS__Group__1 : rule__PatternExpCS__Group__1__Impl rule__PatternExpCS__Group__2 ;
     public final void rule__PatternExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17349:1: ( rule__PatternExpCS__Group__1__Impl rule__PatternExpCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17350:2: rule__PatternExpCS__Group__1__Impl rule__PatternExpCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18367:1: ( rule__PatternExpCS__Group__1__Impl rule__PatternExpCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18368:2: rule__PatternExpCS__Group__1__Impl rule__PatternExpCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__1__Impl_in_rule__PatternExpCS__Group__135792);
+            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__1__Impl_in_rule__PatternExpCS__Group__137662);
             rule__PatternExpCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__2_in_rule__PatternExpCS__Group__135795);
+            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__2_in_rule__PatternExpCS__Group__137665);
             rule__PatternExpCS__Group__2();
 
             state._fsp--;
@@ -52524,22 +54992,22 @@
 
 
     // $ANTLR start "rule__PatternExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17357:1: rule__PatternExpCS__Group__1__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18375:1: rule__PatternExpCS__Group__1__Impl : ( ':' ) ;
     public final void rule__PatternExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17361:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17362:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18379:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18380:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17362:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17363:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18380:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18381:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPatternExpCSAccess().getColonKeyword_1()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__PatternExpCS__Group__1__Impl35823); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__PatternExpCS__Group__1__Impl37693); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPatternExpCSAccess().getColonKeyword_1()); 
             }
@@ -52565,16 +55033,16 @@
 
 
     // $ANTLR start "rule__PatternExpCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17376:1: rule__PatternExpCS__Group__2 : rule__PatternExpCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18394:1: rule__PatternExpCS__Group__2 : rule__PatternExpCS__Group__2__Impl ;
     public final void rule__PatternExpCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17380:1: ( rule__PatternExpCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17381:2: rule__PatternExpCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18398:1: ( rule__PatternExpCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18399:2: rule__PatternExpCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__2__Impl_in_rule__PatternExpCS__Group__235854);
+            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__Group__2__Impl_in_rule__PatternExpCS__Group__237724);
             rule__PatternExpCS__Group__2__Impl();
 
             state._fsp--;
@@ -52598,25 +55066,25 @@
 
 
     // $ANTLR start "rule__PatternExpCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17387:1: rule__PatternExpCS__Group__2__Impl : ( ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18405:1: rule__PatternExpCS__Group__2__Impl : ( ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 ) ) ;
     public final void rule__PatternExpCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17391:1: ( ( ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17392:1: ( ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18409:1: ( ( ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18410:1: ( ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17392:1: ( ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17393:1: ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18410:1: ( ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18411:1: ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPatternExpCSAccess().getOwnedPatternTypeAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17394:1: ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17394:2: rule__PatternExpCS__OwnedPatternTypeAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18412:1: ( rule__PatternExpCS__OwnedPatternTypeAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18412:2: rule__PatternExpCS__OwnedPatternTypeAssignment_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__OwnedPatternTypeAssignment_2_in_rule__PatternExpCS__Group__2__Impl35881);
+            pushFollow(FollowSets001.FOLLOW_rule__PatternExpCS__OwnedPatternTypeAssignment_2_in_rule__PatternExpCS__Group__2__Impl37751);
             rule__PatternExpCS__OwnedPatternTypeAssignment_2();
 
             state._fsp--;
@@ -52649,21 +55117,21 @@
 
 
     // $ANTLR start "rule__LambdaLiteralExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17410:1: rule__LambdaLiteralExpCS__Group__0 : rule__LambdaLiteralExpCS__Group__0__Impl rule__LambdaLiteralExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18428:1: rule__LambdaLiteralExpCS__Group__0 : rule__LambdaLiteralExpCS__Group__0__Impl rule__LambdaLiteralExpCS__Group__1 ;
     public final void rule__LambdaLiteralExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17414:1: ( rule__LambdaLiteralExpCS__Group__0__Impl rule__LambdaLiteralExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17415:2: rule__LambdaLiteralExpCS__Group__0__Impl rule__LambdaLiteralExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18432:1: ( rule__LambdaLiteralExpCS__Group__0__Impl rule__LambdaLiteralExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18433:2: rule__LambdaLiteralExpCS__Group__0__Impl rule__LambdaLiteralExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__0__Impl_in_rule__LambdaLiteralExpCS__Group__035917);
+            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__0__Impl_in_rule__LambdaLiteralExpCS__Group__037787);
             rule__LambdaLiteralExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__1_in_rule__LambdaLiteralExpCS__Group__035920);
+            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__1_in_rule__LambdaLiteralExpCS__Group__037790);
             rule__LambdaLiteralExpCS__Group__1();
 
             state._fsp--;
@@ -52687,22 +55155,22 @@
 
 
     // $ANTLR start "rule__LambdaLiteralExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17422:1: rule__LambdaLiteralExpCS__Group__0__Impl : ( 'Lambda' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18440:1: rule__LambdaLiteralExpCS__Group__0__Impl : ( 'Lambda' ) ;
     public final void rule__LambdaLiteralExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17426:1: ( ( 'Lambda' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17427:1: ( 'Lambda' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18444:1: ( ( 'Lambda' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18445:1: ( 'Lambda' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17427:1: ( 'Lambda' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17428:1: 'Lambda'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18445:1: ( 'Lambda' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18446:1: 'Lambda'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLambdaLiteralExpCSAccess().getLambdaKeyword_0()); 
             }
-            match(input,105,FollowSets001.FOLLOW_105_in_rule__LambdaLiteralExpCS__Group__0__Impl35948); if (state.failed) return ;
+            match(input,114,FollowSets001.FOLLOW_114_in_rule__LambdaLiteralExpCS__Group__0__Impl37818); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLambdaLiteralExpCSAccess().getLambdaKeyword_0()); 
             }
@@ -52728,21 +55196,21 @@
 
 
     // $ANTLR start "rule__LambdaLiteralExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17441:1: rule__LambdaLiteralExpCS__Group__1 : rule__LambdaLiteralExpCS__Group__1__Impl rule__LambdaLiteralExpCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18459:1: rule__LambdaLiteralExpCS__Group__1 : rule__LambdaLiteralExpCS__Group__1__Impl rule__LambdaLiteralExpCS__Group__2 ;
     public final void rule__LambdaLiteralExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17445:1: ( rule__LambdaLiteralExpCS__Group__1__Impl rule__LambdaLiteralExpCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17446:2: rule__LambdaLiteralExpCS__Group__1__Impl rule__LambdaLiteralExpCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18463:1: ( rule__LambdaLiteralExpCS__Group__1__Impl rule__LambdaLiteralExpCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18464:2: rule__LambdaLiteralExpCS__Group__1__Impl rule__LambdaLiteralExpCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__1__Impl_in_rule__LambdaLiteralExpCS__Group__135979);
+            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__1__Impl_in_rule__LambdaLiteralExpCS__Group__137849);
             rule__LambdaLiteralExpCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__2_in_rule__LambdaLiteralExpCS__Group__135982);
+            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__2_in_rule__LambdaLiteralExpCS__Group__137852);
             rule__LambdaLiteralExpCS__Group__2();
 
             state._fsp--;
@@ -52766,22 +55234,22 @@
 
 
     // $ANTLR start "rule__LambdaLiteralExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17453:1: rule__LambdaLiteralExpCS__Group__1__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18471:1: rule__LambdaLiteralExpCS__Group__1__Impl : ( '{' ) ;
     public final void rule__LambdaLiteralExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17457:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17458:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18475:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18476:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17458:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17459:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18476:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18477:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLambdaLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__LambdaLiteralExpCS__Group__1__Impl36010); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__LambdaLiteralExpCS__Group__1__Impl37880); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLambdaLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
@@ -52807,21 +55275,21 @@
 
 
     // $ANTLR start "rule__LambdaLiteralExpCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17472:1: rule__LambdaLiteralExpCS__Group__2 : rule__LambdaLiteralExpCS__Group__2__Impl rule__LambdaLiteralExpCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18490:1: rule__LambdaLiteralExpCS__Group__2 : rule__LambdaLiteralExpCS__Group__2__Impl rule__LambdaLiteralExpCS__Group__3 ;
     public final void rule__LambdaLiteralExpCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17476:1: ( rule__LambdaLiteralExpCS__Group__2__Impl rule__LambdaLiteralExpCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17477:2: rule__LambdaLiteralExpCS__Group__2__Impl rule__LambdaLiteralExpCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18494:1: ( rule__LambdaLiteralExpCS__Group__2__Impl rule__LambdaLiteralExpCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18495:2: rule__LambdaLiteralExpCS__Group__2__Impl rule__LambdaLiteralExpCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__2__Impl_in_rule__LambdaLiteralExpCS__Group__236041);
+            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__2__Impl_in_rule__LambdaLiteralExpCS__Group__237911);
             rule__LambdaLiteralExpCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__3_in_rule__LambdaLiteralExpCS__Group__236044);
+            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__3_in_rule__LambdaLiteralExpCS__Group__237914);
             rule__LambdaLiteralExpCS__Group__3();
 
             state._fsp--;
@@ -52845,25 +55313,25 @@
 
 
     // $ANTLR start "rule__LambdaLiteralExpCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17484:1: rule__LambdaLiteralExpCS__Group__2__Impl : ( ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18502:1: rule__LambdaLiteralExpCS__Group__2__Impl : ( ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 ) ) ;
     public final void rule__LambdaLiteralExpCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17488:1: ( ( ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17489:1: ( ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18506:1: ( ( ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18507:1: ( ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17489:1: ( ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17490:1: ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18507:1: ( ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18508:1: ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLambdaLiteralExpCSAccess().getOwnedExpressionCSAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17491:1: ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17491:2: rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18509:1: ( rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18509:2: rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2_in_rule__LambdaLiteralExpCS__Group__2__Impl36071);
+            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2_in_rule__LambdaLiteralExpCS__Group__2__Impl37941);
             rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2();
 
             state._fsp--;
@@ -52896,16 +55364,16 @@
 
 
     // $ANTLR start "rule__LambdaLiteralExpCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17501:1: rule__LambdaLiteralExpCS__Group__3 : rule__LambdaLiteralExpCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18519:1: rule__LambdaLiteralExpCS__Group__3 : rule__LambdaLiteralExpCS__Group__3__Impl ;
     public final void rule__LambdaLiteralExpCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17505:1: ( rule__LambdaLiteralExpCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17506:2: rule__LambdaLiteralExpCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18523:1: ( rule__LambdaLiteralExpCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18524:2: rule__LambdaLiteralExpCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__3__Impl_in_rule__LambdaLiteralExpCS__Group__336101);
+            pushFollow(FollowSets001.FOLLOW_rule__LambdaLiteralExpCS__Group__3__Impl_in_rule__LambdaLiteralExpCS__Group__337971);
             rule__LambdaLiteralExpCS__Group__3__Impl();
 
             state._fsp--;
@@ -52929,22 +55397,22 @@
 
 
     // $ANTLR start "rule__LambdaLiteralExpCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17512:1: rule__LambdaLiteralExpCS__Group__3__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18530:1: rule__LambdaLiteralExpCS__Group__3__Impl : ( '}' ) ;
     public final void rule__LambdaLiteralExpCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17516:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17517:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18534:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18535:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17517:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17518:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18535:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18536:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLambdaLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__LambdaLiteralExpCS__Group__3__Impl36129); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__LambdaLiteralExpCS__Group__3__Impl37999); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLambdaLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); 
             }
@@ -52970,21 +55438,21 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17539:1: rule__TupleLiteralExpCS__Group__0 : rule__TupleLiteralExpCS__Group__0__Impl rule__TupleLiteralExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18557:1: rule__TupleLiteralExpCS__Group__0 : rule__TupleLiteralExpCS__Group__0__Impl rule__TupleLiteralExpCS__Group__1 ;
     public final void rule__TupleLiteralExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17543:1: ( rule__TupleLiteralExpCS__Group__0__Impl rule__TupleLiteralExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17544:2: rule__TupleLiteralExpCS__Group__0__Impl rule__TupleLiteralExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18561:1: ( rule__TupleLiteralExpCS__Group__0__Impl rule__TupleLiteralExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18562:2: rule__TupleLiteralExpCS__Group__0__Impl rule__TupleLiteralExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__0__Impl_in_rule__TupleLiteralExpCS__Group__036168);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__0__Impl_in_rule__TupleLiteralExpCS__Group__038038);
             rule__TupleLiteralExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__1_in_rule__TupleLiteralExpCS__Group__036171);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__1_in_rule__TupleLiteralExpCS__Group__038041);
             rule__TupleLiteralExpCS__Group__1();
 
             state._fsp--;
@@ -53008,22 +55476,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17551:1: rule__TupleLiteralExpCS__Group__0__Impl : ( 'Tuple' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18569:1: rule__TupleLiteralExpCS__Group__0__Impl : ( 'Tuple' ) ;
     public final void rule__TupleLiteralExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17555:1: ( ( 'Tuple' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17556:1: ( 'Tuple' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18573:1: ( ( 'Tuple' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18574:1: ( 'Tuple' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17556:1: ( 'Tuple' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17557:1: 'Tuple'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18574:1: ( 'Tuple' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18575:1: 'Tuple'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralExpCSAccess().getTupleKeyword_0()); 
             }
-            match(input,80,FollowSets001.FOLLOW_80_in_rule__TupleLiteralExpCS__Group__0__Impl36199); if (state.failed) return ;
+            match(input,89,FollowSets001.FOLLOW_89_in_rule__TupleLiteralExpCS__Group__0__Impl38069); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleLiteralExpCSAccess().getTupleKeyword_0()); 
             }
@@ -53049,21 +55517,21 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17570:1: rule__TupleLiteralExpCS__Group__1 : rule__TupleLiteralExpCS__Group__1__Impl rule__TupleLiteralExpCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18588:1: rule__TupleLiteralExpCS__Group__1 : rule__TupleLiteralExpCS__Group__1__Impl rule__TupleLiteralExpCS__Group__2 ;
     public final void rule__TupleLiteralExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17574:1: ( rule__TupleLiteralExpCS__Group__1__Impl rule__TupleLiteralExpCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17575:2: rule__TupleLiteralExpCS__Group__1__Impl rule__TupleLiteralExpCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18592:1: ( rule__TupleLiteralExpCS__Group__1__Impl rule__TupleLiteralExpCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18593:2: rule__TupleLiteralExpCS__Group__1__Impl rule__TupleLiteralExpCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__1__Impl_in_rule__TupleLiteralExpCS__Group__136230);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__1__Impl_in_rule__TupleLiteralExpCS__Group__138100);
             rule__TupleLiteralExpCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__2_in_rule__TupleLiteralExpCS__Group__136233);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__2_in_rule__TupleLiteralExpCS__Group__138103);
             rule__TupleLiteralExpCS__Group__2();
 
             state._fsp--;
@@ -53087,22 +55555,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17582:1: rule__TupleLiteralExpCS__Group__1__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18600:1: rule__TupleLiteralExpCS__Group__1__Impl : ( '{' ) ;
     public final void rule__TupleLiteralExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17586:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17587:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18604:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18605:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17587:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17588:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18605:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18606:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__TupleLiteralExpCS__Group__1__Impl36261); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__TupleLiteralExpCS__Group__1__Impl38131); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
@@ -53128,21 +55596,21 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17601:1: rule__TupleLiteralExpCS__Group__2 : rule__TupleLiteralExpCS__Group__2__Impl rule__TupleLiteralExpCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18619:1: rule__TupleLiteralExpCS__Group__2 : rule__TupleLiteralExpCS__Group__2__Impl rule__TupleLiteralExpCS__Group__3 ;
     public final void rule__TupleLiteralExpCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17605:1: ( rule__TupleLiteralExpCS__Group__2__Impl rule__TupleLiteralExpCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17606:2: rule__TupleLiteralExpCS__Group__2__Impl rule__TupleLiteralExpCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18623:1: ( rule__TupleLiteralExpCS__Group__2__Impl rule__TupleLiteralExpCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18624:2: rule__TupleLiteralExpCS__Group__2__Impl rule__TupleLiteralExpCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__2__Impl_in_rule__TupleLiteralExpCS__Group__236292);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__2__Impl_in_rule__TupleLiteralExpCS__Group__238162);
             rule__TupleLiteralExpCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__3_in_rule__TupleLiteralExpCS__Group__236295);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__3_in_rule__TupleLiteralExpCS__Group__238165);
             rule__TupleLiteralExpCS__Group__3();
 
             state._fsp--;
@@ -53166,25 +55634,25 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17613:1: rule__TupleLiteralExpCS__Group__2__Impl : ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18631:1: rule__TupleLiteralExpCS__Group__2__Impl : ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 ) ) ;
     public final void rule__TupleLiteralExpCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17617:1: ( ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17618:1: ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18635:1: ( ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18636:1: ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17618:1: ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17619:1: ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18636:1: ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18637:1: ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralExpCSAccess().getOwnedPartsAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17620:1: ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17620:2: rule__TupleLiteralExpCS__OwnedPartsAssignment_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18638:1: ( rule__TupleLiteralExpCS__OwnedPartsAssignment_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18638:2: rule__TupleLiteralExpCS__OwnedPartsAssignment_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__OwnedPartsAssignment_2_in_rule__TupleLiteralExpCS__Group__2__Impl36322);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__OwnedPartsAssignment_2_in_rule__TupleLiteralExpCS__Group__2__Impl38192);
             rule__TupleLiteralExpCS__OwnedPartsAssignment_2();
 
             state._fsp--;
@@ -53217,21 +55685,21 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17630:1: rule__TupleLiteralExpCS__Group__3 : rule__TupleLiteralExpCS__Group__3__Impl rule__TupleLiteralExpCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18648:1: rule__TupleLiteralExpCS__Group__3 : rule__TupleLiteralExpCS__Group__3__Impl rule__TupleLiteralExpCS__Group__4 ;
     public final void rule__TupleLiteralExpCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17634:1: ( rule__TupleLiteralExpCS__Group__3__Impl rule__TupleLiteralExpCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17635:2: rule__TupleLiteralExpCS__Group__3__Impl rule__TupleLiteralExpCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18652:1: ( rule__TupleLiteralExpCS__Group__3__Impl rule__TupleLiteralExpCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18653:2: rule__TupleLiteralExpCS__Group__3__Impl rule__TupleLiteralExpCS__Group__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__3__Impl_in_rule__TupleLiteralExpCS__Group__336352);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__3__Impl_in_rule__TupleLiteralExpCS__Group__338222);
             rule__TupleLiteralExpCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__4_in_rule__TupleLiteralExpCS__Group__336355);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__4_in_rule__TupleLiteralExpCS__Group__338225);
             rule__TupleLiteralExpCS__Group__4();
 
             state._fsp--;
@@ -53255,37 +55723,37 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17642:1: rule__TupleLiteralExpCS__Group__3__Impl : ( ( rule__TupleLiteralExpCS__Group_3__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18660:1: rule__TupleLiteralExpCS__Group__3__Impl : ( ( rule__TupleLiteralExpCS__Group_3__0 )* ) ;
     public final void rule__TupleLiteralExpCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17646:1: ( ( ( rule__TupleLiteralExpCS__Group_3__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17647:1: ( ( rule__TupleLiteralExpCS__Group_3__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18664:1: ( ( ( rule__TupleLiteralExpCS__Group_3__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18665:1: ( ( rule__TupleLiteralExpCS__Group_3__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17647:1: ( ( rule__TupleLiteralExpCS__Group_3__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17648:1: ( rule__TupleLiteralExpCS__Group_3__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18665:1: ( ( rule__TupleLiteralExpCS__Group_3__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18666:1: ( rule__TupleLiteralExpCS__Group_3__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralExpCSAccess().getGroup_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17649:1: ( rule__TupleLiteralExpCS__Group_3__0 )*
-            loop191:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18667:1: ( rule__TupleLiteralExpCS__Group_3__0 )*
+            loop219:
             do {
-                int alt191=2;
-                int LA191_0 = input.LA(1);
+                int alt219=2;
+                int LA219_0 = input.LA(1);
 
-                if ( (LA191_0==98) ) {
-                    alt191=1;
+                if ( (LA219_0==107) ) {
+                    alt219=1;
                 }
 
 
-                switch (alt191) {
+                switch (alt219) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17649:2: rule__TupleLiteralExpCS__Group_3__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18667:2: rule__TupleLiteralExpCS__Group_3__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group_3__0_in_rule__TupleLiteralExpCS__Group__3__Impl36382);
+            	    pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group_3__0_in_rule__TupleLiteralExpCS__Group__3__Impl38252);
             	    rule__TupleLiteralExpCS__Group_3__0();
 
             	    state._fsp--;
@@ -53295,7 +55763,7 @@
             	    break;
 
             	default :
-            	    break loop191;
+            	    break loop219;
                 }
             } while (true);
 
@@ -53324,16 +55792,16 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17659:1: rule__TupleLiteralExpCS__Group__4 : rule__TupleLiteralExpCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18677:1: rule__TupleLiteralExpCS__Group__4 : rule__TupleLiteralExpCS__Group__4__Impl ;
     public final void rule__TupleLiteralExpCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17663:1: ( rule__TupleLiteralExpCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17664:2: rule__TupleLiteralExpCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18681:1: ( rule__TupleLiteralExpCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18682:2: rule__TupleLiteralExpCS__Group__4__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__4__Impl_in_rule__TupleLiteralExpCS__Group__436413);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group__4__Impl_in_rule__TupleLiteralExpCS__Group__438283);
             rule__TupleLiteralExpCS__Group__4__Impl();
 
             state._fsp--;
@@ -53357,22 +55825,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17670:1: rule__TupleLiteralExpCS__Group__4__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18688:1: rule__TupleLiteralExpCS__Group__4__Impl : ( '}' ) ;
     public final void rule__TupleLiteralExpCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17674:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17675:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18692:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18693:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17675:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17676:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18693:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18694:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralExpCSAccess().getRightCurlyBracketKeyword_4()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__TupleLiteralExpCS__Group__4__Impl36441); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__TupleLiteralExpCS__Group__4__Impl38311); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleLiteralExpCSAccess().getRightCurlyBracketKeyword_4()); 
             }
@@ -53398,21 +55866,21 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17699:1: rule__TupleLiteralExpCS__Group_3__0 : rule__TupleLiteralExpCS__Group_3__0__Impl rule__TupleLiteralExpCS__Group_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18717:1: rule__TupleLiteralExpCS__Group_3__0 : rule__TupleLiteralExpCS__Group_3__0__Impl rule__TupleLiteralExpCS__Group_3__1 ;
     public final void rule__TupleLiteralExpCS__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17703:1: ( rule__TupleLiteralExpCS__Group_3__0__Impl rule__TupleLiteralExpCS__Group_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17704:2: rule__TupleLiteralExpCS__Group_3__0__Impl rule__TupleLiteralExpCS__Group_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18721:1: ( rule__TupleLiteralExpCS__Group_3__0__Impl rule__TupleLiteralExpCS__Group_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18722:2: rule__TupleLiteralExpCS__Group_3__0__Impl rule__TupleLiteralExpCS__Group_3__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group_3__0__Impl_in_rule__TupleLiteralExpCS__Group_3__036482);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group_3__0__Impl_in_rule__TupleLiteralExpCS__Group_3__038352);
             rule__TupleLiteralExpCS__Group_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group_3__1_in_rule__TupleLiteralExpCS__Group_3__036485);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group_3__1_in_rule__TupleLiteralExpCS__Group_3__038355);
             rule__TupleLiteralExpCS__Group_3__1();
 
             state._fsp--;
@@ -53436,22 +55904,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17711:1: rule__TupleLiteralExpCS__Group_3__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18729:1: rule__TupleLiteralExpCS__Group_3__0__Impl : ( ',' ) ;
     public final void rule__TupleLiteralExpCS__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17715:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17716:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18733:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18734:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17716:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17717:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18734:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18735:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralExpCSAccess().getCommaKeyword_3_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__TupleLiteralExpCS__Group_3__0__Impl36513); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__TupleLiteralExpCS__Group_3__0__Impl38383); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleLiteralExpCSAccess().getCommaKeyword_3_0()); 
             }
@@ -53477,16 +55945,16 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17730:1: rule__TupleLiteralExpCS__Group_3__1 : rule__TupleLiteralExpCS__Group_3__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18748:1: rule__TupleLiteralExpCS__Group_3__1 : rule__TupleLiteralExpCS__Group_3__1__Impl ;
     public final void rule__TupleLiteralExpCS__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17734:1: ( rule__TupleLiteralExpCS__Group_3__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17735:2: rule__TupleLiteralExpCS__Group_3__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18752:1: ( rule__TupleLiteralExpCS__Group_3__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18753:2: rule__TupleLiteralExpCS__Group_3__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group_3__1__Impl_in_rule__TupleLiteralExpCS__Group_3__136544);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__Group_3__1__Impl_in_rule__TupleLiteralExpCS__Group_3__138414);
             rule__TupleLiteralExpCS__Group_3__1__Impl();
 
             state._fsp--;
@@ -53510,25 +55978,25 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__Group_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17741:1: rule__TupleLiteralExpCS__Group_3__1__Impl : ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18759:1: rule__TupleLiteralExpCS__Group_3__1__Impl : ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 ) ) ;
     public final void rule__TupleLiteralExpCS__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17745:1: ( ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17746:1: ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18763:1: ( ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18764:1: ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17746:1: ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17747:1: ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18764:1: ( ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18765:1: ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralExpCSAccess().getOwnedPartsAssignment_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17748:1: ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17748:2: rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18766:1: ( rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18766:2: rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1_in_rule__TupleLiteralExpCS__Group_3__1__Impl36571);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1_in_rule__TupleLiteralExpCS__Group_3__1__Impl38441);
             rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1();
 
             state._fsp--;
@@ -53561,21 +56029,21 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17762:1: rule__TupleLiteralPartCS__Group__0 : rule__TupleLiteralPartCS__Group__0__Impl rule__TupleLiteralPartCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18780:1: rule__TupleLiteralPartCS__Group__0 : rule__TupleLiteralPartCS__Group__0__Impl rule__TupleLiteralPartCS__Group__1 ;
     public final void rule__TupleLiteralPartCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17766:1: ( rule__TupleLiteralPartCS__Group__0__Impl rule__TupleLiteralPartCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17767:2: rule__TupleLiteralPartCS__Group__0__Impl rule__TupleLiteralPartCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18784:1: ( rule__TupleLiteralPartCS__Group__0__Impl rule__TupleLiteralPartCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18785:2: rule__TupleLiteralPartCS__Group__0__Impl rule__TupleLiteralPartCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__0__Impl_in_rule__TupleLiteralPartCS__Group__036605);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__0__Impl_in_rule__TupleLiteralPartCS__Group__038475);
             rule__TupleLiteralPartCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__1_in_rule__TupleLiteralPartCS__Group__036608);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__1_in_rule__TupleLiteralPartCS__Group__038478);
             rule__TupleLiteralPartCS__Group__1();
 
             state._fsp--;
@@ -53599,25 +56067,25 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17774:1: rule__TupleLiteralPartCS__Group__0__Impl : ( ( rule__TupleLiteralPartCS__NameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18792:1: rule__TupleLiteralPartCS__Group__0__Impl : ( ( rule__TupleLiteralPartCS__NameAssignment_0 ) ) ;
     public final void rule__TupleLiteralPartCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17778:1: ( ( ( rule__TupleLiteralPartCS__NameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17779:1: ( ( rule__TupleLiteralPartCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18796:1: ( ( ( rule__TupleLiteralPartCS__NameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18797:1: ( ( rule__TupleLiteralPartCS__NameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17779:1: ( ( rule__TupleLiteralPartCS__NameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17780:1: ( rule__TupleLiteralPartCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18797:1: ( ( rule__TupleLiteralPartCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18798:1: ( rule__TupleLiteralPartCS__NameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralPartCSAccess().getNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17781:1: ( rule__TupleLiteralPartCS__NameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17781:2: rule__TupleLiteralPartCS__NameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18799:1: ( rule__TupleLiteralPartCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18799:2: rule__TupleLiteralPartCS__NameAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__NameAssignment_0_in_rule__TupleLiteralPartCS__Group__0__Impl36635);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__NameAssignment_0_in_rule__TupleLiteralPartCS__Group__0__Impl38505);
             rule__TupleLiteralPartCS__NameAssignment_0();
 
             state._fsp--;
@@ -53650,21 +56118,21 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17791:1: rule__TupleLiteralPartCS__Group__1 : rule__TupleLiteralPartCS__Group__1__Impl rule__TupleLiteralPartCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18809:1: rule__TupleLiteralPartCS__Group__1 : rule__TupleLiteralPartCS__Group__1__Impl rule__TupleLiteralPartCS__Group__2 ;
     public final void rule__TupleLiteralPartCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17795:1: ( rule__TupleLiteralPartCS__Group__1__Impl rule__TupleLiteralPartCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17796:2: rule__TupleLiteralPartCS__Group__1__Impl rule__TupleLiteralPartCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18813:1: ( rule__TupleLiteralPartCS__Group__1__Impl rule__TupleLiteralPartCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18814:2: rule__TupleLiteralPartCS__Group__1__Impl rule__TupleLiteralPartCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__1__Impl_in_rule__TupleLiteralPartCS__Group__136665);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__1__Impl_in_rule__TupleLiteralPartCS__Group__138535);
             rule__TupleLiteralPartCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__2_in_rule__TupleLiteralPartCS__Group__136668);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__2_in_rule__TupleLiteralPartCS__Group__138538);
             rule__TupleLiteralPartCS__Group__2();
 
             state._fsp--;
@@ -53688,33 +56156,33 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17803:1: rule__TupleLiteralPartCS__Group__1__Impl : ( ( rule__TupleLiteralPartCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18821:1: rule__TupleLiteralPartCS__Group__1__Impl : ( ( rule__TupleLiteralPartCS__Group_1__0 )? ) ;
     public final void rule__TupleLiteralPartCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17807:1: ( ( ( rule__TupleLiteralPartCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17808:1: ( ( rule__TupleLiteralPartCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18825:1: ( ( ( rule__TupleLiteralPartCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18826:1: ( ( rule__TupleLiteralPartCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17808:1: ( ( rule__TupleLiteralPartCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17809:1: ( rule__TupleLiteralPartCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18826:1: ( ( rule__TupleLiteralPartCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18827:1: ( rule__TupleLiteralPartCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralPartCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17810:1: ( rule__TupleLiteralPartCS__Group_1__0 )?
-            int alt192=2;
-            int LA192_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18828:1: ( rule__TupleLiteralPartCS__Group_1__0 )?
+            int alt220=2;
+            int LA220_0 = input.LA(1);
 
-            if ( (LA192_0==97) ) {
-                alt192=1;
+            if ( (LA220_0==106) ) {
+                alt220=1;
             }
-            switch (alt192) {
+            switch (alt220) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17810:2: rule__TupleLiteralPartCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18828:2: rule__TupleLiteralPartCS__Group_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group_1__0_in_rule__TupleLiteralPartCS__Group__1__Impl36695);
+                    pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group_1__0_in_rule__TupleLiteralPartCS__Group__1__Impl38565);
                     rule__TupleLiteralPartCS__Group_1__0();
 
                     state._fsp--;
@@ -53750,21 +56218,21 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17820:1: rule__TupleLiteralPartCS__Group__2 : rule__TupleLiteralPartCS__Group__2__Impl rule__TupleLiteralPartCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18838:1: rule__TupleLiteralPartCS__Group__2 : rule__TupleLiteralPartCS__Group__2__Impl rule__TupleLiteralPartCS__Group__3 ;
     public final void rule__TupleLiteralPartCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17824:1: ( rule__TupleLiteralPartCS__Group__2__Impl rule__TupleLiteralPartCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17825:2: rule__TupleLiteralPartCS__Group__2__Impl rule__TupleLiteralPartCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18842:1: ( rule__TupleLiteralPartCS__Group__2__Impl rule__TupleLiteralPartCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18843:2: rule__TupleLiteralPartCS__Group__2__Impl rule__TupleLiteralPartCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__2__Impl_in_rule__TupleLiteralPartCS__Group__236726);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__2__Impl_in_rule__TupleLiteralPartCS__Group__238596);
             rule__TupleLiteralPartCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__3_in_rule__TupleLiteralPartCS__Group__236729);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__3_in_rule__TupleLiteralPartCS__Group__238599);
             rule__TupleLiteralPartCS__Group__3();
 
             state._fsp--;
@@ -53788,22 +56256,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17832:1: rule__TupleLiteralPartCS__Group__2__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18850:1: rule__TupleLiteralPartCS__Group__2__Impl : ( '=' ) ;
     public final void rule__TupleLiteralPartCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17836:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17837:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18854:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18855:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17837:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17838:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18855:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18856:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralPartCSAccess().getEqualsSignKeyword_2()); 
             }
-            match(input,70,FollowSets001.FOLLOW_70_in_rule__TupleLiteralPartCS__Group__2__Impl36757); if (state.failed) return ;
+            match(input,79,FollowSets001.FOLLOW_79_in_rule__TupleLiteralPartCS__Group__2__Impl38627); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleLiteralPartCSAccess().getEqualsSignKeyword_2()); 
             }
@@ -53829,16 +56297,16 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17851:1: rule__TupleLiteralPartCS__Group__3 : rule__TupleLiteralPartCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18869:1: rule__TupleLiteralPartCS__Group__3 : rule__TupleLiteralPartCS__Group__3__Impl ;
     public final void rule__TupleLiteralPartCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17855:1: ( rule__TupleLiteralPartCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17856:2: rule__TupleLiteralPartCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18873:1: ( rule__TupleLiteralPartCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18874:2: rule__TupleLiteralPartCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__3__Impl_in_rule__TupleLiteralPartCS__Group__336788);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group__3__Impl_in_rule__TupleLiteralPartCS__Group__338658);
             rule__TupleLiteralPartCS__Group__3__Impl();
 
             state._fsp--;
@@ -53862,25 +56330,25 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17862:1: rule__TupleLiteralPartCS__Group__3__Impl : ( ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18880:1: rule__TupleLiteralPartCS__Group__3__Impl : ( ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 ) ) ;
     public final void rule__TupleLiteralPartCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17866:1: ( ( ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17867:1: ( ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18884:1: ( ( ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18885:1: ( ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17867:1: ( ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17868:1: ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18885:1: ( ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18886:1: ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralPartCSAccess().getOwnedInitExpressionAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17869:1: ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17869:2: rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18887:1: ( rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18887:2: rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3_in_rule__TupleLiteralPartCS__Group__3__Impl36815);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3_in_rule__TupleLiteralPartCS__Group__3__Impl38685);
             rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3();
 
             state._fsp--;
@@ -53913,21 +56381,21 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17887:1: rule__TupleLiteralPartCS__Group_1__0 : rule__TupleLiteralPartCS__Group_1__0__Impl rule__TupleLiteralPartCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18905:1: rule__TupleLiteralPartCS__Group_1__0 : rule__TupleLiteralPartCS__Group_1__0__Impl rule__TupleLiteralPartCS__Group_1__1 ;
     public final void rule__TupleLiteralPartCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17891:1: ( rule__TupleLiteralPartCS__Group_1__0__Impl rule__TupleLiteralPartCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17892:2: rule__TupleLiteralPartCS__Group_1__0__Impl rule__TupleLiteralPartCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18909:1: ( rule__TupleLiteralPartCS__Group_1__0__Impl rule__TupleLiteralPartCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18910:2: rule__TupleLiteralPartCS__Group_1__0__Impl rule__TupleLiteralPartCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group_1__0__Impl_in_rule__TupleLiteralPartCS__Group_1__036853);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group_1__0__Impl_in_rule__TupleLiteralPartCS__Group_1__038723);
             rule__TupleLiteralPartCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group_1__1_in_rule__TupleLiteralPartCS__Group_1__036856);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group_1__1_in_rule__TupleLiteralPartCS__Group_1__038726);
             rule__TupleLiteralPartCS__Group_1__1();
 
             state._fsp--;
@@ -53951,22 +56419,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17899:1: rule__TupleLiteralPartCS__Group_1__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18917:1: rule__TupleLiteralPartCS__Group_1__0__Impl : ( ':' ) ;
     public final void rule__TupleLiteralPartCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17903:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17904:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18921:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18922:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17904:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17905:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18922:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18923:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralPartCSAccess().getColonKeyword_1_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__TupleLiteralPartCS__Group_1__0__Impl36884); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__TupleLiteralPartCS__Group_1__0__Impl38754); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleLiteralPartCSAccess().getColonKeyword_1_0()); 
             }
@@ -53992,16 +56460,16 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17918:1: rule__TupleLiteralPartCS__Group_1__1 : rule__TupleLiteralPartCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18936:1: rule__TupleLiteralPartCS__Group_1__1 : rule__TupleLiteralPartCS__Group_1__1__Impl ;
     public final void rule__TupleLiteralPartCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17922:1: ( rule__TupleLiteralPartCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17923:2: rule__TupleLiteralPartCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18940:1: ( rule__TupleLiteralPartCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18941:2: rule__TupleLiteralPartCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group_1__1__Impl_in_rule__TupleLiteralPartCS__Group_1__136915);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__Group_1__1__Impl_in_rule__TupleLiteralPartCS__Group_1__138785);
             rule__TupleLiteralPartCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -54025,25 +56493,25 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17929:1: rule__TupleLiteralPartCS__Group_1__1__Impl : ( ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18947:1: rule__TupleLiteralPartCS__Group_1__1__Impl : ( ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 ) ) ;
     public final void rule__TupleLiteralPartCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17933:1: ( ( ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17934:1: ( ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18951:1: ( ( ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18952:1: ( ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17934:1: ( ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17935:1: ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18952:1: ( ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18953:1: ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralPartCSAccess().getOwnedTypeAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17936:1: ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17936:2: rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18954:1: ( rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18954:2: rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1_in_rule__TupleLiteralPartCS__Group_1__1__Impl36942);
+            pushFollow(FollowSets001.FOLLOW_rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1_in_rule__TupleLiteralPartCS__Group_1__1__Impl38812);
             rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1();
 
             state._fsp--;
@@ -54076,21 +56544,21 @@
 
 
     // $ANTLR start "rule__UnlimitedNaturalLiteralExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17950:1: rule__UnlimitedNaturalLiteralExpCS__Group__0 : rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl rule__UnlimitedNaturalLiteralExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18968:1: rule__UnlimitedNaturalLiteralExpCS__Group__0 : rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl rule__UnlimitedNaturalLiteralExpCS__Group__1 ;
     public final void rule__UnlimitedNaturalLiteralExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17954:1: ( rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl rule__UnlimitedNaturalLiteralExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17955:2: rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl rule__UnlimitedNaturalLiteralExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18972:1: ( rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl rule__UnlimitedNaturalLiteralExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18973:2: rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl rule__UnlimitedNaturalLiteralExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl_in_rule__UnlimitedNaturalLiteralExpCS__Group__036976);
+            pushFollow(FollowSets001.FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl_in_rule__UnlimitedNaturalLiteralExpCS__Group__038846);
             rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__1_in_rule__UnlimitedNaturalLiteralExpCS__Group__036979);
+            pushFollow(FollowSets001.FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__1_in_rule__UnlimitedNaturalLiteralExpCS__Group__038849);
             rule__UnlimitedNaturalLiteralExpCS__Group__1();
 
             state._fsp--;
@@ -54114,23 +56582,23 @@
 
 
     // $ANTLR start "rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17962:1: rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18980:1: rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl : ( () ) ;
     public final void rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17966:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17967:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18984:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18985:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17967:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17968:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18985:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18986:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getUnlimitedNaturalLiteralExpCSAccess().getUnlimitedNaturalLiteralExpCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17969:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17971:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18987:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18989:1: 
             {
             }
 
@@ -54155,16 +56623,16 @@
 
 
     // $ANTLR start "rule__UnlimitedNaturalLiteralExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17981:1: rule__UnlimitedNaturalLiteralExpCS__Group__1 : rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18999:1: rule__UnlimitedNaturalLiteralExpCS__Group__1 : rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl ;
     public final void rule__UnlimitedNaturalLiteralExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17985:1: ( rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17986:2: rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19003:1: ( rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19004:2: rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl_in_rule__UnlimitedNaturalLiteralExpCS__Group__137037);
+            pushFollow(FollowSets001.FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl_in_rule__UnlimitedNaturalLiteralExpCS__Group__138907);
             rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl();
 
             state._fsp--;
@@ -54188,22 +56656,22 @@
 
 
     // $ANTLR start "rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17992:1: rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl : ( '*' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19010:1: rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl : ( '*' ) ;
     public final void rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17996:1: ( ( '*' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17997:1: ( '*' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19014:1: ( ( '*' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19015:1: ( '*' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17997:1: ( '*' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:17998:1: '*'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19015:1: ( '*' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19016:1: '*'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getUnlimitedNaturalLiteralExpCSAccess().getAsteriskKeyword_1()); 
             }
-            match(input,63,FollowSets001.FOLLOW_63_in_rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl37065); if (state.failed) return ;
+            match(input,72,FollowSets001.FOLLOW_72_in_rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl38935); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getUnlimitedNaturalLiteralExpCSAccess().getAsteriskKeyword_1()); 
             }
@@ -54229,21 +56697,21 @@
 
 
     // $ANTLR start "rule__InvalidLiteralExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18015:1: rule__InvalidLiteralExpCS__Group__0 : rule__InvalidLiteralExpCS__Group__0__Impl rule__InvalidLiteralExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19033:1: rule__InvalidLiteralExpCS__Group__0 : rule__InvalidLiteralExpCS__Group__0__Impl rule__InvalidLiteralExpCS__Group__1 ;
     public final void rule__InvalidLiteralExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18019:1: ( rule__InvalidLiteralExpCS__Group__0__Impl rule__InvalidLiteralExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18020:2: rule__InvalidLiteralExpCS__Group__0__Impl rule__InvalidLiteralExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19037:1: ( rule__InvalidLiteralExpCS__Group__0__Impl rule__InvalidLiteralExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19038:2: rule__InvalidLiteralExpCS__Group__0__Impl rule__InvalidLiteralExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__InvalidLiteralExpCS__Group__0__Impl_in_rule__InvalidLiteralExpCS__Group__037100);
+            pushFollow(FollowSets001.FOLLOW_rule__InvalidLiteralExpCS__Group__0__Impl_in_rule__InvalidLiteralExpCS__Group__038970);
             rule__InvalidLiteralExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__InvalidLiteralExpCS__Group__1_in_rule__InvalidLiteralExpCS__Group__037103);
+            pushFollow(FollowSets001.FOLLOW_rule__InvalidLiteralExpCS__Group__1_in_rule__InvalidLiteralExpCS__Group__038973);
             rule__InvalidLiteralExpCS__Group__1();
 
             state._fsp--;
@@ -54267,23 +56735,23 @@
 
 
     // $ANTLR start "rule__InvalidLiteralExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18027:1: rule__InvalidLiteralExpCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19045:1: rule__InvalidLiteralExpCS__Group__0__Impl : ( () ) ;
     public final void rule__InvalidLiteralExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18031:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18032:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19049:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19050:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18032:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18033:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19050:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19051:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvalidLiteralExpCSAccess().getInvalidLiteralExpCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18034:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18036:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19052:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19054:1: 
             {
             }
 
@@ -54308,16 +56776,16 @@
 
 
     // $ANTLR start "rule__InvalidLiteralExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18046:1: rule__InvalidLiteralExpCS__Group__1 : rule__InvalidLiteralExpCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19064:1: rule__InvalidLiteralExpCS__Group__1 : rule__InvalidLiteralExpCS__Group__1__Impl ;
     public final void rule__InvalidLiteralExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18050:1: ( rule__InvalidLiteralExpCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18051:2: rule__InvalidLiteralExpCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19068:1: ( rule__InvalidLiteralExpCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19069:2: rule__InvalidLiteralExpCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__InvalidLiteralExpCS__Group__1__Impl_in_rule__InvalidLiteralExpCS__Group__137161);
+            pushFollow(FollowSets001.FOLLOW_rule__InvalidLiteralExpCS__Group__1__Impl_in_rule__InvalidLiteralExpCS__Group__139031);
             rule__InvalidLiteralExpCS__Group__1__Impl();
 
             state._fsp--;
@@ -54341,22 +56809,22 @@
 
 
     // $ANTLR start "rule__InvalidLiteralExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18057:1: rule__InvalidLiteralExpCS__Group__1__Impl : ( 'invalid' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19075:1: rule__InvalidLiteralExpCS__Group__1__Impl : ( 'invalid' ) ;
     public final void rule__InvalidLiteralExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18061:1: ( ( 'invalid' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18062:1: ( 'invalid' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19079:1: ( ( 'invalid' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19080:1: ( 'invalid' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18062:1: ( 'invalid' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18063:1: 'invalid'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19080:1: ( 'invalid' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19081:1: 'invalid'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvalidLiteralExpCSAccess().getInvalidKeyword_1()); 
             }
-            match(input,106,FollowSets001.FOLLOW_106_in_rule__InvalidLiteralExpCS__Group__1__Impl37189); if (state.failed) return ;
+            match(input,115,FollowSets001.FOLLOW_115_in_rule__InvalidLiteralExpCS__Group__1__Impl39059); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvalidLiteralExpCSAccess().getInvalidKeyword_1()); 
             }
@@ -54382,21 +56850,21 @@
 
 
     // $ANTLR start "rule__NullLiteralExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18080:1: rule__NullLiteralExpCS__Group__0 : rule__NullLiteralExpCS__Group__0__Impl rule__NullLiteralExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19098:1: rule__NullLiteralExpCS__Group__0 : rule__NullLiteralExpCS__Group__0__Impl rule__NullLiteralExpCS__Group__1 ;
     public final void rule__NullLiteralExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18084:1: ( rule__NullLiteralExpCS__Group__0__Impl rule__NullLiteralExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18085:2: rule__NullLiteralExpCS__Group__0__Impl rule__NullLiteralExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19102:1: ( rule__NullLiteralExpCS__Group__0__Impl rule__NullLiteralExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19103:2: rule__NullLiteralExpCS__Group__0__Impl rule__NullLiteralExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NullLiteralExpCS__Group__0__Impl_in_rule__NullLiteralExpCS__Group__037224);
+            pushFollow(FollowSets001.FOLLOW_rule__NullLiteralExpCS__Group__0__Impl_in_rule__NullLiteralExpCS__Group__039094);
             rule__NullLiteralExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NullLiteralExpCS__Group__1_in_rule__NullLiteralExpCS__Group__037227);
+            pushFollow(FollowSets001.FOLLOW_rule__NullLiteralExpCS__Group__1_in_rule__NullLiteralExpCS__Group__039097);
             rule__NullLiteralExpCS__Group__1();
 
             state._fsp--;
@@ -54420,23 +56888,23 @@
 
 
     // $ANTLR start "rule__NullLiteralExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18092:1: rule__NullLiteralExpCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19110:1: rule__NullLiteralExpCS__Group__0__Impl : ( () ) ;
     public final void rule__NullLiteralExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18096:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18097:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19114:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19115:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18097:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18098:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19115:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19116:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNullLiteralExpCSAccess().getNullLiteralExpCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18099:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18101:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19117:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19119:1: 
             {
             }
 
@@ -54461,16 +56929,16 @@
 
 
     // $ANTLR start "rule__NullLiteralExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18111:1: rule__NullLiteralExpCS__Group__1 : rule__NullLiteralExpCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19129:1: rule__NullLiteralExpCS__Group__1 : rule__NullLiteralExpCS__Group__1__Impl ;
     public final void rule__NullLiteralExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18115:1: ( rule__NullLiteralExpCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18116:2: rule__NullLiteralExpCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19133:1: ( rule__NullLiteralExpCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19134:2: rule__NullLiteralExpCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NullLiteralExpCS__Group__1__Impl_in_rule__NullLiteralExpCS__Group__137285);
+            pushFollow(FollowSets001.FOLLOW_rule__NullLiteralExpCS__Group__1__Impl_in_rule__NullLiteralExpCS__Group__139155);
             rule__NullLiteralExpCS__Group__1__Impl();
 
             state._fsp--;
@@ -54494,22 +56962,22 @@
 
 
     // $ANTLR start "rule__NullLiteralExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18122:1: rule__NullLiteralExpCS__Group__1__Impl : ( 'null' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19140:1: rule__NullLiteralExpCS__Group__1__Impl : ( 'null' ) ;
     public final void rule__NullLiteralExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18126:1: ( ( 'null' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18127:1: ( 'null' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19144:1: ( ( 'null' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19145:1: ( 'null' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18127:1: ( 'null' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18128:1: 'null'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19145:1: ( 'null' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19146:1: 'null'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1()); 
             }
-            match(input,107,FollowSets001.FOLLOW_107_in_rule__NullLiteralExpCS__Group__1__Impl37313); if (state.failed) return ;
+            match(input,116,FollowSets001.FOLLOW_116_in_rule__NullLiteralExpCS__Group__1__Impl39183); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1()); 
             }
@@ -54535,21 +57003,21 @@
 
 
     // $ANTLR start "rule__TypeLiteralWithMultiplicityCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18145:1: rule__TypeLiteralWithMultiplicityCS__Group__0 : rule__TypeLiteralWithMultiplicityCS__Group__0__Impl rule__TypeLiteralWithMultiplicityCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19163:1: rule__TypeLiteralWithMultiplicityCS__Group__0 : rule__TypeLiteralWithMultiplicityCS__Group__0__Impl rule__TypeLiteralWithMultiplicityCS__Group__1 ;
     public final void rule__TypeLiteralWithMultiplicityCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18149:1: ( rule__TypeLiteralWithMultiplicityCS__Group__0__Impl rule__TypeLiteralWithMultiplicityCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18150:2: rule__TypeLiteralWithMultiplicityCS__Group__0__Impl rule__TypeLiteralWithMultiplicityCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19167:1: ( rule__TypeLiteralWithMultiplicityCS__Group__0__Impl rule__TypeLiteralWithMultiplicityCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19168:2: rule__TypeLiteralWithMultiplicityCS__Group__0__Impl rule__TypeLiteralWithMultiplicityCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__0__Impl_in_rule__TypeLiteralWithMultiplicityCS__Group__037348);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__0__Impl_in_rule__TypeLiteralWithMultiplicityCS__Group__039218);
             rule__TypeLiteralWithMultiplicityCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__1_in_rule__TypeLiteralWithMultiplicityCS__Group__037351);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__1_in_rule__TypeLiteralWithMultiplicityCS__Group__039221);
             rule__TypeLiteralWithMultiplicityCS__Group__1();
 
             state._fsp--;
@@ -54573,22 +57041,22 @@
 
 
     // $ANTLR start "rule__TypeLiteralWithMultiplicityCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18157:1: rule__TypeLiteralWithMultiplicityCS__Group__0__Impl : ( ruleTypeLiteralCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19175:1: rule__TypeLiteralWithMultiplicityCS__Group__0__Impl : ( ruleTypeLiteralCS ) ;
     public final void rule__TypeLiteralWithMultiplicityCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18161:1: ( ( ruleTypeLiteralCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18162:1: ( ruleTypeLiteralCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19179:1: ( ( ruleTypeLiteralCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19180:1: ( ruleTypeLiteralCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18162:1: ( ruleTypeLiteralCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18163:1: ruleTypeLiteralCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19180:1: ( ruleTypeLiteralCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19181:1: ruleTypeLiteralCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeLiteralWithMultiplicityCSAccess().getTypeLiteralCSParserRuleCall_0()); 
             }
-            pushFollow(FollowSets001.FOLLOW_ruleTypeLiteralCS_in_rule__TypeLiteralWithMultiplicityCS__Group__0__Impl37378);
+            pushFollow(FollowSets001.FOLLOW_ruleTypeLiteralCS_in_rule__TypeLiteralWithMultiplicityCS__Group__0__Impl39248);
             ruleTypeLiteralCS();
 
             state._fsp--;
@@ -54618,16 +57086,16 @@
 
 
     // $ANTLR start "rule__TypeLiteralWithMultiplicityCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18174:1: rule__TypeLiteralWithMultiplicityCS__Group__1 : rule__TypeLiteralWithMultiplicityCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19192:1: rule__TypeLiteralWithMultiplicityCS__Group__1 : rule__TypeLiteralWithMultiplicityCS__Group__1__Impl ;
     public final void rule__TypeLiteralWithMultiplicityCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18178:1: ( rule__TypeLiteralWithMultiplicityCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18179:2: rule__TypeLiteralWithMultiplicityCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19196:1: ( rule__TypeLiteralWithMultiplicityCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19197:2: rule__TypeLiteralWithMultiplicityCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__1__Impl_in_rule__TypeLiteralWithMultiplicityCS__Group__137407);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__1__Impl_in_rule__TypeLiteralWithMultiplicityCS__Group__139277);
             rule__TypeLiteralWithMultiplicityCS__Group__1__Impl();
 
             state._fsp--;
@@ -54651,33 +57119,33 @@
 
 
     // $ANTLR start "rule__TypeLiteralWithMultiplicityCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18185:1: rule__TypeLiteralWithMultiplicityCS__Group__1__Impl : ( ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19203:1: rule__TypeLiteralWithMultiplicityCS__Group__1__Impl : ( ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )? ) ;
     public final void rule__TypeLiteralWithMultiplicityCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18189:1: ( ( ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18190:1: ( ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19207:1: ( ( ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19208:1: ( ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18190:1: ( ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18191:1: ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19208:1: ( ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19209:1: ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeLiteralWithMultiplicityCSAccess().getOwnedMultiplicityAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18192:1: ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )?
-            int alt193=2;
-            int LA193_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19210:1: ( rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 )?
+            int alt221=2;
+            int LA221_0 = input.LA(1);
 
-            if ( (LA193_0==109) ) {
-                alt193=1;
+            if ( (LA221_0==118) ) {
+                alt221=1;
             }
-            switch (alt193) {
+            switch (alt221) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18192:2: rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19210:2: rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1_in_rule__TypeLiteralWithMultiplicityCS__Group__1__Impl37434);
+                    pushFollow(FollowSets001.FOLLOW_rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1_in_rule__TypeLiteralWithMultiplicityCS__Group__1__Impl39304);
                     rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1();
 
                     state._fsp--;
@@ -54713,21 +57181,21 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18206:1: rule__TypeNameExpCS__Group__0 : rule__TypeNameExpCS__Group__0__Impl rule__TypeNameExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19224:1: rule__TypeNameExpCS__Group__0 : rule__TypeNameExpCS__Group__0__Impl rule__TypeNameExpCS__Group__1 ;
     public final void rule__TypeNameExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18210:1: ( rule__TypeNameExpCS__Group__0__Impl rule__TypeNameExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18211:2: rule__TypeNameExpCS__Group__0__Impl rule__TypeNameExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19228:1: ( rule__TypeNameExpCS__Group__0__Impl rule__TypeNameExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19229:2: rule__TypeNameExpCS__Group__0__Impl rule__TypeNameExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group__0__Impl_in_rule__TypeNameExpCS__Group__037469);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group__0__Impl_in_rule__TypeNameExpCS__Group__039339);
             rule__TypeNameExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group__1_in_rule__TypeNameExpCS__Group__037472);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group__1_in_rule__TypeNameExpCS__Group__039342);
             rule__TypeNameExpCS__Group__1();
 
             state._fsp--;
@@ -54751,25 +57219,25 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18218:1: rule__TypeNameExpCS__Group__0__Impl : ( ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19236:1: rule__TypeNameExpCS__Group__0__Impl : ( ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 ) ) ;
     public final void rule__TypeNameExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18222:1: ( ( ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18223:1: ( ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19240:1: ( ( ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19241:1: ( ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18223:1: ( ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18224:1: ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19241:1: ( ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19242:1: ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getOwnedPathNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18225:1: ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18225:2: rule__TypeNameExpCS__OwnedPathNameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19243:1: ( rule__TypeNameExpCS__OwnedPathNameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19243:2: rule__TypeNameExpCS__OwnedPathNameAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__OwnedPathNameAssignment_0_in_rule__TypeNameExpCS__Group__0__Impl37499);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__OwnedPathNameAssignment_0_in_rule__TypeNameExpCS__Group__0__Impl39369);
             rule__TypeNameExpCS__OwnedPathNameAssignment_0();
 
             state._fsp--;
@@ -54802,16 +57270,16 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18235:1: rule__TypeNameExpCS__Group__1 : rule__TypeNameExpCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19253:1: rule__TypeNameExpCS__Group__1 : rule__TypeNameExpCS__Group__1__Impl ;
     public final void rule__TypeNameExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18239:1: ( rule__TypeNameExpCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18240:2: rule__TypeNameExpCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19257:1: ( rule__TypeNameExpCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19258:2: rule__TypeNameExpCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group__1__Impl_in_rule__TypeNameExpCS__Group__137529);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group__1__Impl_in_rule__TypeNameExpCS__Group__139399);
             rule__TypeNameExpCS__Group__1__Impl();
 
             state._fsp--;
@@ -54835,33 +57303,33 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18246:1: rule__TypeNameExpCS__Group__1__Impl : ( ( rule__TypeNameExpCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19264:1: rule__TypeNameExpCS__Group__1__Impl : ( ( rule__TypeNameExpCS__Group_1__0 )? ) ;
     public final void rule__TypeNameExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18250:1: ( ( ( rule__TypeNameExpCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18251:1: ( ( rule__TypeNameExpCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19268:1: ( ( ( rule__TypeNameExpCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19269:1: ( ( rule__TypeNameExpCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18251:1: ( ( rule__TypeNameExpCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18252:1: ( rule__TypeNameExpCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19269:1: ( ( rule__TypeNameExpCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19270:1: ( rule__TypeNameExpCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18253:1: ( rule__TypeNameExpCS__Group_1__0 )?
-            int alt194=2;
-            int LA194_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19271:1: ( rule__TypeNameExpCS__Group_1__0 )?
+            int alt222=2;
+            int LA222_0 = input.LA(1);
 
-            if ( (LA194_0==99) ) {
-                alt194=1;
+            if ( (LA222_0==108) ) {
+                alt222=1;
             }
-            switch (alt194) {
+            switch (alt222) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18253:2: rule__TypeNameExpCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19271:2: rule__TypeNameExpCS__Group_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1__0_in_rule__TypeNameExpCS__Group__1__Impl37556);
+                    pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1__0_in_rule__TypeNameExpCS__Group__1__Impl39426);
                     rule__TypeNameExpCS__Group_1__0();
 
                     state._fsp--;
@@ -54897,21 +57365,21 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18267:1: rule__TypeNameExpCS__Group_1__0 : rule__TypeNameExpCS__Group_1__0__Impl rule__TypeNameExpCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19285:1: rule__TypeNameExpCS__Group_1__0 : rule__TypeNameExpCS__Group_1__0__Impl rule__TypeNameExpCS__Group_1__1 ;
     public final void rule__TypeNameExpCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18271:1: ( rule__TypeNameExpCS__Group_1__0__Impl rule__TypeNameExpCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18272:2: rule__TypeNameExpCS__Group_1__0__Impl rule__TypeNameExpCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19289:1: ( rule__TypeNameExpCS__Group_1__0__Impl rule__TypeNameExpCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19290:2: rule__TypeNameExpCS__Group_1__0__Impl rule__TypeNameExpCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1__0__Impl_in_rule__TypeNameExpCS__Group_1__037591);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1__0__Impl_in_rule__TypeNameExpCS__Group_1__039461);
             rule__TypeNameExpCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1__1_in_rule__TypeNameExpCS__Group_1__037594);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1__1_in_rule__TypeNameExpCS__Group_1__039464);
             rule__TypeNameExpCS__Group_1__1();
 
             state._fsp--;
@@ -54935,25 +57403,25 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18279:1: rule__TypeNameExpCS__Group_1__0__Impl : ( ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19297:1: rule__TypeNameExpCS__Group_1__0__Impl : ( ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 ) ) ;
     public final void rule__TypeNameExpCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18283:1: ( ( ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18284:1: ( ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19301:1: ( ( ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19302:1: ( ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18284:1: ( ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18285:1: ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19302:1: ( ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19303:1: ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getOwnedCurlyBracketedClauseAssignment_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18286:1: ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18286:2: rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19304:1: ( rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19304:2: rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0_in_rule__TypeNameExpCS__Group_1__0__Impl37621);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0_in_rule__TypeNameExpCS__Group_1__0__Impl39491);
             rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0();
 
             state._fsp--;
@@ -54986,16 +57454,16 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18296:1: rule__TypeNameExpCS__Group_1__1 : rule__TypeNameExpCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19314:1: rule__TypeNameExpCS__Group_1__1 : rule__TypeNameExpCS__Group_1__1__Impl ;
     public final void rule__TypeNameExpCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18300:1: ( rule__TypeNameExpCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18301:2: rule__TypeNameExpCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19318:1: ( rule__TypeNameExpCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19319:2: rule__TypeNameExpCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1__1__Impl_in_rule__TypeNameExpCS__Group_1__137651);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1__1__Impl_in_rule__TypeNameExpCS__Group_1__139521);
             rule__TypeNameExpCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -55019,33 +57487,33 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18307:1: rule__TypeNameExpCS__Group_1__1__Impl : ( ( rule__TypeNameExpCS__Group_1_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19325:1: rule__TypeNameExpCS__Group_1__1__Impl : ( ( rule__TypeNameExpCS__Group_1_1__0 )? ) ;
     public final void rule__TypeNameExpCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18311:1: ( ( ( rule__TypeNameExpCS__Group_1_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18312:1: ( ( rule__TypeNameExpCS__Group_1_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19329:1: ( ( ( rule__TypeNameExpCS__Group_1_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19330:1: ( ( rule__TypeNameExpCS__Group_1_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18312:1: ( ( rule__TypeNameExpCS__Group_1_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18313:1: ( rule__TypeNameExpCS__Group_1_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19330:1: ( ( rule__TypeNameExpCS__Group_1_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19331:1: ( rule__TypeNameExpCS__Group_1_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getGroup_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18314:1: ( rule__TypeNameExpCS__Group_1_1__0 )?
-            int alt195=2;
-            int LA195_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19332:1: ( rule__TypeNameExpCS__Group_1_1__0 )?
+            int alt223=2;
+            int LA223_0 = input.LA(1);
 
-            if ( (LA195_0==99) ) {
-                alt195=1;
+            if ( (LA223_0==108) ) {
+                alt223=1;
             }
-            switch (alt195) {
+            switch (alt223) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18314:2: rule__TypeNameExpCS__Group_1_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19332:2: rule__TypeNameExpCS__Group_1_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__0_in_rule__TypeNameExpCS__Group_1__1__Impl37678);
+                    pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__0_in_rule__TypeNameExpCS__Group_1__1__Impl39548);
                     rule__TypeNameExpCS__Group_1_1__0();
 
                     state._fsp--;
@@ -55081,21 +57549,21 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18328:1: rule__TypeNameExpCS__Group_1_1__0 : rule__TypeNameExpCS__Group_1_1__0__Impl rule__TypeNameExpCS__Group_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19346:1: rule__TypeNameExpCS__Group_1_1__0 : rule__TypeNameExpCS__Group_1_1__0__Impl rule__TypeNameExpCS__Group_1_1__1 ;
     public final void rule__TypeNameExpCS__Group_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18332:1: ( rule__TypeNameExpCS__Group_1_1__0__Impl rule__TypeNameExpCS__Group_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18333:2: rule__TypeNameExpCS__Group_1_1__0__Impl rule__TypeNameExpCS__Group_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19350:1: ( rule__TypeNameExpCS__Group_1_1__0__Impl rule__TypeNameExpCS__Group_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19351:2: rule__TypeNameExpCS__Group_1_1__0__Impl rule__TypeNameExpCS__Group_1_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__0__Impl_in_rule__TypeNameExpCS__Group_1_1__037713);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__0__Impl_in_rule__TypeNameExpCS__Group_1_1__039583);
             rule__TypeNameExpCS__Group_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__1_in_rule__TypeNameExpCS__Group_1_1__037716);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__1_in_rule__TypeNameExpCS__Group_1_1__039586);
             rule__TypeNameExpCS__Group_1_1__1();
 
             state._fsp--;
@@ -55119,22 +57587,22 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18340:1: rule__TypeNameExpCS__Group_1_1__0__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19358:1: rule__TypeNameExpCS__Group_1_1__0__Impl : ( '{' ) ;
     public final void rule__TypeNameExpCS__Group_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18344:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18345:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19362:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19363:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18345:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18346:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19363:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19364:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getLeftCurlyBracketKeyword_1_1_0()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__TypeNameExpCS__Group_1_1__0__Impl37744); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__TypeNameExpCS__Group_1_1__0__Impl39614); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTypeNameExpCSAccess().getLeftCurlyBracketKeyword_1_1_0()); 
             }
@@ -55160,21 +57628,21 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18359:1: rule__TypeNameExpCS__Group_1_1__1 : rule__TypeNameExpCS__Group_1_1__1__Impl rule__TypeNameExpCS__Group_1_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19377:1: rule__TypeNameExpCS__Group_1_1__1 : rule__TypeNameExpCS__Group_1_1__1__Impl rule__TypeNameExpCS__Group_1_1__2 ;
     public final void rule__TypeNameExpCS__Group_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18363:1: ( rule__TypeNameExpCS__Group_1_1__1__Impl rule__TypeNameExpCS__Group_1_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18364:2: rule__TypeNameExpCS__Group_1_1__1__Impl rule__TypeNameExpCS__Group_1_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19381:1: ( rule__TypeNameExpCS__Group_1_1__1__Impl rule__TypeNameExpCS__Group_1_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19382:2: rule__TypeNameExpCS__Group_1_1__1__Impl rule__TypeNameExpCS__Group_1_1__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__1__Impl_in_rule__TypeNameExpCS__Group_1_1__137775);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__1__Impl_in_rule__TypeNameExpCS__Group_1_1__139645);
             rule__TypeNameExpCS__Group_1_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__2_in_rule__TypeNameExpCS__Group_1_1__137778);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__2_in_rule__TypeNameExpCS__Group_1_1__139648);
             rule__TypeNameExpCS__Group_1_1__2();
 
             state._fsp--;
@@ -55198,25 +57666,25 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18371:1: rule__TypeNameExpCS__Group_1_1__1__Impl : ( ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19389:1: rule__TypeNameExpCS__Group_1_1__1__Impl : ( ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 ) ) ;
     public final void rule__TypeNameExpCS__Group_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18375:1: ( ( ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18376:1: ( ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19393:1: ( ( ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19394:1: ( ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18376:1: ( ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18377:1: ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19394:1: ( ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19395:1: ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getOwnedPatternGuardAssignment_1_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18378:1: ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18378:2: rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19396:1: ( rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19396:2: rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1_in_rule__TypeNameExpCS__Group_1_1__1__Impl37805);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1_in_rule__TypeNameExpCS__Group_1_1__1__Impl39675);
             rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1();
 
             state._fsp--;
@@ -55249,16 +57717,16 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18388:1: rule__TypeNameExpCS__Group_1_1__2 : rule__TypeNameExpCS__Group_1_1__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19406:1: rule__TypeNameExpCS__Group_1_1__2 : rule__TypeNameExpCS__Group_1_1__2__Impl ;
     public final void rule__TypeNameExpCS__Group_1_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18392:1: ( rule__TypeNameExpCS__Group_1_1__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18393:2: rule__TypeNameExpCS__Group_1_1__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19410:1: ( rule__TypeNameExpCS__Group_1_1__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19411:2: rule__TypeNameExpCS__Group_1_1__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__2__Impl_in_rule__TypeNameExpCS__Group_1_1__237835);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeNameExpCS__Group_1_1__2__Impl_in_rule__TypeNameExpCS__Group_1_1__239705);
             rule__TypeNameExpCS__Group_1_1__2__Impl();
 
             state._fsp--;
@@ -55282,22 +57750,22 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__Group_1_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18399:1: rule__TypeNameExpCS__Group_1_1__2__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19417:1: rule__TypeNameExpCS__Group_1_1__2__Impl : ( '}' ) ;
     public final void rule__TypeNameExpCS__Group_1_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18403:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18404:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19421:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19422:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18404:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18405:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19422:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19423:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getRightCurlyBracketKeyword_1_1_2()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__TypeNameExpCS__Group_1_1__2__Impl37863); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__TypeNameExpCS__Group_1_1__2__Impl39733); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTypeNameExpCSAccess().getRightCurlyBracketKeyword_1_1_2()); 
             }
@@ -55323,21 +57791,21 @@
 
 
     // $ANTLR start "rule__TypeExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18424:1: rule__TypeExpCS__Group__0 : rule__TypeExpCS__Group__0__Impl rule__TypeExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19442:1: rule__TypeExpCS__Group__0 : rule__TypeExpCS__Group__0__Impl rule__TypeExpCS__Group__1 ;
     public final void rule__TypeExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18428:1: ( rule__TypeExpCS__Group__0__Impl rule__TypeExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18429:2: rule__TypeExpCS__Group__0__Impl rule__TypeExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19446:1: ( rule__TypeExpCS__Group__0__Impl rule__TypeExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19447:2: rule__TypeExpCS__Group__0__Impl rule__TypeExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__Group__0__Impl_in_rule__TypeExpCS__Group__037900);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__Group__0__Impl_in_rule__TypeExpCS__Group__039770);
             rule__TypeExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__Group__1_in_rule__TypeExpCS__Group__037903);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__Group__1_in_rule__TypeExpCS__Group__039773);
             rule__TypeExpCS__Group__1();
 
             state._fsp--;
@@ -55361,25 +57829,25 @@
 
 
     // $ANTLR start "rule__TypeExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18436:1: rule__TypeExpCS__Group__0__Impl : ( ( rule__TypeExpCS__Alternatives_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19454:1: rule__TypeExpCS__Group__0__Impl : ( ( rule__TypeExpCS__Alternatives_0 ) ) ;
     public final void rule__TypeExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18440:1: ( ( ( rule__TypeExpCS__Alternatives_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18441:1: ( ( rule__TypeExpCS__Alternatives_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19458:1: ( ( ( rule__TypeExpCS__Alternatives_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19459:1: ( ( rule__TypeExpCS__Alternatives_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18441:1: ( ( rule__TypeExpCS__Alternatives_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18442:1: ( rule__TypeExpCS__Alternatives_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19459:1: ( ( rule__TypeExpCS__Alternatives_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19460:1: ( rule__TypeExpCS__Alternatives_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeExpCSAccess().getAlternatives_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18443:1: ( rule__TypeExpCS__Alternatives_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18443:2: rule__TypeExpCS__Alternatives_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19461:1: ( rule__TypeExpCS__Alternatives_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19461:2: rule__TypeExpCS__Alternatives_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__Alternatives_0_in_rule__TypeExpCS__Group__0__Impl37930);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__Alternatives_0_in_rule__TypeExpCS__Group__0__Impl39800);
             rule__TypeExpCS__Alternatives_0();
 
             state._fsp--;
@@ -55412,16 +57880,16 @@
 
 
     // $ANTLR start "rule__TypeExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18453:1: rule__TypeExpCS__Group__1 : rule__TypeExpCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19471:1: rule__TypeExpCS__Group__1 : rule__TypeExpCS__Group__1__Impl ;
     public final void rule__TypeExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18457:1: ( rule__TypeExpCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18458:2: rule__TypeExpCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19475:1: ( rule__TypeExpCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19476:2: rule__TypeExpCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__Group__1__Impl_in_rule__TypeExpCS__Group__137960);
+            pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__Group__1__Impl_in_rule__TypeExpCS__Group__139830);
             rule__TypeExpCS__Group__1__Impl();
 
             state._fsp--;
@@ -55445,33 +57913,33 @@
 
 
     // $ANTLR start "rule__TypeExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18464:1: rule__TypeExpCS__Group__1__Impl : ( ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19482:1: rule__TypeExpCS__Group__1__Impl : ( ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )? ) ;
     public final void rule__TypeExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18468:1: ( ( ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18469:1: ( ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19486:1: ( ( ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19487:1: ( ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18469:1: ( ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18470:1: ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19487:1: ( ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19488:1: ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeExpCSAccess().getOwnedMultiplicityAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18471:1: ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )?
-            int alt196=2;
-            int LA196_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19489:1: ( rule__TypeExpCS__OwnedMultiplicityAssignment_1 )?
+            int alt224=2;
+            int LA224_0 = input.LA(1);
 
-            if ( (LA196_0==109) ) {
-                alt196=1;
+            if ( (LA224_0==118) ) {
+                alt224=1;
             }
-            switch (alt196) {
+            switch (alt224) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18471:2: rule__TypeExpCS__OwnedMultiplicityAssignment_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19489:2: rule__TypeExpCS__OwnedMultiplicityAssignment_1
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__OwnedMultiplicityAssignment_1_in_rule__TypeExpCS__Group__1__Impl37987);
+                    pushFollow(FollowSets001.FOLLOW_rule__TypeExpCS__OwnedMultiplicityAssignment_1_in_rule__TypeExpCS__Group__1__Impl39857);
                     rule__TypeExpCS__OwnedMultiplicityAssignment_1();
 
                     state._fsp--;
@@ -55507,21 +57975,21 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18485:1: rule__ExpCS__Group_0__0 : rule__ExpCS__Group_0__0__Impl rule__ExpCS__Group_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19503:1: rule__ExpCS__Group_0__0 : rule__ExpCS__Group_0__0__Impl rule__ExpCS__Group_0__1 ;
     public final void rule__ExpCS__Group_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18489:1: ( rule__ExpCS__Group_0__0__Impl rule__ExpCS__Group_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18490:2: rule__ExpCS__Group_0__0__Impl rule__ExpCS__Group_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19507:1: ( rule__ExpCS__Group_0__0__Impl rule__ExpCS__Group_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19508:2: rule__ExpCS__Group_0__0__Impl rule__ExpCS__Group_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0__0__Impl_in_rule__ExpCS__Group_0__038022);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0__0__Impl_in_rule__ExpCS__Group_0__039892);
             rule__ExpCS__Group_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0__1_in_rule__ExpCS__Group_0__038025);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0__1_in_rule__ExpCS__Group_0__039895);
             rule__ExpCS__Group_0__1();
 
             state._fsp--;
@@ -55545,22 +58013,22 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18497:1: rule__ExpCS__Group_0__0__Impl : ( rulePrefixedPrimaryExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19515:1: rule__ExpCS__Group_0__0__Impl : ( rulePrefixedPrimaryExpCS ) ;
     public final void rule__ExpCS__Group_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18501:1: ( ( rulePrefixedPrimaryExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18502:1: ( rulePrefixedPrimaryExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19519:1: ( ( rulePrefixedPrimaryExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19520:1: ( rulePrefixedPrimaryExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18502:1: ( rulePrefixedPrimaryExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18503:1: rulePrefixedPrimaryExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19520:1: ( rulePrefixedPrimaryExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19521:1: rulePrefixedPrimaryExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getExpCSAccess().getPrefixedPrimaryExpCSParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets001.FOLLOW_rulePrefixedPrimaryExpCS_in_rule__ExpCS__Group_0__0__Impl38052);
+            pushFollow(FollowSets001.FOLLOW_rulePrefixedPrimaryExpCS_in_rule__ExpCS__Group_0__0__Impl39922);
             rulePrefixedPrimaryExpCS();
 
             state._fsp--;
@@ -55590,16 +58058,16 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18514:1: rule__ExpCS__Group_0__1 : rule__ExpCS__Group_0__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19532:1: rule__ExpCS__Group_0__1 : rule__ExpCS__Group_0__1__Impl ;
     public final void rule__ExpCS__Group_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18518:1: ( rule__ExpCS__Group_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18519:2: rule__ExpCS__Group_0__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19536:1: ( rule__ExpCS__Group_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19537:2: rule__ExpCS__Group_0__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0__1__Impl_in_rule__ExpCS__Group_0__138081);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0__1__Impl_in_rule__ExpCS__Group_0__139951);
             rule__ExpCS__Group_0__1__Impl();
 
             state._fsp--;
@@ -55623,33 +58091,33 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18525:1: rule__ExpCS__Group_0__1__Impl : ( ( rule__ExpCS__Group_0_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19543:1: rule__ExpCS__Group_0__1__Impl : ( ( rule__ExpCS__Group_0_1__0 )? ) ;
     public final void rule__ExpCS__Group_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18529:1: ( ( ( rule__ExpCS__Group_0_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18530:1: ( ( rule__ExpCS__Group_0_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19547:1: ( ( ( rule__ExpCS__Group_0_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19548:1: ( ( rule__ExpCS__Group_0_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18530:1: ( ( rule__ExpCS__Group_0_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18531:1: ( rule__ExpCS__Group_0_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19548:1: ( ( rule__ExpCS__Group_0_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19549:1: ( rule__ExpCS__Group_0_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getExpCSAccess().getGroup_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18532:1: ( rule__ExpCS__Group_0_1__0 )?
-            int alt197=2;
-            int LA197_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19550:1: ( rule__ExpCS__Group_0_1__0 )?
+            int alt225=2;
+            int LA225_0 = input.LA(1);
 
-            if ( (LA197_0==61||(LA197_0>=63 && LA197_0<=79)) ) {
-                alt197=1;
+            if ( (LA225_0==70||(LA225_0>=72 && LA225_0<=88)) ) {
+                alt225=1;
             }
-            switch (alt197) {
+            switch (alt225) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18532:2: rule__ExpCS__Group_0_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19550:2: rule__ExpCS__Group_0_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__0_in_rule__ExpCS__Group_0__1__Impl38108);
+                    pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__0_in_rule__ExpCS__Group_0__1__Impl39978);
                     rule__ExpCS__Group_0_1__0();
 
                     state._fsp--;
@@ -55685,21 +58153,21 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18546:1: rule__ExpCS__Group_0_1__0 : rule__ExpCS__Group_0_1__0__Impl rule__ExpCS__Group_0_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19564:1: rule__ExpCS__Group_0_1__0 : rule__ExpCS__Group_0_1__0__Impl rule__ExpCS__Group_0_1__1 ;
     public final void rule__ExpCS__Group_0_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18550:1: ( rule__ExpCS__Group_0_1__0__Impl rule__ExpCS__Group_0_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18551:2: rule__ExpCS__Group_0_1__0__Impl rule__ExpCS__Group_0_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19568:1: ( rule__ExpCS__Group_0_1__0__Impl rule__ExpCS__Group_0_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19569:2: rule__ExpCS__Group_0_1__0__Impl rule__ExpCS__Group_0_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__0__Impl_in_rule__ExpCS__Group_0_1__038143);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__0__Impl_in_rule__ExpCS__Group_0_1__040013);
             rule__ExpCS__Group_0_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__1_in_rule__ExpCS__Group_0_1__038146);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__1_in_rule__ExpCS__Group_0_1__040016);
             rule__ExpCS__Group_0_1__1();
 
             state._fsp--;
@@ -55723,23 +58191,23 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18558:1: rule__ExpCS__Group_0_1__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19576:1: rule__ExpCS__Group_0_1__0__Impl : ( () ) ;
     public final void rule__ExpCS__Group_0_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18562:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18563:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19580:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19581:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18563:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18564:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19581:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19582:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getExpCSAccess().getInfixExpCSOwnedLeftAction_0_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18565:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18567:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19583:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19585:1: 
             {
             }
 
@@ -55764,21 +58232,21 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18577:1: rule__ExpCS__Group_0_1__1 : rule__ExpCS__Group_0_1__1__Impl rule__ExpCS__Group_0_1__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19595:1: rule__ExpCS__Group_0_1__1 : rule__ExpCS__Group_0_1__1__Impl rule__ExpCS__Group_0_1__2 ;
     public final void rule__ExpCS__Group_0_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18581:1: ( rule__ExpCS__Group_0_1__1__Impl rule__ExpCS__Group_0_1__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18582:2: rule__ExpCS__Group_0_1__1__Impl rule__ExpCS__Group_0_1__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19599:1: ( rule__ExpCS__Group_0_1__1__Impl rule__ExpCS__Group_0_1__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19600:2: rule__ExpCS__Group_0_1__1__Impl rule__ExpCS__Group_0_1__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__1__Impl_in_rule__ExpCS__Group_0_1__138204);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__1__Impl_in_rule__ExpCS__Group_0_1__140074);
             rule__ExpCS__Group_0_1__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__2_in_rule__ExpCS__Group_0_1__138207);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__2_in_rule__ExpCS__Group_0_1__140077);
             rule__ExpCS__Group_0_1__2();
 
             state._fsp--;
@@ -55802,25 +58270,25 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18589:1: rule__ExpCS__Group_0_1__1__Impl : ( ( rule__ExpCS__NameAssignment_0_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19607:1: rule__ExpCS__Group_0_1__1__Impl : ( ( rule__ExpCS__NameAssignment_0_1_1 ) ) ;
     public final void rule__ExpCS__Group_0_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18593:1: ( ( ( rule__ExpCS__NameAssignment_0_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18594:1: ( ( rule__ExpCS__NameAssignment_0_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19611:1: ( ( ( rule__ExpCS__NameAssignment_0_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19612:1: ( ( rule__ExpCS__NameAssignment_0_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18594:1: ( ( rule__ExpCS__NameAssignment_0_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18595:1: ( rule__ExpCS__NameAssignment_0_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19612:1: ( ( rule__ExpCS__NameAssignment_0_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19613:1: ( rule__ExpCS__NameAssignment_0_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getExpCSAccess().getNameAssignment_0_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18596:1: ( rule__ExpCS__NameAssignment_0_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18596:2: rule__ExpCS__NameAssignment_0_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19614:1: ( rule__ExpCS__NameAssignment_0_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19614:2: rule__ExpCS__NameAssignment_0_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__NameAssignment_0_1_1_in_rule__ExpCS__Group_0_1__1__Impl38234);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__NameAssignment_0_1_1_in_rule__ExpCS__Group_0_1__1__Impl40104);
             rule__ExpCS__NameAssignment_0_1_1();
 
             state._fsp--;
@@ -55853,16 +58321,16 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0_1__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18606:1: rule__ExpCS__Group_0_1__2 : rule__ExpCS__Group_0_1__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19624:1: rule__ExpCS__Group_0_1__2 : rule__ExpCS__Group_0_1__2__Impl ;
     public final void rule__ExpCS__Group_0_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18610:1: ( rule__ExpCS__Group_0_1__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18611:2: rule__ExpCS__Group_0_1__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19628:1: ( rule__ExpCS__Group_0_1__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19629:2: rule__ExpCS__Group_0_1__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__2__Impl_in_rule__ExpCS__Group_0_1__238264);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__Group_0_1__2__Impl_in_rule__ExpCS__Group_0_1__240134);
             rule__ExpCS__Group_0_1__2__Impl();
 
             state._fsp--;
@@ -55886,25 +58354,25 @@
 
 
     // $ANTLR start "rule__ExpCS__Group_0_1__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18617:1: rule__ExpCS__Group_0_1__2__Impl : ( ( rule__ExpCS__OwnedRightAssignment_0_1_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19635:1: rule__ExpCS__Group_0_1__2__Impl : ( ( rule__ExpCS__OwnedRightAssignment_0_1_2 ) ) ;
     public final void rule__ExpCS__Group_0_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18621:1: ( ( ( rule__ExpCS__OwnedRightAssignment_0_1_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18622:1: ( ( rule__ExpCS__OwnedRightAssignment_0_1_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19639:1: ( ( ( rule__ExpCS__OwnedRightAssignment_0_1_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19640:1: ( ( rule__ExpCS__OwnedRightAssignment_0_1_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18622:1: ( ( rule__ExpCS__OwnedRightAssignment_0_1_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18623:1: ( rule__ExpCS__OwnedRightAssignment_0_1_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19640:1: ( ( rule__ExpCS__OwnedRightAssignment_0_1_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19641:1: ( rule__ExpCS__OwnedRightAssignment_0_1_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getExpCSAccess().getOwnedRightAssignment_0_1_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18624:1: ( rule__ExpCS__OwnedRightAssignment_0_1_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18624:2: rule__ExpCS__OwnedRightAssignment_0_1_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19642:1: ( rule__ExpCS__OwnedRightAssignment_0_1_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19642:2: rule__ExpCS__OwnedRightAssignment_0_1_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__OwnedRightAssignment_0_1_2_in_rule__ExpCS__Group_0_1__2__Impl38291);
+            pushFollow(FollowSets001.FOLLOW_rule__ExpCS__OwnedRightAssignment_0_1_2_in_rule__ExpCS__Group_0_1__2__Impl40161);
             rule__ExpCS__OwnedRightAssignment_0_1_2();
 
             state._fsp--;
@@ -55937,21 +58405,21 @@
 
 
     // $ANTLR start "rule__PrefixedLetExpCS__Group_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18640:1: rule__PrefixedLetExpCS__Group_0__0 : rule__PrefixedLetExpCS__Group_0__0__Impl rule__PrefixedLetExpCS__Group_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19658:1: rule__PrefixedLetExpCS__Group_0__0 : rule__PrefixedLetExpCS__Group_0__0__Impl rule__PrefixedLetExpCS__Group_0__1 ;
     public final void rule__PrefixedLetExpCS__Group_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18644:1: ( rule__PrefixedLetExpCS__Group_0__0__Impl rule__PrefixedLetExpCS__Group_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18645:2: rule__PrefixedLetExpCS__Group_0__0__Impl rule__PrefixedLetExpCS__Group_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19662:1: ( rule__PrefixedLetExpCS__Group_0__0__Impl rule__PrefixedLetExpCS__Group_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19663:2: rule__PrefixedLetExpCS__Group_0__0__Impl rule__PrefixedLetExpCS__Group_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__0__Impl_in_rule__PrefixedLetExpCS__Group_0__038327);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__0__Impl_in_rule__PrefixedLetExpCS__Group_0__040197);
             rule__PrefixedLetExpCS__Group_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__1_in_rule__PrefixedLetExpCS__Group_0__038330);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__1_in_rule__PrefixedLetExpCS__Group_0__040200);
             rule__PrefixedLetExpCS__Group_0__1();
 
             state._fsp--;
@@ -55975,23 +58443,23 @@
 
 
     // $ANTLR start "rule__PrefixedLetExpCS__Group_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18652:1: rule__PrefixedLetExpCS__Group_0__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19670:1: rule__PrefixedLetExpCS__Group_0__0__Impl : ( () ) ;
     public final void rule__PrefixedLetExpCS__Group_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18656:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18657:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19674:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19675:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18657:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18658:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19675:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19676:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedLetExpCSAccess().getPrefixExpCSAction_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18659:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18661:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19677:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19679:1: 
             {
             }
 
@@ -56016,21 +58484,21 @@
 
 
     // $ANTLR start "rule__PrefixedLetExpCS__Group_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18671:1: rule__PrefixedLetExpCS__Group_0__1 : rule__PrefixedLetExpCS__Group_0__1__Impl rule__PrefixedLetExpCS__Group_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19689:1: rule__PrefixedLetExpCS__Group_0__1 : rule__PrefixedLetExpCS__Group_0__1__Impl rule__PrefixedLetExpCS__Group_0__2 ;
     public final void rule__PrefixedLetExpCS__Group_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18675:1: ( rule__PrefixedLetExpCS__Group_0__1__Impl rule__PrefixedLetExpCS__Group_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18676:2: rule__PrefixedLetExpCS__Group_0__1__Impl rule__PrefixedLetExpCS__Group_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19693:1: ( rule__PrefixedLetExpCS__Group_0__1__Impl rule__PrefixedLetExpCS__Group_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19694:2: rule__PrefixedLetExpCS__Group_0__1__Impl rule__PrefixedLetExpCS__Group_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__1__Impl_in_rule__PrefixedLetExpCS__Group_0__138388);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__1__Impl_in_rule__PrefixedLetExpCS__Group_0__140258);
             rule__PrefixedLetExpCS__Group_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__2_in_rule__PrefixedLetExpCS__Group_0__138391);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__2_in_rule__PrefixedLetExpCS__Group_0__140261);
             rule__PrefixedLetExpCS__Group_0__2();
 
             state._fsp--;
@@ -56054,25 +58522,25 @@
 
 
     // $ANTLR start "rule__PrefixedLetExpCS__Group_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18683:1: rule__PrefixedLetExpCS__Group_0__1__Impl : ( ( rule__PrefixedLetExpCS__NameAssignment_0_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19701:1: rule__PrefixedLetExpCS__Group_0__1__Impl : ( ( rule__PrefixedLetExpCS__NameAssignment_0_1 ) ) ;
     public final void rule__PrefixedLetExpCS__Group_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18687:1: ( ( ( rule__PrefixedLetExpCS__NameAssignment_0_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18688:1: ( ( rule__PrefixedLetExpCS__NameAssignment_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19705:1: ( ( ( rule__PrefixedLetExpCS__NameAssignment_0_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19706:1: ( ( rule__PrefixedLetExpCS__NameAssignment_0_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18688:1: ( ( rule__PrefixedLetExpCS__NameAssignment_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18689:1: ( rule__PrefixedLetExpCS__NameAssignment_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19706:1: ( ( rule__PrefixedLetExpCS__NameAssignment_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19707:1: ( rule__PrefixedLetExpCS__NameAssignment_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedLetExpCSAccess().getNameAssignment_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18690:1: ( rule__PrefixedLetExpCS__NameAssignment_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18690:2: rule__PrefixedLetExpCS__NameAssignment_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19708:1: ( rule__PrefixedLetExpCS__NameAssignment_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19708:2: rule__PrefixedLetExpCS__NameAssignment_0_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__NameAssignment_0_1_in_rule__PrefixedLetExpCS__Group_0__1__Impl38418);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__NameAssignment_0_1_in_rule__PrefixedLetExpCS__Group_0__1__Impl40288);
             rule__PrefixedLetExpCS__NameAssignment_0_1();
 
             state._fsp--;
@@ -56105,16 +58573,16 @@
 
 
     // $ANTLR start "rule__PrefixedLetExpCS__Group_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18700:1: rule__PrefixedLetExpCS__Group_0__2 : rule__PrefixedLetExpCS__Group_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19718:1: rule__PrefixedLetExpCS__Group_0__2 : rule__PrefixedLetExpCS__Group_0__2__Impl ;
     public final void rule__PrefixedLetExpCS__Group_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18704:1: ( rule__PrefixedLetExpCS__Group_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18705:2: rule__PrefixedLetExpCS__Group_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19722:1: ( rule__PrefixedLetExpCS__Group_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19723:2: rule__PrefixedLetExpCS__Group_0__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__2__Impl_in_rule__PrefixedLetExpCS__Group_0__238448);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__Group_0__2__Impl_in_rule__PrefixedLetExpCS__Group_0__240318);
             rule__PrefixedLetExpCS__Group_0__2__Impl();
 
             state._fsp--;
@@ -56138,25 +58606,25 @@
 
 
     // $ANTLR start "rule__PrefixedLetExpCS__Group_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18711:1: rule__PrefixedLetExpCS__Group_0__2__Impl : ( ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19729:1: rule__PrefixedLetExpCS__Group_0__2__Impl : ( ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 ) ) ;
     public final void rule__PrefixedLetExpCS__Group_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18715:1: ( ( ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18716:1: ( ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19733:1: ( ( ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19734:1: ( ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18716:1: ( ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18717:1: ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19734:1: ( ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19735:1: ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedLetExpCSAccess().getOwnedRightAssignment_0_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18718:1: ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18718:2: rule__PrefixedLetExpCS__OwnedRightAssignment_0_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19736:1: ( rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19736:2: rule__PrefixedLetExpCS__OwnedRightAssignment_0_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__OwnedRightAssignment_0_2_in_rule__PrefixedLetExpCS__Group_0__2__Impl38475);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedLetExpCS__OwnedRightAssignment_0_2_in_rule__PrefixedLetExpCS__Group_0__2__Impl40345);
             rule__PrefixedLetExpCS__OwnedRightAssignment_0_2();
 
             state._fsp--;
@@ -56189,21 +58657,21 @@
 
 
     // $ANTLR start "rule__PrefixedPrimaryExpCS__Group_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18734:1: rule__PrefixedPrimaryExpCS__Group_0__0 : rule__PrefixedPrimaryExpCS__Group_0__0__Impl rule__PrefixedPrimaryExpCS__Group_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19752:1: rule__PrefixedPrimaryExpCS__Group_0__0 : rule__PrefixedPrimaryExpCS__Group_0__0__Impl rule__PrefixedPrimaryExpCS__Group_0__1 ;
     public final void rule__PrefixedPrimaryExpCS__Group_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18738:1: ( rule__PrefixedPrimaryExpCS__Group_0__0__Impl rule__PrefixedPrimaryExpCS__Group_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18739:2: rule__PrefixedPrimaryExpCS__Group_0__0__Impl rule__PrefixedPrimaryExpCS__Group_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19756:1: ( rule__PrefixedPrimaryExpCS__Group_0__0__Impl rule__PrefixedPrimaryExpCS__Group_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19757:2: rule__PrefixedPrimaryExpCS__Group_0__0__Impl rule__PrefixedPrimaryExpCS__Group_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__0__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__038511);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__0__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__040381);
             rule__PrefixedPrimaryExpCS__Group_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__1_in_rule__PrefixedPrimaryExpCS__Group_0__038514);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__1_in_rule__PrefixedPrimaryExpCS__Group_0__040384);
             rule__PrefixedPrimaryExpCS__Group_0__1();
 
             state._fsp--;
@@ -56227,23 +58695,23 @@
 
 
     // $ANTLR start "rule__PrefixedPrimaryExpCS__Group_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18746:1: rule__PrefixedPrimaryExpCS__Group_0__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19764:1: rule__PrefixedPrimaryExpCS__Group_0__0__Impl : ( () ) ;
     public final void rule__PrefixedPrimaryExpCS__Group_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18750:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18751:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19768:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19769:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18751:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18752:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19769:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19770:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedPrimaryExpCSAccess().getPrefixExpCSAction_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18753:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18755:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19771:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19773:1: 
             {
             }
 
@@ -56268,21 +58736,21 @@
 
 
     // $ANTLR start "rule__PrefixedPrimaryExpCS__Group_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18765:1: rule__PrefixedPrimaryExpCS__Group_0__1 : rule__PrefixedPrimaryExpCS__Group_0__1__Impl rule__PrefixedPrimaryExpCS__Group_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19783:1: rule__PrefixedPrimaryExpCS__Group_0__1 : rule__PrefixedPrimaryExpCS__Group_0__1__Impl rule__PrefixedPrimaryExpCS__Group_0__2 ;
     public final void rule__PrefixedPrimaryExpCS__Group_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18769:1: ( rule__PrefixedPrimaryExpCS__Group_0__1__Impl rule__PrefixedPrimaryExpCS__Group_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18770:2: rule__PrefixedPrimaryExpCS__Group_0__1__Impl rule__PrefixedPrimaryExpCS__Group_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19787:1: ( rule__PrefixedPrimaryExpCS__Group_0__1__Impl rule__PrefixedPrimaryExpCS__Group_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19788:2: rule__PrefixedPrimaryExpCS__Group_0__1__Impl rule__PrefixedPrimaryExpCS__Group_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__1__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__138572);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__1__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__140442);
             rule__PrefixedPrimaryExpCS__Group_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__2_in_rule__PrefixedPrimaryExpCS__Group_0__138575);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__2_in_rule__PrefixedPrimaryExpCS__Group_0__140445);
             rule__PrefixedPrimaryExpCS__Group_0__2();
 
             state._fsp--;
@@ -56306,25 +58774,25 @@
 
 
     // $ANTLR start "rule__PrefixedPrimaryExpCS__Group_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18777:1: rule__PrefixedPrimaryExpCS__Group_0__1__Impl : ( ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19795:1: rule__PrefixedPrimaryExpCS__Group_0__1__Impl : ( ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 ) ) ;
     public final void rule__PrefixedPrimaryExpCS__Group_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18781:1: ( ( ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18782:1: ( ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19799:1: ( ( ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19800:1: ( ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18782:1: ( ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18783:1: ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19800:1: ( ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19801:1: ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedPrimaryExpCSAccess().getNameAssignment_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18784:1: ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18784:2: rule__PrefixedPrimaryExpCS__NameAssignment_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19802:1: ( rule__PrefixedPrimaryExpCS__NameAssignment_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19802:2: rule__PrefixedPrimaryExpCS__NameAssignment_0_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__NameAssignment_0_1_in_rule__PrefixedPrimaryExpCS__Group_0__1__Impl38602);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__NameAssignment_0_1_in_rule__PrefixedPrimaryExpCS__Group_0__1__Impl40472);
             rule__PrefixedPrimaryExpCS__NameAssignment_0_1();
 
             state._fsp--;
@@ -56357,16 +58825,16 @@
 
 
     // $ANTLR start "rule__PrefixedPrimaryExpCS__Group_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18794:1: rule__PrefixedPrimaryExpCS__Group_0__2 : rule__PrefixedPrimaryExpCS__Group_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19812:1: rule__PrefixedPrimaryExpCS__Group_0__2 : rule__PrefixedPrimaryExpCS__Group_0__2__Impl ;
     public final void rule__PrefixedPrimaryExpCS__Group_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18798:1: ( rule__PrefixedPrimaryExpCS__Group_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18799:2: rule__PrefixedPrimaryExpCS__Group_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19816:1: ( rule__PrefixedPrimaryExpCS__Group_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19817:2: rule__PrefixedPrimaryExpCS__Group_0__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__2__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__238632);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__2__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__240502);
             rule__PrefixedPrimaryExpCS__Group_0__2__Impl();
 
             state._fsp--;
@@ -56390,25 +58858,25 @@
 
 
     // $ANTLR start "rule__PrefixedPrimaryExpCS__Group_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18805:1: rule__PrefixedPrimaryExpCS__Group_0__2__Impl : ( ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19823:1: rule__PrefixedPrimaryExpCS__Group_0__2__Impl : ( ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 ) ) ;
     public final void rule__PrefixedPrimaryExpCS__Group_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18809:1: ( ( ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18810:1: ( ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19827:1: ( ( ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19828:1: ( ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18810:1: ( ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18811:1: ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19828:1: ( ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19829:1: ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedPrimaryExpCSAccess().getOwnedRightAssignment_0_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18812:1: ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18812:2: rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19830:1: ( rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19830:2: rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2_in_rule__PrefixedPrimaryExpCS__Group_0__2__Impl38659);
+            pushFollow(FollowSets001.FOLLOW_rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2_in_rule__PrefixedPrimaryExpCS__Group_0__2__Impl40529);
             rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2();
 
             state._fsp--;
@@ -56441,21 +58909,21 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18828:1: rule__NameExpCS__Group__0 : rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19846:1: rule__NameExpCS__Group__0 : rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1 ;
     public final void rule__NameExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18832:1: ( rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18833:2: rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19850:1: ( rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19851:2: rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__0__Impl_in_rule__NameExpCS__Group__038695);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__0__Impl_in_rule__NameExpCS__Group__040565);
             rule__NameExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__1_in_rule__NameExpCS__Group__038698);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__1_in_rule__NameExpCS__Group__040568);
             rule__NameExpCS__Group__1();
 
             state._fsp--;
@@ -56479,25 +58947,25 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18840:1: rule__NameExpCS__Group__0__Impl : ( ( rule__NameExpCS__OwnedPathNameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19858:1: rule__NameExpCS__Group__0__Impl : ( ( rule__NameExpCS__OwnedPathNameAssignment_0 ) ) ;
     public final void rule__NameExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18844:1: ( ( ( rule__NameExpCS__OwnedPathNameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18845:1: ( ( rule__NameExpCS__OwnedPathNameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19862:1: ( ( ( rule__NameExpCS__OwnedPathNameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19863:1: ( ( rule__NameExpCS__OwnedPathNameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18845:1: ( ( rule__NameExpCS__OwnedPathNameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18846:1: ( rule__NameExpCS__OwnedPathNameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19863:1: ( ( rule__NameExpCS__OwnedPathNameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19864:1: ( rule__NameExpCS__OwnedPathNameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getOwnedPathNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18847:1: ( rule__NameExpCS__OwnedPathNameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18847:2: rule__NameExpCS__OwnedPathNameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19865:1: ( rule__NameExpCS__OwnedPathNameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19865:2: rule__NameExpCS__OwnedPathNameAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__OwnedPathNameAssignment_0_in_rule__NameExpCS__Group__0__Impl38725);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__OwnedPathNameAssignment_0_in_rule__NameExpCS__Group__0__Impl40595);
             rule__NameExpCS__OwnedPathNameAssignment_0();
 
             state._fsp--;
@@ -56530,21 +58998,21 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18857:1: rule__NameExpCS__Group__1 : rule__NameExpCS__Group__1__Impl rule__NameExpCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19875:1: rule__NameExpCS__Group__1 : rule__NameExpCS__Group__1__Impl rule__NameExpCS__Group__2 ;
     public final void rule__NameExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18861:1: ( rule__NameExpCS__Group__1__Impl rule__NameExpCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18862:2: rule__NameExpCS__Group__1__Impl rule__NameExpCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19879:1: ( rule__NameExpCS__Group__1__Impl rule__NameExpCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19880:2: rule__NameExpCS__Group__1__Impl rule__NameExpCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__1__Impl_in_rule__NameExpCS__Group__138755);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__1__Impl_in_rule__NameExpCS__Group__140625);
             rule__NameExpCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__2_in_rule__NameExpCS__Group__138758);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__2_in_rule__NameExpCS__Group__140628);
             rule__NameExpCS__Group__2();
 
             state._fsp--;
@@ -56568,37 +59036,37 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18869:1: rule__NameExpCS__Group__1__Impl : ( ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19887:1: rule__NameExpCS__Group__1__Impl : ( ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )* ) ;
     public final void rule__NameExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18873:1: ( ( ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18874:1: ( ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19891:1: ( ( ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19892:1: ( ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18874:1: ( ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18875:1: ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19892:1: ( ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19893:1: ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getOwnedSquareBracketedClausesAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18876:1: ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )*
-            loop198:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19894:1: ( rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 )*
+            loop226:
             do {
-                int alt198=2;
-                int LA198_0 = input.LA(1);
+                int alt226=2;
+                int LA226_0 = input.LA(1);
 
-                if ( (LA198_0==109) ) {
-                    alt198=1;
+                if ( (LA226_0==118) ) {
+                    alt226=1;
                 }
 
 
-                switch (alt198) {
+                switch (alt226) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18876:2: rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19894:2: rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1_in_rule__NameExpCS__Group__1__Impl38785);
+            	    pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1_in_rule__NameExpCS__Group__1__Impl40655);
             	    rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1();
 
             	    state._fsp--;
@@ -56608,7 +59076,7 @@
             	    break;
 
             	default :
-            	    break loop198;
+            	    break loop226;
                 }
             } while (true);
 
@@ -56637,21 +59105,21 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18886:1: rule__NameExpCS__Group__2 : rule__NameExpCS__Group__2__Impl rule__NameExpCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19904:1: rule__NameExpCS__Group__2 : rule__NameExpCS__Group__2__Impl rule__NameExpCS__Group__3 ;
     public final void rule__NameExpCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18890:1: ( rule__NameExpCS__Group__2__Impl rule__NameExpCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18891:2: rule__NameExpCS__Group__2__Impl rule__NameExpCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19908:1: ( rule__NameExpCS__Group__2__Impl rule__NameExpCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19909:2: rule__NameExpCS__Group__2__Impl rule__NameExpCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__2__Impl_in_rule__NameExpCS__Group__238816);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__2__Impl_in_rule__NameExpCS__Group__240686);
             rule__NameExpCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__3_in_rule__NameExpCS__Group__238819);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__3_in_rule__NameExpCS__Group__240689);
             rule__NameExpCS__Group__3();
 
             state._fsp--;
@@ -56675,33 +59143,33 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18898:1: rule__NameExpCS__Group__2__Impl : ( ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19916:1: rule__NameExpCS__Group__2__Impl : ( ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )? ) ;
     public final void rule__NameExpCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18902:1: ( ( ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18903:1: ( ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19920:1: ( ( ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19921:1: ( ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18903:1: ( ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18904:1: ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19921:1: ( ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19922:1: ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getOwnedRoundBracketedClauseAssignment_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18905:1: ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )?
-            int alt199=2;
-            int LA199_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19923:1: ( rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 )?
+            int alt227=2;
+            int LA227_0 = input.LA(1);
 
-            if ( (LA199_0==95) ) {
-                alt199=1;
+            if ( (LA227_0==104) ) {
+                alt227=1;
             }
-            switch (alt199) {
+            switch (alt227) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18905:2: rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19923:2: rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2_in_rule__NameExpCS__Group__2__Impl38846);
+                    pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2_in_rule__NameExpCS__Group__2__Impl40716);
                     rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2();
 
                     state._fsp--;
@@ -56737,21 +59205,21 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18915:1: rule__NameExpCS__Group__3 : rule__NameExpCS__Group__3__Impl rule__NameExpCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19933:1: rule__NameExpCS__Group__3 : rule__NameExpCS__Group__3__Impl rule__NameExpCS__Group__4 ;
     public final void rule__NameExpCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18919:1: ( rule__NameExpCS__Group__3__Impl rule__NameExpCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18920:2: rule__NameExpCS__Group__3__Impl rule__NameExpCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19937:1: ( rule__NameExpCS__Group__3__Impl rule__NameExpCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19938:2: rule__NameExpCS__Group__3__Impl rule__NameExpCS__Group__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__3__Impl_in_rule__NameExpCS__Group__338877);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__3__Impl_in_rule__NameExpCS__Group__340747);
             rule__NameExpCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__4_in_rule__NameExpCS__Group__338880);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__4_in_rule__NameExpCS__Group__340750);
             rule__NameExpCS__Group__4();
 
             state._fsp--;
@@ -56775,33 +59243,33 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18927:1: rule__NameExpCS__Group__3__Impl : ( ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19945:1: rule__NameExpCS__Group__3__Impl : ( ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )? ) ;
     public final void rule__NameExpCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18931:1: ( ( ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18932:1: ( ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19949:1: ( ( ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19950:1: ( ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18932:1: ( ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18933:1: ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19950:1: ( ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19951:1: ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getOwnedCurlyBracketedClauseAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18934:1: ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )?
-            int alt200=2;
-            int LA200_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19952:1: ( rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 )?
+            int alt228=2;
+            int LA228_0 = input.LA(1);
 
-            if ( (LA200_0==99) ) {
-                alt200=1;
+            if ( (LA228_0==108) ) {
+                alt228=1;
             }
-            switch (alt200) {
+            switch (alt228) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18934:2: rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19952:2: rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3_in_rule__NameExpCS__Group__3__Impl38907);
+                    pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3_in_rule__NameExpCS__Group__3__Impl40777);
                     rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3();
 
                     state._fsp--;
@@ -56837,16 +59305,16 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18944:1: rule__NameExpCS__Group__4 : rule__NameExpCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19962:1: rule__NameExpCS__Group__4 : rule__NameExpCS__Group__4__Impl ;
     public final void rule__NameExpCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18948:1: ( rule__NameExpCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18949:2: rule__NameExpCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19966:1: ( rule__NameExpCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19967:2: rule__NameExpCS__Group__4__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__4__Impl_in_rule__NameExpCS__Group__438938);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group__4__Impl_in_rule__NameExpCS__Group__440808);
             rule__NameExpCS__Group__4__Impl();
 
             state._fsp--;
@@ -56870,33 +59338,33 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18955:1: rule__NameExpCS__Group__4__Impl : ( ( rule__NameExpCS__Group_4__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19973:1: rule__NameExpCS__Group__4__Impl : ( ( rule__NameExpCS__Group_4__0 )? ) ;
     public final void rule__NameExpCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18959:1: ( ( ( rule__NameExpCS__Group_4__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18960:1: ( ( rule__NameExpCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19977:1: ( ( ( rule__NameExpCS__Group_4__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19978:1: ( ( rule__NameExpCS__Group_4__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18960:1: ( ( rule__NameExpCS__Group_4__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18961:1: ( rule__NameExpCS__Group_4__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19978:1: ( ( rule__NameExpCS__Group_4__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19979:1: ( rule__NameExpCS__Group_4__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getGroup_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18962:1: ( rule__NameExpCS__Group_4__0 )?
-            int alt201=2;
-            int LA201_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19980:1: ( rule__NameExpCS__Group_4__0 )?
+            int alt229=2;
+            int LA229_0 = input.LA(1);
 
-            if ( (LA201_0==133) ) {
-                alt201=1;
+            if ( (LA229_0==133) ) {
+                alt229=1;
             }
-            switch (alt201) {
+            switch (alt229) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18962:2: rule__NameExpCS__Group_4__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19980:2: rule__NameExpCS__Group_4__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group_4__0_in_rule__NameExpCS__Group__4__Impl38965);
+                    pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group_4__0_in_rule__NameExpCS__Group__4__Impl40835);
                     rule__NameExpCS__Group_4__0();
 
                     state._fsp--;
@@ -56932,21 +59400,21 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group_4__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18982:1: rule__NameExpCS__Group_4__0 : rule__NameExpCS__Group_4__0__Impl rule__NameExpCS__Group_4__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20000:1: rule__NameExpCS__Group_4__0 : rule__NameExpCS__Group_4__0__Impl rule__NameExpCS__Group_4__1 ;
     public final void rule__NameExpCS__Group_4__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18986:1: ( rule__NameExpCS__Group_4__0__Impl rule__NameExpCS__Group_4__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18987:2: rule__NameExpCS__Group_4__0__Impl rule__NameExpCS__Group_4__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20004:1: ( rule__NameExpCS__Group_4__0__Impl rule__NameExpCS__Group_4__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20005:2: rule__NameExpCS__Group_4__0__Impl rule__NameExpCS__Group_4__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group_4__0__Impl_in_rule__NameExpCS__Group_4__039006);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group_4__0__Impl_in_rule__NameExpCS__Group_4__040876);
             rule__NameExpCS__Group_4__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group_4__1_in_rule__NameExpCS__Group_4__039009);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group_4__1_in_rule__NameExpCS__Group_4__040879);
             rule__NameExpCS__Group_4__1();
 
             state._fsp--;
@@ -56970,25 +59438,25 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group_4__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18994:1: rule__NameExpCS__Group_4__0__Impl : ( ( rule__NameExpCS__IsPreAssignment_4_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20012:1: rule__NameExpCS__Group_4__0__Impl : ( ( rule__NameExpCS__IsPreAssignment_4_0 ) ) ;
     public final void rule__NameExpCS__Group_4__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18998:1: ( ( ( rule__NameExpCS__IsPreAssignment_4_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18999:1: ( ( rule__NameExpCS__IsPreAssignment_4_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20016:1: ( ( ( rule__NameExpCS__IsPreAssignment_4_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20017:1: ( ( rule__NameExpCS__IsPreAssignment_4_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:18999:1: ( ( rule__NameExpCS__IsPreAssignment_4_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19000:1: ( rule__NameExpCS__IsPreAssignment_4_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20017:1: ( ( rule__NameExpCS__IsPreAssignment_4_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20018:1: ( rule__NameExpCS__IsPreAssignment_4_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getIsPreAssignment_4_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19001:1: ( rule__NameExpCS__IsPreAssignment_4_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19001:2: rule__NameExpCS__IsPreAssignment_4_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20019:1: ( rule__NameExpCS__IsPreAssignment_4_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20019:2: rule__NameExpCS__IsPreAssignment_4_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__IsPreAssignment_4_0_in_rule__NameExpCS__Group_4__0__Impl39036);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__IsPreAssignment_4_0_in_rule__NameExpCS__Group_4__0__Impl40906);
             rule__NameExpCS__IsPreAssignment_4_0();
 
             state._fsp--;
@@ -57021,16 +59489,16 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group_4__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19011:1: rule__NameExpCS__Group_4__1 : rule__NameExpCS__Group_4__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20029:1: rule__NameExpCS__Group_4__1 : rule__NameExpCS__Group_4__1__Impl ;
     public final void rule__NameExpCS__Group_4__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19015:1: ( rule__NameExpCS__Group_4__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19016:2: rule__NameExpCS__Group_4__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20033:1: ( rule__NameExpCS__Group_4__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20034:2: rule__NameExpCS__Group_4__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group_4__1__Impl_in_rule__NameExpCS__Group_4__139066);
+            pushFollow(FollowSets001.FOLLOW_rule__NameExpCS__Group_4__1__Impl_in_rule__NameExpCS__Group_4__140936);
             rule__NameExpCS__Group_4__1__Impl();
 
             state._fsp--;
@@ -57054,22 +59522,22 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group_4__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19022:1: rule__NameExpCS__Group_4__1__Impl : ( 'pre' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20040:1: rule__NameExpCS__Group_4__1__Impl : ( 'pre' ) ;
     public final void rule__NameExpCS__Group_4__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19026:1: ( ( 'pre' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19027:1: ( 'pre' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20044:1: ( ( 'pre' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20045:1: ( 'pre' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19027:1: ( 'pre' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19028:1: 'pre'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20045:1: ( 'pre' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20046:1: 'pre'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getPreKeyword_4_1()); 
             }
-            match(input,108,FollowSets001.FOLLOW_108_in_rule__NameExpCS__Group_4__1__Impl39094); if (state.failed) return ;
+            match(input,117,FollowSets001.FOLLOW_117_in_rule__NameExpCS__Group_4__1__Impl40964); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNameExpCSAccess().getPreKeyword_4_1()); 
             }
@@ -57095,21 +59563,21 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19045:1: rule__CurlyBracketedClauseCS__Group__0 : rule__CurlyBracketedClauseCS__Group__0__Impl rule__CurlyBracketedClauseCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20063:1: rule__CurlyBracketedClauseCS__Group__0 : rule__CurlyBracketedClauseCS__Group__0__Impl rule__CurlyBracketedClauseCS__Group__1 ;
     public final void rule__CurlyBracketedClauseCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19049:1: ( rule__CurlyBracketedClauseCS__Group__0__Impl rule__CurlyBracketedClauseCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19050:2: rule__CurlyBracketedClauseCS__Group__0__Impl rule__CurlyBracketedClauseCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20067:1: ( rule__CurlyBracketedClauseCS__Group__0__Impl rule__CurlyBracketedClauseCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20068:2: rule__CurlyBracketedClauseCS__Group__0__Impl rule__CurlyBracketedClauseCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__0__Impl_in_rule__CurlyBracketedClauseCS__Group__039129);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__0__Impl_in_rule__CurlyBracketedClauseCS__Group__040999);
             rule__CurlyBracketedClauseCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__1_in_rule__CurlyBracketedClauseCS__Group__039132);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__1_in_rule__CurlyBracketedClauseCS__Group__041002);
             rule__CurlyBracketedClauseCS__Group__1();
 
             state._fsp--;
@@ -57133,23 +59601,23 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19057:1: rule__CurlyBracketedClauseCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20075:1: rule__CurlyBracketedClauseCS__Group__0__Impl : ( () ) ;
     public final void rule__CurlyBracketedClauseCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19061:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19062:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20079:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20080:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19062:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19063:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20080:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20081:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getCurlyBracketedClauseCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19064:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19066:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20082:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20084:1: 
             {
             }
 
@@ -57174,21 +59642,21 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19076:1: rule__CurlyBracketedClauseCS__Group__1 : rule__CurlyBracketedClauseCS__Group__1__Impl rule__CurlyBracketedClauseCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20094:1: rule__CurlyBracketedClauseCS__Group__1 : rule__CurlyBracketedClauseCS__Group__1__Impl rule__CurlyBracketedClauseCS__Group__2 ;
     public final void rule__CurlyBracketedClauseCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19080:1: ( rule__CurlyBracketedClauseCS__Group__1__Impl rule__CurlyBracketedClauseCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19081:2: rule__CurlyBracketedClauseCS__Group__1__Impl rule__CurlyBracketedClauseCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20098:1: ( rule__CurlyBracketedClauseCS__Group__1__Impl rule__CurlyBracketedClauseCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20099:2: rule__CurlyBracketedClauseCS__Group__1__Impl rule__CurlyBracketedClauseCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__1__Impl_in_rule__CurlyBracketedClauseCS__Group__139190);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__1__Impl_in_rule__CurlyBracketedClauseCS__Group__141060);
             rule__CurlyBracketedClauseCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__2_in_rule__CurlyBracketedClauseCS__Group__139193);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__2_in_rule__CurlyBracketedClauseCS__Group__141063);
             rule__CurlyBracketedClauseCS__Group__2();
 
             state._fsp--;
@@ -57212,22 +59680,22 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19088:1: rule__CurlyBracketedClauseCS__Group__1__Impl : ( '{' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20106:1: rule__CurlyBracketedClauseCS__Group__1__Impl : ( '{' ) ;
     public final void rule__CurlyBracketedClauseCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19092:1: ( ( '{' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19093:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20110:1: ( ( '{' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20111:1: ( '{' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19093:1: ( '{' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19094:1: '{'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20111:1: ( '{' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20112:1: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
-            match(input,99,FollowSets001.FOLLOW_99_in_rule__CurlyBracketedClauseCS__Group__1__Impl39221); if (state.failed) return ;
+            match(input,108,FollowSets001.FOLLOW_108_in_rule__CurlyBracketedClauseCS__Group__1__Impl41091); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCurlyBracketedClauseCSAccess().getLeftCurlyBracketKeyword_1()); 
             }
@@ -57253,21 +59721,21 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19107:1: rule__CurlyBracketedClauseCS__Group__2 : rule__CurlyBracketedClauseCS__Group__2__Impl rule__CurlyBracketedClauseCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20125:1: rule__CurlyBracketedClauseCS__Group__2 : rule__CurlyBracketedClauseCS__Group__2__Impl rule__CurlyBracketedClauseCS__Group__3 ;
     public final void rule__CurlyBracketedClauseCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19111:1: ( rule__CurlyBracketedClauseCS__Group__2__Impl rule__CurlyBracketedClauseCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19112:2: rule__CurlyBracketedClauseCS__Group__2__Impl rule__CurlyBracketedClauseCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20129:1: ( rule__CurlyBracketedClauseCS__Group__2__Impl rule__CurlyBracketedClauseCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20130:2: rule__CurlyBracketedClauseCS__Group__2__Impl rule__CurlyBracketedClauseCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__2__Impl_in_rule__CurlyBracketedClauseCS__Group__239252);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__2__Impl_in_rule__CurlyBracketedClauseCS__Group__241122);
             rule__CurlyBracketedClauseCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__3_in_rule__CurlyBracketedClauseCS__Group__239255);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__3_in_rule__CurlyBracketedClauseCS__Group__241125);
             rule__CurlyBracketedClauseCS__Group__3();
 
             state._fsp--;
@@ -57291,25 +59759,25 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19119:1: rule__CurlyBracketedClauseCS__Group__2__Impl : ( ( rule__CurlyBracketedClauseCS__Alternatives_2 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20137:1: rule__CurlyBracketedClauseCS__Group__2__Impl : ( ( rule__CurlyBracketedClauseCS__Alternatives_2 ) ) ;
     public final void rule__CurlyBracketedClauseCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19123:1: ( ( ( rule__CurlyBracketedClauseCS__Alternatives_2 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19124:1: ( ( rule__CurlyBracketedClauseCS__Alternatives_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20141:1: ( ( ( rule__CurlyBracketedClauseCS__Alternatives_2 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20142:1: ( ( rule__CurlyBracketedClauseCS__Alternatives_2 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19124:1: ( ( rule__CurlyBracketedClauseCS__Alternatives_2 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19125:1: ( rule__CurlyBracketedClauseCS__Alternatives_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20142:1: ( ( rule__CurlyBracketedClauseCS__Alternatives_2 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20143:1: ( rule__CurlyBracketedClauseCS__Alternatives_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getAlternatives_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19126:1: ( rule__CurlyBracketedClauseCS__Alternatives_2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19126:2: rule__CurlyBracketedClauseCS__Alternatives_2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20144:1: ( rule__CurlyBracketedClauseCS__Alternatives_2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20144:2: rule__CurlyBracketedClauseCS__Alternatives_2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Alternatives_2_in_rule__CurlyBracketedClauseCS__Group__2__Impl39282);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Alternatives_2_in_rule__CurlyBracketedClauseCS__Group__2__Impl41152);
             rule__CurlyBracketedClauseCS__Alternatives_2();
 
             state._fsp--;
@@ -57342,16 +59810,16 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19136:1: rule__CurlyBracketedClauseCS__Group__3 : rule__CurlyBracketedClauseCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20154:1: rule__CurlyBracketedClauseCS__Group__3 : rule__CurlyBracketedClauseCS__Group__3__Impl ;
     public final void rule__CurlyBracketedClauseCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19140:1: ( rule__CurlyBracketedClauseCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19141:2: rule__CurlyBracketedClauseCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20158:1: ( rule__CurlyBracketedClauseCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20159:2: rule__CurlyBracketedClauseCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__3__Impl_in_rule__CurlyBracketedClauseCS__Group__339312);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group__3__Impl_in_rule__CurlyBracketedClauseCS__Group__341182);
             rule__CurlyBracketedClauseCS__Group__3__Impl();
 
             state._fsp--;
@@ -57375,22 +59843,22 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19147:1: rule__CurlyBracketedClauseCS__Group__3__Impl : ( '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20165:1: rule__CurlyBracketedClauseCS__Group__3__Impl : ( '}' ) ;
     public final void rule__CurlyBracketedClauseCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19151:1: ( ( '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19152:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20169:1: ( ( '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20170:1: ( '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19152:1: ( '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19153:1: '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20170:1: ( '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20171:1: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getRightCurlyBracketKeyword_3()); 
             }
-            match(input,100,FollowSets001.FOLLOW_100_in_rule__CurlyBracketedClauseCS__Group__3__Impl39340); if (state.failed) return ;
+            match(input,109,FollowSets001.FOLLOW_109_in_rule__CurlyBracketedClauseCS__Group__3__Impl41210); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCurlyBracketedClauseCSAccess().getRightCurlyBracketKeyword_3()); 
             }
@@ -57416,21 +59884,21 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group_2_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19174:1: rule__CurlyBracketedClauseCS__Group_2_0__0 : rule__CurlyBracketedClauseCS__Group_2_0__0__Impl rule__CurlyBracketedClauseCS__Group_2_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20192:1: rule__CurlyBracketedClauseCS__Group_2_0__0 : rule__CurlyBracketedClauseCS__Group_2_0__0__Impl rule__CurlyBracketedClauseCS__Group_2_0__1 ;
     public final void rule__CurlyBracketedClauseCS__Group_2_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19178:1: ( rule__CurlyBracketedClauseCS__Group_2_0__0__Impl rule__CurlyBracketedClauseCS__Group_2_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19179:2: rule__CurlyBracketedClauseCS__Group_2_0__0__Impl rule__CurlyBracketedClauseCS__Group_2_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20196:1: ( rule__CurlyBracketedClauseCS__Group_2_0__0__Impl rule__CurlyBracketedClauseCS__Group_2_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20197:2: rule__CurlyBracketedClauseCS__Group_2_0__0__Impl rule__CurlyBracketedClauseCS__Group_2_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__0__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0__039379);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__0__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0__041249);
             rule__CurlyBracketedClauseCS__Group_2_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__1_in_rule__CurlyBracketedClauseCS__Group_2_0__039382);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__1_in_rule__CurlyBracketedClauseCS__Group_2_0__041252);
             rule__CurlyBracketedClauseCS__Group_2_0__1();
 
             state._fsp--;
@@ -57454,25 +59922,25 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group_2_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19186:1: rule__CurlyBracketedClauseCS__Group_2_0__0__Impl : ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20204:1: rule__CurlyBracketedClauseCS__Group_2_0__0__Impl : ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 ) ) ;
     public final void rule__CurlyBracketedClauseCS__Group_2_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19190:1: ( ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19191:1: ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20208:1: ( ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20209:1: ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19191:1: ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19192:1: ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20209:1: ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20210:1: ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getOwnedPartsAssignment_2_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19193:1: ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19193:2: rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20211:1: ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20211:2: rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0_in_rule__CurlyBracketedClauseCS__Group_2_0__0__Impl39409);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0_in_rule__CurlyBracketedClauseCS__Group_2_0__0__Impl41279);
             rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0();
 
             state._fsp--;
@@ -57505,16 +59973,16 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group_2_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19203:1: rule__CurlyBracketedClauseCS__Group_2_0__1 : rule__CurlyBracketedClauseCS__Group_2_0__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20221:1: rule__CurlyBracketedClauseCS__Group_2_0__1 : rule__CurlyBracketedClauseCS__Group_2_0__1__Impl ;
     public final void rule__CurlyBracketedClauseCS__Group_2_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19207:1: ( rule__CurlyBracketedClauseCS__Group_2_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19208:2: rule__CurlyBracketedClauseCS__Group_2_0__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20225:1: ( rule__CurlyBracketedClauseCS__Group_2_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20226:2: rule__CurlyBracketedClauseCS__Group_2_0__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__1__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0__139439);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__1__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0__141309);
             rule__CurlyBracketedClauseCS__Group_2_0__1__Impl();
 
             state._fsp--;
@@ -57538,37 +60006,37 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group_2_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19214:1: rule__CurlyBracketedClauseCS__Group_2_0__1__Impl : ( ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20232:1: rule__CurlyBracketedClauseCS__Group_2_0__1__Impl : ( ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )* ) ;
     public final void rule__CurlyBracketedClauseCS__Group_2_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19218:1: ( ( ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19219:1: ( ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20236:1: ( ( ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20237:1: ( ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19219:1: ( ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19220:1: ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20237:1: ( ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20238:1: ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getGroup_2_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19221:1: ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )*
-            loop202:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20239:1: ( rule__CurlyBracketedClauseCS__Group_2_0_1__0 )*
+            loop230:
             do {
-                int alt202=2;
-                int LA202_0 = input.LA(1);
+                int alt230=2;
+                int LA230_0 = input.LA(1);
 
-                if ( (LA202_0==98) ) {
-                    alt202=1;
+                if ( (LA230_0==107) ) {
+                    alt230=1;
                 }
 
 
-                switch (alt202) {
+                switch (alt230) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19221:2: rule__CurlyBracketedClauseCS__Group_2_0_1__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20239:2: rule__CurlyBracketedClauseCS__Group_2_0_1__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__0_in_rule__CurlyBracketedClauseCS__Group_2_0__1__Impl39466);
+            	    pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__0_in_rule__CurlyBracketedClauseCS__Group_2_0__1__Impl41336);
             	    rule__CurlyBracketedClauseCS__Group_2_0_1__0();
 
             	    state._fsp--;
@@ -57578,7 +60046,7 @@
             	    break;
 
             	default :
-            	    break loop202;
+            	    break loop230;
                 }
             } while (true);
 
@@ -57607,21 +60075,21 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group_2_0_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19235:1: rule__CurlyBracketedClauseCS__Group_2_0_1__0 : rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl rule__CurlyBracketedClauseCS__Group_2_0_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20253:1: rule__CurlyBracketedClauseCS__Group_2_0_1__0 : rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl rule__CurlyBracketedClauseCS__Group_2_0_1__1 ;
     public final void rule__CurlyBracketedClauseCS__Group_2_0_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19239:1: ( rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl rule__CurlyBracketedClauseCS__Group_2_0_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19240:2: rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl rule__CurlyBracketedClauseCS__Group_2_0_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20257:1: ( rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl rule__CurlyBracketedClauseCS__Group_2_0_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20258:2: rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl rule__CurlyBracketedClauseCS__Group_2_0_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0_1__039501);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0_1__041371);
             rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__1_in_rule__CurlyBracketedClauseCS__Group_2_0_1__039504);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__1_in_rule__CurlyBracketedClauseCS__Group_2_0_1__041374);
             rule__CurlyBracketedClauseCS__Group_2_0_1__1();
 
             state._fsp--;
@@ -57645,22 +60113,22 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19247:1: rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20265:1: rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl : ( ',' ) ;
     public final void rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19251:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19252:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20269:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20270:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19252:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19253:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20270:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20271:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getCommaKeyword_2_0_1_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl39532); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl41402); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getCurlyBracketedClauseCSAccess().getCommaKeyword_2_0_1_0()); 
             }
@@ -57686,16 +60154,16 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group_2_0_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19266:1: rule__CurlyBracketedClauseCS__Group_2_0_1__1 : rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20284:1: rule__CurlyBracketedClauseCS__Group_2_0_1__1 : rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl ;
     public final void rule__CurlyBracketedClauseCS__Group_2_0_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19270:1: ( rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19271:2: rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20288:1: ( rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20289:2: rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0_1__139563);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0_1__141433);
             rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl();
 
             state._fsp--;
@@ -57719,25 +60187,25 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19277:1: rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl : ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20295:1: rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl : ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 ) ) ;
     public final void rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19281:1: ( ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19282:1: ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20299:1: ( ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20300:1: ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19282:1: ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19283:1: ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20300:1: ( ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20301:1: ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getOwnedPartsAssignment_2_0_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19284:1: ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19284:2: rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20302:1: ( rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20302:2: rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1_in_rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl39590);
+            pushFollow(FollowSets001.FOLLOW_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1_in_rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl41460);
             rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1();
 
             state._fsp--;
@@ -57770,21 +60238,21 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19298:1: rule__RoundBracketedClauseCS__Group__0 : rule__RoundBracketedClauseCS__Group__0__Impl rule__RoundBracketedClauseCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20316:1: rule__RoundBracketedClauseCS__Group__0 : rule__RoundBracketedClauseCS__Group__0__Impl rule__RoundBracketedClauseCS__Group__1 ;
     public final void rule__RoundBracketedClauseCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19302:1: ( rule__RoundBracketedClauseCS__Group__0__Impl rule__RoundBracketedClauseCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19303:2: rule__RoundBracketedClauseCS__Group__0__Impl rule__RoundBracketedClauseCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20320:1: ( rule__RoundBracketedClauseCS__Group__0__Impl rule__RoundBracketedClauseCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20321:2: rule__RoundBracketedClauseCS__Group__0__Impl rule__RoundBracketedClauseCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__0__Impl_in_rule__RoundBracketedClauseCS__Group__039624);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__0__Impl_in_rule__RoundBracketedClauseCS__Group__041494);
             rule__RoundBracketedClauseCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__1_in_rule__RoundBracketedClauseCS__Group__039627);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__1_in_rule__RoundBracketedClauseCS__Group__041497);
             rule__RoundBracketedClauseCS__Group__1();
 
             state._fsp--;
@@ -57808,23 +60276,23 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19310:1: rule__RoundBracketedClauseCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20328:1: rule__RoundBracketedClauseCS__Group__0__Impl : ( () ) ;
     public final void rule__RoundBracketedClauseCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19314:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19315:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20332:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20333:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19315:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19316:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20333:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20334:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getRoundBracketedClauseCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19317:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19319:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20335:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20337:1: 
             {
             }
 
@@ -57849,21 +60317,21 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19329:1: rule__RoundBracketedClauseCS__Group__1 : rule__RoundBracketedClauseCS__Group__1__Impl rule__RoundBracketedClauseCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20347:1: rule__RoundBracketedClauseCS__Group__1 : rule__RoundBracketedClauseCS__Group__1__Impl rule__RoundBracketedClauseCS__Group__2 ;
     public final void rule__RoundBracketedClauseCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19333:1: ( rule__RoundBracketedClauseCS__Group__1__Impl rule__RoundBracketedClauseCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19334:2: rule__RoundBracketedClauseCS__Group__1__Impl rule__RoundBracketedClauseCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20351:1: ( rule__RoundBracketedClauseCS__Group__1__Impl rule__RoundBracketedClauseCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20352:2: rule__RoundBracketedClauseCS__Group__1__Impl rule__RoundBracketedClauseCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__1__Impl_in_rule__RoundBracketedClauseCS__Group__139685);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__1__Impl_in_rule__RoundBracketedClauseCS__Group__141555);
             rule__RoundBracketedClauseCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__2_in_rule__RoundBracketedClauseCS__Group__139688);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__2_in_rule__RoundBracketedClauseCS__Group__141558);
             rule__RoundBracketedClauseCS__Group__2();
 
             state._fsp--;
@@ -57887,22 +60355,22 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19341:1: rule__RoundBracketedClauseCS__Group__1__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20359:1: rule__RoundBracketedClauseCS__Group__1__Impl : ( '(' ) ;
     public final void rule__RoundBracketedClauseCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19345:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19346:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20363:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20364:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19346:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19347:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20364:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20365:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getLeftParenthesisKeyword_1()); 
             }
-            match(input,95,FollowSets001.FOLLOW_95_in_rule__RoundBracketedClauseCS__Group__1__Impl39716); if (state.failed) return ;
+            match(input,104,FollowSets001.FOLLOW_104_in_rule__RoundBracketedClauseCS__Group__1__Impl41586); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getRoundBracketedClauseCSAccess().getLeftParenthesisKeyword_1()); 
             }
@@ -57928,21 +60396,21 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19360:1: rule__RoundBracketedClauseCS__Group__2 : rule__RoundBracketedClauseCS__Group__2__Impl rule__RoundBracketedClauseCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20378:1: rule__RoundBracketedClauseCS__Group__2 : rule__RoundBracketedClauseCS__Group__2__Impl rule__RoundBracketedClauseCS__Group__3 ;
     public final void rule__RoundBracketedClauseCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19364:1: ( rule__RoundBracketedClauseCS__Group__2__Impl rule__RoundBracketedClauseCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19365:2: rule__RoundBracketedClauseCS__Group__2__Impl rule__RoundBracketedClauseCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20382:1: ( rule__RoundBracketedClauseCS__Group__2__Impl rule__RoundBracketedClauseCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20383:2: rule__RoundBracketedClauseCS__Group__2__Impl rule__RoundBracketedClauseCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__2__Impl_in_rule__RoundBracketedClauseCS__Group__239747);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__2__Impl_in_rule__RoundBracketedClauseCS__Group__241617);
             rule__RoundBracketedClauseCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__3_in_rule__RoundBracketedClauseCS__Group__239750);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__3_in_rule__RoundBracketedClauseCS__Group__241620);
             rule__RoundBracketedClauseCS__Group__3();
 
             state._fsp--;
@@ -57966,33 +60434,33 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19372:1: rule__RoundBracketedClauseCS__Group__2__Impl : ( ( rule__RoundBracketedClauseCS__Group_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20390:1: rule__RoundBracketedClauseCS__Group__2__Impl : ( ( rule__RoundBracketedClauseCS__Group_2__0 )? ) ;
     public final void rule__RoundBracketedClauseCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19376:1: ( ( ( rule__RoundBracketedClauseCS__Group_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19377:1: ( ( rule__RoundBracketedClauseCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20394:1: ( ( ( rule__RoundBracketedClauseCS__Group_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20395:1: ( ( rule__RoundBracketedClauseCS__Group_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19377:1: ( ( rule__RoundBracketedClauseCS__Group_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19378:1: ( rule__RoundBracketedClauseCS__Group_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20395:1: ( ( rule__RoundBracketedClauseCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20396:1: ( rule__RoundBracketedClauseCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19379:1: ( rule__RoundBracketedClauseCS__Group_2__0 )?
-            int alt203=2;
-            int LA203_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20397:1: ( rule__RoundBracketedClauseCS__Group_2__0 )?
+            int alt231=2;
+            int LA231_0 = input.LA(1);
 
-            if ( ((LA203_0>=RULE_INT && LA203_0<=RULE_SINGLE_QUOTED_STRING)||(LA203_0>=RULE_SIMPLE_ID && LA203_0<=RULE_ESCAPED_ID)||(LA203_0>=17 && LA203_0<=52)||(LA203_0>=55 && LA203_0<=63)||(LA203_0>=80 && LA203_0<=93)||LA203_0==95||LA203_0==97||(LA203_0>=105 && LA203_0<=107)||LA203_0==112||(LA203_0>=117 && LA203_0<=118)||(LA203_0>=131 && LA203_0<=132)) ) {
-                alt203=1;
+            if ( ((LA231_0>=RULE_INT && LA231_0<=RULE_SINGLE_QUOTED_STRING)||(LA231_0>=RULE_SIMPLE_ID && LA231_0<=RULE_ESCAPED_ID)||(LA231_0>=17 && LA231_0<=52)||(LA231_0>=64 && LA231_0<=72)||(LA231_0>=89 && LA231_0<=102)||LA231_0==104||LA231_0==106||(LA231_0>=114 && LA231_0<=116)||LA231_0==121||(LA231_0>=126 && LA231_0<=127)||(LA231_0>=131 && LA231_0<=132)) ) {
+                alt231=1;
             }
-            switch (alt203) {
+            switch (alt231) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19379:2: rule__RoundBracketedClauseCS__Group_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20397:2: rule__RoundBracketedClauseCS__Group_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__0_in_rule__RoundBracketedClauseCS__Group__2__Impl39777);
+                    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__0_in_rule__RoundBracketedClauseCS__Group__2__Impl41647);
                     rule__RoundBracketedClauseCS__Group_2__0();
 
                     state._fsp--;
@@ -58028,16 +60496,16 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19389:1: rule__RoundBracketedClauseCS__Group__3 : rule__RoundBracketedClauseCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20407:1: rule__RoundBracketedClauseCS__Group__3 : rule__RoundBracketedClauseCS__Group__3__Impl ;
     public final void rule__RoundBracketedClauseCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19393:1: ( rule__RoundBracketedClauseCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19394:2: rule__RoundBracketedClauseCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20411:1: ( rule__RoundBracketedClauseCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20412:2: rule__RoundBracketedClauseCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__3__Impl_in_rule__RoundBracketedClauseCS__Group__339808);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group__3__Impl_in_rule__RoundBracketedClauseCS__Group__341678);
             rule__RoundBracketedClauseCS__Group__3__Impl();
 
             state._fsp--;
@@ -58061,22 +60529,22 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19400:1: rule__RoundBracketedClauseCS__Group__3__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20418:1: rule__RoundBracketedClauseCS__Group__3__Impl : ( ')' ) ;
     public final void rule__RoundBracketedClauseCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19404:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19405:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20422:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20423:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19405:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19406:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20423:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20424:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getRightParenthesisKeyword_3()); 
             }
-            match(input,96,FollowSets001.FOLLOW_96_in_rule__RoundBracketedClauseCS__Group__3__Impl39836); if (state.failed) return ;
+            match(input,105,FollowSets001.FOLLOW_105_in_rule__RoundBracketedClauseCS__Group__3__Impl41706); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getRoundBracketedClauseCSAccess().getRightParenthesisKeyword_3()); 
             }
@@ -58102,21 +60570,21 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19427:1: rule__RoundBracketedClauseCS__Group_2__0 : rule__RoundBracketedClauseCS__Group_2__0__Impl rule__RoundBracketedClauseCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20445:1: rule__RoundBracketedClauseCS__Group_2__0 : rule__RoundBracketedClauseCS__Group_2__0__Impl rule__RoundBracketedClauseCS__Group_2__1 ;
     public final void rule__RoundBracketedClauseCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19431:1: ( rule__RoundBracketedClauseCS__Group_2__0__Impl rule__RoundBracketedClauseCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19432:2: rule__RoundBracketedClauseCS__Group_2__0__Impl rule__RoundBracketedClauseCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20449:1: ( rule__RoundBracketedClauseCS__Group_2__0__Impl rule__RoundBracketedClauseCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20450:2: rule__RoundBracketedClauseCS__Group_2__0__Impl rule__RoundBracketedClauseCS__Group_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__0__Impl_in_rule__RoundBracketedClauseCS__Group_2__039875);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__0__Impl_in_rule__RoundBracketedClauseCS__Group_2__041745);
             rule__RoundBracketedClauseCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__1_in_rule__RoundBracketedClauseCS__Group_2__039878);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__1_in_rule__RoundBracketedClauseCS__Group_2__041748);
             rule__RoundBracketedClauseCS__Group_2__1();
 
             state._fsp--;
@@ -58140,25 +60608,25 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19439:1: rule__RoundBracketedClauseCS__Group_2__0__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20457:1: rule__RoundBracketedClauseCS__Group_2__0__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 ) ) ;
     public final void rule__RoundBracketedClauseCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19443:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19444:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20461:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20462:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19444:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19445:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20462:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20463:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsAssignment_2_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19446:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19446:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20464:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20464:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0_in_rule__RoundBracketedClauseCS__Group_2__0__Impl39905);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0_in_rule__RoundBracketedClauseCS__Group_2__0__Impl41775);
             rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0();
 
             state._fsp--;
@@ -58191,21 +60659,21 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19456:1: rule__RoundBracketedClauseCS__Group_2__1 : rule__RoundBracketedClauseCS__Group_2__1__Impl rule__RoundBracketedClauseCS__Group_2__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20474:1: rule__RoundBracketedClauseCS__Group_2__1 : rule__RoundBracketedClauseCS__Group_2__1__Impl rule__RoundBracketedClauseCS__Group_2__2 ;
     public final void rule__RoundBracketedClauseCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19460:1: ( rule__RoundBracketedClauseCS__Group_2__1__Impl rule__RoundBracketedClauseCS__Group_2__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19461:2: rule__RoundBracketedClauseCS__Group_2__1__Impl rule__RoundBracketedClauseCS__Group_2__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20478:1: ( rule__RoundBracketedClauseCS__Group_2__1__Impl rule__RoundBracketedClauseCS__Group_2__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20479:2: rule__RoundBracketedClauseCS__Group_2__1__Impl rule__RoundBracketedClauseCS__Group_2__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__1__Impl_in_rule__RoundBracketedClauseCS__Group_2__139935);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__1__Impl_in_rule__RoundBracketedClauseCS__Group_2__141805);
             rule__RoundBracketedClauseCS__Group_2__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__2_in_rule__RoundBracketedClauseCS__Group_2__139938);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__2_in_rule__RoundBracketedClauseCS__Group_2__141808);
             rule__RoundBracketedClauseCS__Group_2__2();
 
             state._fsp--;
@@ -58229,37 +60697,37 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19468:1: rule__RoundBracketedClauseCS__Group_2__1__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20486:1: rule__RoundBracketedClauseCS__Group_2__1__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )* ) ;
     public final void rule__RoundBracketedClauseCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19472:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19473:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20490:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20491:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19473:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19474:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20491:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20492:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsAssignment_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19475:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )*
-            loop204:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20493:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 )*
+            loop232:
             do {
-                int alt204=2;
-                int LA204_0 = input.LA(1);
+                int alt232=2;
+                int LA232_0 = input.LA(1);
 
-                if ( (LA204_0==98) ) {
-                    alt204=1;
+                if ( (LA232_0==107) ) {
+                    alt232=1;
                 }
 
 
-                switch (alt204) {
+                switch (alt232) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19475:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20493:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1_in_rule__RoundBracketedClauseCS__Group_2__1__Impl39965);
+            	    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1_in_rule__RoundBracketedClauseCS__Group_2__1__Impl41835);
             	    rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1();
 
             	    state._fsp--;
@@ -58269,7 +60737,7 @@
             	    break;
 
             	default :
-            	    break loop204;
+            	    break loop232;
                 }
             } while (true);
 
@@ -58298,21 +60766,21 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19485:1: rule__RoundBracketedClauseCS__Group_2__2 : rule__RoundBracketedClauseCS__Group_2__2__Impl rule__RoundBracketedClauseCS__Group_2__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20503:1: rule__RoundBracketedClauseCS__Group_2__2 : rule__RoundBracketedClauseCS__Group_2__2__Impl rule__RoundBracketedClauseCS__Group_2__3 ;
     public final void rule__RoundBracketedClauseCS__Group_2__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19489:1: ( rule__RoundBracketedClauseCS__Group_2__2__Impl rule__RoundBracketedClauseCS__Group_2__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19490:2: rule__RoundBracketedClauseCS__Group_2__2__Impl rule__RoundBracketedClauseCS__Group_2__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20507:1: ( rule__RoundBracketedClauseCS__Group_2__2__Impl rule__RoundBracketedClauseCS__Group_2__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20508:2: rule__RoundBracketedClauseCS__Group_2__2__Impl rule__RoundBracketedClauseCS__Group_2__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__2__Impl_in_rule__RoundBracketedClauseCS__Group_2__239996);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__2__Impl_in_rule__RoundBracketedClauseCS__Group_2__241866);
             rule__RoundBracketedClauseCS__Group_2__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__3_in_rule__RoundBracketedClauseCS__Group_2__239999);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__3_in_rule__RoundBracketedClauseCS__Group_2__241869);
             rule__RoundBracketedClauseCS__Group_2__3();
 
             state._fsp--;
@@ -58336,33 +60804,33 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19497:1: rule__RoundBracketedClauseCS__Group_2__2__Impl : ( ( rule__RoundBracketedClauseCS__Group_2_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20515:1: rule__RoundBracketedClauseCS__Group_2__2__Impl : ( ( rule__RoundBracketedClauseCS__Group_2_2__0 )? ) ;
     public final void rule__RoundBracketedClauseCS__Group_2__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19501:1: ( ( ( rule__RoundBracketedClauseCS__Group_2_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19502:1: ( ( rule__RoundBracketedClauseCS__Group_2_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20519:1: ( ( ( rule__RoundBracketedClauseCS__Group_2_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20520:1: ( ( rule__RoundBracketedClauseCS__Group_2_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19502:1: ( ( rule__RoundBracketedClauseCS__Group_2_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19503:1: ( rule__RoundBracketedClauseCS__Group_2_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20520:1: ( ( rule__RoundBracketedClauseCS__Group_2_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20521:1: ( rule__RoundBracketedClauseCS__Group_2_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getGroup_2_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19504:1: ( rule__RoundBracketedClauseCS__Group_2_2__0 )?
-            int alt205=2;
-            int LA205_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20522:1: ( rule__RoundBracketedClauseCS__Group_2_2__0 )?
+            int alt233=2;
+            int LA233_0 = input.LA(1);
 
-            if ( (LA205_0==53) ) {
-                alt205=1;
+            if ( (LA233_0==53) ) {
+                alt233=1;
             }
-            switch (alt205) {
+            switch (alt233) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19504:2: rule__RoundBracketedClauseCS__Group_2_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20522:2: rule__RoundBracketedClauseCS__Group_2_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__0_in_rule__RoundBracketedClauseCS__Group_2__2__Impl40026);
+                    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__0_in_rule__RoundBracketedClauseCS__Group_2__2__Impl41896);
                     rule__RoundBracketedClauseCS__Group_2_2__0();
 
                     state._fsp--;
@@ -58398,16 +60866,16 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19514:1: rule__RoundBracketedClauseCS__Group_2__3 : rule__RoundBracketedClauseCS__Group_2__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20532:1: rule__RoundBracketedClauseCS__Group_2__3 : rule__RoundBracketedClauseCS__Group_2__3__Impl ;
     public final void rule__RoundBracketedClauseCS__Group_2__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19518:1: ( rule__RoundBracketedClauseCS__Group_2__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19519:2: rule__RoundBracketedClauseCS__Group_2__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20536:1: ( rule__RoundBracketedClauseCS__Group_2__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20537:2: rule__RoundBracketedClauseCS__Group_2__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__3__Impl_in_rule__RoundBracketedClauseCS__Group_2__340057);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2__3__Impl_in_rule__RoundBracketedClauseCS__Group_2__341927);
             rule__RoundBracketedClauseCS__Group_2__3__Impl();
 
             state._fsp--;
@@ -58431,37 +60899,37 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19525:1: rule__RoundBracketedClauseCS__Group_2__3__Impl : ( ( rule__RoundBracketedClauseCS__Group_2_3__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20543:1: rule__RoundBracketedClauseCS__Group_2__3__Impl : ( ( rule__RoundBracketedClauseCS__Group_2_3__0 )* ) ;
     public final void rule__RoundBracketedClauseCS__Group_2__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19529:1: ( ( ( rule__RoundBracketedClauseCS__Group_2_3__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19530:1: ( ( rule__RoundBracketedClauseCS__Group_2_3__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20547:1: ( ( ( rule__RoundBracketedClauseCS__Group_2_3__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20548:1: ( ( rule__RoundBracketedClauseCS__Group_2_3__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19530:1: ( ( rule__RoundBracketedClauseCS__Group_2_3__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19531:1: ( rule__RoundBracketedClauseCS__Group_2_3__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20548:1: ( ( rule__RoundBracketedClauseCS__Group_2_3__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20549:1: ( rule__RoundBracketedClauseCS__Group_2_3__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getGroup_2_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19532:1: ( rule__RoundBracketedClauseCS__Group_2_3__0 )*
-            loop206:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20550:1: ( rule__RoundBracketedClauseCS__Group_2_3__0 )*
+            loop234:
             do {
-                int alt206=2;
-                int LA206_0 = input.LA(1);
+                int alt234=2;
+                int LA234_0 = input.LA(1);
 
-                if ( (LA206_0==134) ) {
-                    alt206=1;
+                if ( (LA234_0==134) ) {
+                    alt234=1;
                 }
 
 
-                switch (alt206) {
+                switch (alt234) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19532:2: rule__RoundBracketedClauseCS__Group_2_3__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20550:2: rule__RoundBracketedClauseCS__Group_2_3__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__0_in_rule__RoundBracketedClauseCS__Group_2__3__Impl40084);
+            	    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__0_in_rule__RoundBracketedClauseCS__Group_2__3__Impl41954);
             	    rule__RoundBracketedClauseCS__Group_2_3__0();
 
             	    state._fsp--;
@@ -58471,7 +60939,7 @@
             	    break;
 
             	default :
-            	    break loop206;
+            	    break loop234;
                 }
             } while (true);
 
@@ -58500,21 +60968,21 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19550:1: rule__RoundBracketedClauseCS__Group_2_2__0 : rule__RoundBracketedClauseCS__Group_2_2__0__Impl rule__RoundBracketedClauseCS__Group_2_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20568:1: rule__RoundBracketedClauseCS__Group_2_2__0 : rule__RoundBracketedClauseCS__Group_2_2__0__Impl rule__RoundBracketedClauseCS__Group_2_2__1 ;
     public final void rule__RoundBracketedClauseCS__Group_2_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19554:1: ( rule__RoundBracketedClauseCS__Group_2_2__0__Impl rule__RoundBracketedClauseCS__Group_2_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19555:2: rule__RoundBracketedClauseCS__Group_2_2__0__Impl rule__RoundBracketedClauseCS__Group_2_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20572:1: ( rule__RoundBracketedClauseCS__Group_2_2__0__Impl rule__RoundBracketedClauseCS__Group_2_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20573:2: rule__RoundBracketedClauseCS__Group_2_2__0__Impl rule__RoundBracketedClauseCS__Group_2_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__0__Impl_in_rule__RoundBracketedClauseCS__Group_2_2__040123);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__0__Impl_in_rule__RoundBracketedClauseCS__Group_2_2__041993);
             rule__RoundBracketedClauseCS__Group_2_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__1_in_rule__RoundBracketedClauseCS__Group_2_2__040126);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__1_in_rule__RoundBracketedClauseCS__Group_2_2__041996);
             rule__RoundBracketedClauseCS__Group_2_2__1();
 
             state._fsp--;
@@ -58538,25 +61006,25 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19562:1: rule__RoundBracketedClauseCS__Group_2_2__0__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20580:1: rule__RoundBracketedClauseCS__Group_2_2__0__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 ) ) ;
     public final void rule__RoundBracketedClauseCS__Group_2_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19566:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19567:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20584:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20585:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19567:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19568:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20585:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20586:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsAssignment_2_2_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19569:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19569:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20587:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20587:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0_in_rule__RoundBracketedClauseCS__Group_2_2__0__Impl40153);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0_in_rule__RoundBracketedClauseCS__Group_2_2__0__Impl42023);
             rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0();
 
             state._fsp--;
@@ -58589,16 +61057,16 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19579:1: rule__RoundBracketedClauseCS__Group_2_2__1 : rule__RoundBracketedClauseCS__Group_2_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20597:1: rule__RoundBracketedClauseCS__Group_2_2__1 : rule__RoundBracketedClauseCS__Group_2_2__1__Impl ;
     public final void rule__RoundBracketedClauseCS__Group_2_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19583:1: ( rule__RoundBracketedClauseCS__Group_2_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19584:2: rule__RoundBracketedClauseCS__Group_2_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20601:1: ( rule__RoundBracketedClauseCS__Group_2_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20602:2: rule__RoundBracketedClauseCS__Group_2_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__1__Impl_in_rule__RoundBracketedClauseCS__Group_2_2__140183);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__1__Impl_in_rule__RoundBracketedClauseCS__Group_2_2__142053);
             rule__RoundBracketedClauseCS__Group_2_2__1__Impl();
 
             state._fsp--;
@@ -58622,37 +61090,37 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19590:1: rule__RoundBracketedClauseCS__Group_2_2__1__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20608:1: rule__RoundBracketedClauseCS__Group_2_2__1__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )* ) ;
     public final void rule__RoundBracketedClauseCS__Group_2_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19594:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19595:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20612:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20613:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19595:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19596:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20613:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20614:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsAssignment_2_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19597:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )*
-            loop207:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20615:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 )*
+            loop235:
             do {
-                int alt207=2;
-                int LA207_0 = input.LA(1);
+                int alt235=2;
+                int LA235_0 = input.LA(1);
 
-                if ( (LA207_0==98) ) {
-                    alt207=1;
+                if ( (LA235_0==107) ) {
+                    alt235=1;
                 }
 
 
-                switch (alt207) {
+                switch (alt235) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19597:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20615:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1_in_rule__RoundBracketedClauseCS__Group_2_2__1__Impl40210);
+            	    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1_in_rule__RoundBracketedClauseCS__Group_2_2__1__Impl42080);
             	    rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1();
 
             	    state._fsp--;
@@ -58662,7 +61130,7 @@
             	    break;
 
             	default :
-            	    break loop207;
+            	    break loop235;
                 }
             } while (true);
 
@@ -58691,21 +61159,21 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2_3__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19611:1: rule__RoundBracketedClauseCS__Group_2_3__0 : rule__RoundBracketedClauseCS__Group_2_3__0__Impl rule__RoundBracketedClauseCS__Group_2_3__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20629:1: rule__RoundBracketedClauseCS__Group_2_3__0 : rule__RoundBracketedClauseCS__Group_2_3__0__Impl rule__RoundBracketedClauseCS__Group_2_3__1 ;
     public final void rule__RoundBracketedClauseCS__Group_2_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19615:1: ( rule__RoundBracketedClauseCS__Group_2_3__0__Impl rule__RoundBracketedClauseCS__Group_2_3__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19616:2: rule__RoundBracketedClauseCS__Group_2_3__0__Impl rule__RoundBracketedClauseCS__Group_2_3__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20633:1: ( rule__RoundBracketedClauseCS__Group_2_3__0__Impl rule__RoundBracketedClauseCS__Group_2_3__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20634:2: rule__RoundBracketedClauseCS__Group_2_3__0__Impl rule__RoundBracketedClauseCS__Group_2_3__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__0__Impl_in_rule__RoundBracketedClauseCS__Group_2_3__040245);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__0__Impl_in_rule__RoundBracketedClauseCS__Group_2_3__042115);
             rule__RoundBracketedClauseCS__Group_2_3__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__1_in_rule__RoundBracketedClauseCS__Group_2_3__040248);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__1_in_rule__RoundBracketedClauseCS__Group_2_3__042118);
             rule__RoundBracketedClauseCS__Group_2_3__1();
 
             state._fsp--;
@@ -58729,25 +61197,25 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2_3__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19623:1: rule__RoundBracketedClauseCS__Group_2_3__0__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20641:1: rule__RoundBracketedClauseCS__Group_2_3__0__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 ) ) ;
     public final void rule__RoundBracketedClauseCS__Group_2_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19627:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19628:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20645:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20646:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19628:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19629:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20646:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20647:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsAssignment_2_3_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19630:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19630:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20648:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20648:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0_in_rule__RoundBracketedClauseCS__Group_2_3__0__Impl40275);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0_in_rule__RoundBracketedClauseCS__Group_2_3__0__Impl42145);
             rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0();
 
             state._fsp--;
@@ -58780,16 +61248,16 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2_3__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19640:1: rule__RoundBracketedClauseCS__Group_2_3__1 : rule__RoundBracketedClauseCS__Group_2_3__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20658:1: rule__RoundBracketedClauseCS__Group_2_3__1 : rule__RoundBracketedClauseCS__Group_2_3__1__Impl ;
     public final void rule__RoundBracketedClauseCS__Group_2_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19644:1: ( rule__RoundBracketedClauseCS__Group_2_3__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19645:2: rule__RoundBracketedClauseCS__Group_2_3__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20662:1: ( rule__RoundBracketedClauseCS__Group_2_3__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20663:2: rule__RoundBracketedClauseCS__Group_2_3__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__1__Impl_in_rule__RoundBracketedClauseCS__Group_2_3__140305);
+            pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__1__Impl_in_rule__RoundBracketedClauseCS__Group_2_3__142175);
             rule__RoundBracketedClauseCS__Group_2_3__1__Impl();
 
             state._fsp--;
@@ -58813,37 +61281,37 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__Group_2_3__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19651:1: rule__RoundBracketedClauseCS__Group_2_3__1__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20669:1: rule__RoundBracketedClauseCS__Group_2_3__1__Impl : ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )* ) ;
     public final void rule__RoundBracketedClauseCS__Group_2_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19655:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19656:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20673:1: ( ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20674:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19656:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19657:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20674:1: ( ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20675:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsAssignment_2_3_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19658:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )*
-            loop208:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20676:1: ( rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 )*
+            loop236:
             do {
-                int alt208=2;
-                int LA208_0 = input.LA(1);
+                int alt236=2;
+                int LA236_0 = input.LA(1);
 
-                if ( (LA208_0==98) ) {
-                    alt208=1;
+                if ( (LA236_0==107) ) {
+                    alt236=1;
                 }
 
 
-                switch (alt208) {
+                switch (alt236) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19658:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20676:2: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1_in_rule__RoundBracketedClauseCS__Group_2_3__1__Impl40332);
+            	    pushFollow(FollowSets001.FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1_in_rule__RoundBracketedClauseCS__Group_2_3__1__Impl42202);
             	    rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1();
 
             	    state._fsp--;
@@ -58853,7 +61321,7 @@
             	    break;
 
             	default :
-            	    break loop208;
+            	    break loop236;
                 }
             } while (true);
 
@@ -58882,21 +61350,21 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19672:1: rule__SquareBracketedClauseCS__Group__0 : rule__SquareBracketedClauseCS__Group__0__Impl rule__SquareBracketedClauseCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20690:1: rule__SquareBracketedClauseCS__Group__0 : rule__SquareBracketedClauseCS__Group__0__Impl rule__SquareBracketedClauseCS__Group__1 ;
     public final void rule__SquareBracketedClauseCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19676:1: ( rule__SquareBracketedClauseCS__Group__0__Impl rule__SquareBracketedClauseCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19677:2: rule__SquareBracketedClauseCS__Group__0__Impl rule__SquareBracketedClauseCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20694:1: ( rule__SquareBracketedClauseCS__Group__0__Impl rule__SquareBracketedClauseCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20695:2: rule__SquareBracketedClauseCS__Group__0__Impl rule__SquareBracketedClauseCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__0__Impl_in_rule__SquareBracketedClauseCS__Group__040367);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__0__Impl_in_rule__SquareBracketedClauseCS__Group__042237);
             rule__SquareBracketedClauseCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__1_in_rule__SquareBracketedClauseCS__Group__040370);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__1_in_rule__SquareBracketedClauseCS__Group__042240);
             rule__SquareBracketedClauseCS__Group__1();
 
             state._fsp--;
@@ -58920,22 +61388,22 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19684:1: rule__SquareBracketedClauseCS__Group__0__Impl : ( '[' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20702:1: rule__SquareBracketedClauseCS__Group__0__Impl : ( '[' ) ;
     public final void rule__SquareBracketedClauseCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19688:1: ( ( '[' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19689:1: ( '[' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20706:1: ( ( '[' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20707:1: ( '[' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19689:1: ( '[' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19690:1: '['
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20707:1: ( '[' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20708:1: '['
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSquareBracketedClauseCSAccess().getLeftSquareBracketKeyword_0()); 
             }
-            match(input,109,FollowSets001.FOLLOW_109_in_rule__SquareBracketedClauseCS__Group__0__Impl40398); if (state.failed) return ;
+            match(input,118,FollowSets001.FOLLOW_118_in_rule__SquareBracketedClauseCS__Group__0__Impl42268); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSquareBracketedClauseCSAccess().getLeftSquareBracketKeyword_0()); 
             }
@@ -58961,21 +61429,21 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19703:1: rule__SquareBracketedClauseCS__Group__1 : rule__SquareBracketedClauseCS__Group__1__Impl rule__SquareBracketedClauseCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20721:1: rule__SquareBracketedClauseCS__Group__1 : rule__SquareBracketedClauseCS__Group__1__Impl rule__SquareBracketedClauseCS__Group__2 ;
     public final void rule__SquareBracketedClauseCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19707:1: ( rule__SquareBracketedClauseCS__Group__1__Impl rule__SquareBracketedClauseCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19708:2: rule__SquareBracketedClauseCS__Group__1__Impl rule__SquareBracketedClauseCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20725:1: ( rule__SquareBracketedClauseCS__Group__1__Impl rule__SquareBracketedClauseCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20726:2: rule__SquareBracketedClauseCS__Group__1__Impl rule__SquareBracketedClauseCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__1__Impl_in_rule__SquareBracketedClauseCS__Group__140429);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__1__Impl_in_rule__SquareBracketedClauseCS__Group__142299);
             rule__SquareBracketedClauseCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__2_in_rule__SquareBracketedClauseCS__Group__140432);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__2_in_rule__SquareBracketedClauseCS__Group__142302);
             rule__SquareBracketedClauseCS__Group__2();
 
             state._fsp--;
@@ -58999,25 +61467,25 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19715:1: rule__SquareBracketedClauseCS__Group__1__Impl : ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20733:1: rule__SquareBracketedClauseCS__Group__1__Impl : ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 ) ) ;
     public final void rule__SquareBracketedClauseCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19719:1: ( ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19720:1: ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20737:1: ( ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20738:1: ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19720:1: ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19721:1: ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20738:1: ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20739:1: ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSquareBracketedClauseCSAccess().getOwnedTermsAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19722:1: ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19722:2: rule__SquareBracketedClauseCS__OwnedTermsAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20740:1: ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20740:2: rule__SquareBracketedClauseCS__OwnedTermsAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__OwnedTermsAssignment_1_in_rule__SquareBracketedClauseCS__Group__1__Impl40459);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__OwnedTermsAssignment_1_in_rule__SquareBracketedClauseCS__Group__1__Impl42329);
             rule__SquareBracketedClauseCS__OwnedTermsAssignment_1();
 
             state._fsp--;
@@ -59050,21 +61518,21 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19732:1: rule__SquareBracketedClauseCS__Group__2 : rule__SquareBracketedClauseCS__Group__2__Impl rule__SquareBracketedClauseCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20750:1: rule__SquareBracketedClauseCS__Group__2 : rule__SquareBracketedClauseCS__Group__2__Impl rule__SquareBracketedClauseCS__Group__3 ;
     public final void rule__SquareBracketedClauseCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19736:1: ( rule__SquareBracketedClauseCS__Group__2__Impl rule__SquareBracketedClauseCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19737:2: rule__SquareBracketedClauseCS__Group__2__Impl rule__SquareBracketedClauseCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20754:1: ( rule__SquareBracketedClauseCS__Group__2__Impl rule__SquareBracketedClauseCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20755:2: rule__SquareBracketedClauseCS__Group__2__Impl rule__SquareBracketedClauseCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__2__Impl_in_rule__SquareBracketedClauseCS__Group__240489);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__2__Impl_in_rule__SquareBracketedClauseCS__Group__242359);
             rule__SquareBracketedClauseCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__3_in_rule__SquareBracketedClauseCS__Group__240492);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__3_in_rule__SquareBracketedClauseCS__Group__242362);
             rule__SquareBracketedClauseCS__Group__3();
 
             state._fsp--;
@@ -59088,37 +61556,37 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19744:1: rule__SquareBracketedClauseCS__Group__2__Impl : ( ( rule__SquareBracketedClauseCS__Group_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20762:1: rule__SquareBracketedClauseCS__Group__2__Impl : ( ( rule__SquareBracketedClauseCS__Group_2__0 )* ) ;
     public final void rule__SquareBracketedClauseCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19748:1: ( ( ( rule__SquareBracketedClauseCS__Group_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19749:1: ( ( rule__SquareBracketedClauseCS__Group_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20766:1: ( ( ( rule__SquareBracketedClauseCS__Group_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20767:1: ( ( rule__SquareBracketedClauseCS__Group_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19749:1: ( ( rule__SquareBracketedClauseCS__Group_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19750:1: ( rule__SquareBracketedClauseCS__Group_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20767:1: ( ( rule__SquareBracketedClauseCS__Group_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20768:1: ( rule__SquareBracketedClauseCS__Group_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSquareBracketedClauseCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19751:1: ( rule__SquareBracketedClauseCS__Group_2__0 )*
-            loop209:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20769:1: ( rule__SquareBracketedClauseCS__Group_2__0 )*
+            loop237:
             do {
-                int alt209=2;
-                int LA209_0 = input.LA(1);
+                int alt237=2;
+                int LA237_0 = input.LA(1);
 
-                if ( (LA209_0==98) ) {
-                    alt209=1;
+                if ( (LA237_0==107) ) {
+                    alt237=1;
                 }
 
 
-                switch (alt209) {
+                switch (alt237) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19751:2: rule__SquareBracketedClauseCS__Group_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20769:2: rule__SquareBracketedClauseCS__Group_2__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group_2__0_in_rule__SquareBracketedClauseCS__Group__2__Impl40519);
+            	    pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group_2__0_in_rule__SquareBracketedClauseCS__Group__2__Impl42389);
             	    rule__SquareBracketedClauseCS__Group_2__0();
 
             	    state._fsp--;
@@ -59128,7 +61596,7 @@
             	    break;
 
             	default :
-            	    break loop209;
+            	    break loop237;
                 }
             } while (true);
 
@@ -59157,16 +61625,16 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19761:1: rule__SquareBracketedClauseCS__Group__3 : rule__SquareBracketedClauseCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20779:1: rule__SquareBracketedClauseCS__Group__3 : rule__SquareBracketedClauseCS__Group__3__Impl ;
     public final void rule__SquareBracketedClauseCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19765:1: ( rule__SquareBracketedClauseCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19766:2: rule__SquareBracketedClauseCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20783:1: ( rule__SquareBracketedClauseCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20784:2: rule__SquareBracketedClauseCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__3__Impl_in_rule__SquareBracketedClauseCS__Group__340550);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group__3__Impl_in_rule__SquareBracketedClauseCS__Group__342420);
             rule__SquareBracketedClauseCS__Group__3__Impl();
 
             state._fsp--;
@@ -59190,22 +61658,22 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19772:1: rule__SquareBracketedClauseCS__Group__3__Impl : ( ']' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20790:1: rule__SquareBracketedClauseCS__Group__3__Impl : ( ']' ) ;
     public final void rule__SquareBracketedClauseCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19776:1: ( ( ']' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19777:1: ( ']' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20794:1: ( ( ']' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20795:1: ( ']' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19777:1: ( ']' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19778:1: ']'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20795:1: ( ']' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20796:1: ']'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSquareBracketedClauseCSAccess().getRightSquareBracketKeyword_3()); 
             }
-            match(input,110,FollowSets001.FOLLOW_110_in_rule__SquareBracketedClauseCS__Group__3__Impl40578); if (state.failed) return ;
+            match(input,119,FollowSets001.FOLLOW_119_in_rule__SquareBracketedClauseCS__Group__3__Impl42448); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSquareBracketedClauseCSAccess().getRightSquareBracketKeyword_3()); 
             }
@@ -59231,21 +61699,21 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19799:1: rule__SquareBracketedClauseCS__Group_2__0 : rule__SquareBracketedClauseCS__Group_2__0__Impl rule__SquareBracketedClauseCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20817:1: rule__SquareBracketedClauseCS__Group_2__0 : rule__SquareBracketedClauseCS__Group_2__0__Impl rule__SquareBracketedClauseCS__Group_2__1 ;
     public final void rule__SquareBracketedClauseCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19803:1: ( rule__SquareBracketedClauseCS__Group_2__0__Impl rule__SquareBracketedClauseCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19804:2: rule__SquareBracketedClauseCS__Group_2__0__Impl rule__SquareBracketedClauseCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20821:1: ( rule__SquareBracketedClauseCS__Group_2__0__Impl rule__SquareBracketedClauseCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20822:2: rule__SquareBracketedClauseCS__Group_2__0__Impl rule__SquareBracketedClauseCS__Group_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group_2__0__Impl_in_rule__SquareBracketedClauseCS__Group_2__040617);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group_2__0__Impl_in_rule__SquareBracketedClauseCS__Group_2__042487);
             rule__SquareBracketedClauseCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group_2__1_in_rule__SquareBracketedClauseCS__Group_2__040620);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group_2__1_in_rule__SquareBracketedClauseCS__Group_2__042490);
             rule__SquareBracketedClauseCS__Group_2__1();
 
             state._fsp--;
@@ -59269,22 +61737,22 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19811:1: rule__SquareBracketedClauseCS__Group_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20829:1: rule__SquareBracketedClauseCS__Group_2__0__Impl : ( ',' ) ;
     public final void rule__SquareBracketedClauseCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19815:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19816:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20833:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20834:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19816:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19817:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20834:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20835:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSquareBracketedClauseCSAccess().getCommaKeyword_2_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__SquareBracketedClauseCS__Group_2__0__Impl40648); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__SquareBracketedClauseCS__Group_2__0__Impl42518); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSquareBracketedClauseCSAccess().getCommaKeyword_2_0()); 
             }
@@ -59310,16 +61778,16 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19830:1: rule__SquareBracketedClauseCS__Group_2__1 : rule__SquareBracketedClauseCS__Group_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20848:1: rule__SquareBracketedClauseCS__Group_2__1 : rule__SquareBracketedClauseCS__Group_2__1__Impl ;
     public final void rule__SquareBracketedClauseCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19834:1: ( rule__SquareBracketedClauseCS__Group_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19835:2: rule__SquareBracketedClauseCS__Group_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20852:1: ( rule__SquareBracketedClauseCS__Group_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20853:2: rule__SquareBracketedClauseCS__Group_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group_2__1__Impl_in_rule__SquareBracketedClauseCS__Group_2__140679);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__Group_2__1__Impl_in_rule__SquareBracketedClauseCS__Group_2__142549);
             rule__SquareBracketedClauseCS__Group_2__1__Impl();
 
             state._fsp--;
@@ -59343,25 +61811,25 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19841:1: rule__SquareBracketedClauseCS__Group_2__1__Impl : ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20859:1: rule__SquareBracketedClauseCS__Group_2__1__Impl : ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 ) ) ;
     public final void rule__SquareBracketedClauseCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19845:1: ( ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19846:1: ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20863:1: ( ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20864:1: ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19846:1: ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19847:1: ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20864:1: ( ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20865:1: ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSquareBracketedClauseCSAccess().getOwnedTermsAssignment_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19848:1: ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19848:2: rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20866:1: ( rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20866:2: rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1_in_rule__SquareBracketedClauseCS__Group_2__1__Impl40706);
+            pushFollow(FollowSets001.FOLLOW_rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1_in_rule__SquareBracketedClauseCS__Group_2__1__Impl42576);
             rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1();
 
             state._fsp--;
@@ -59394,21 +61862,21 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19862:1: rule__NavigatingArgCS__Group_0__0 : rule__NavigatingArgCS__Group_0__0__Impl rule__NavigatingArgCS__Group_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20880:1: rule__NavigatingArgCS__Group_0__0 : rule__NavigatingArgCS__Group_0__0__Impl rule__NavigatingArgCS__Group_0__1 ;
     public final void rule__NavigatingArgCS__Group_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19866:1: ( rule__NavigatingArgCS__Group_0__0__Impl rule__NavigatingArgCS__Group_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19867:2: rule__NavigatingArgCS__Group_0__0__Impl rule__NavigatingArgCS__Group_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20884:1: ( rule__NavigatingArgCS__Group_0__0__Impl rule__NavigatingArgCS__Group_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20885:2: rule__NavigatingArgCS__Group_0__0__Impl rule__NavigatingArgCS__Group_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0__0__Impl_in_rule__NavigatingArgCS__Group_0__040740);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0__0__Impl_in_rule__NavigatingArgCS__Group_0__042610);
             rule__NavigatingArgCS__Group_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0__1_in_rule__NavigatingArgCS__Group_0__040743);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0__1_in_rule__NavigatingArgCS__Group_0__042613);
             rule__NavigatingArgCS__Group_0__1();
 
             state._fsp--;
@@ -59432,25 +61900,25 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19874:1: rule__NavigatingArgCS__Group_0__0__Impl : ( ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20892:1: rule__NavigatingArgCS__Group_0__0__Impl : ( ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 ) ) ;
     public final void rule__NavigatingArgCS__Group_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19878:1: ( ( ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19879:1: ( ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20896:1: ( ( ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20897:1: ( ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19879:1: ( ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19880:1: ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20897:1: ( ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20898:1: ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedNameExpressionAssignment_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19881:1: ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19881:2: rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20899:1: ( rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20899:2: rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0_in_rule__NavigatingArgCS__Group_0__0__Impl40770);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0_in_rule__NavigatingArgCS__Group_0__0__Impl42640);
             rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0();
 
             state._fsp--;
@@ -59483,16 +61951,16 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19891:1: rule__NavigatingArgCS__Group_0__1 : rule__NavigatingArgCS__Group_0__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20909:1: rule__NavigatingArgCS__Group_0__1 : rule__NavigatingArgCS__Group_0__1__Impl ;
     public final void rule__NavigatingArgCS__Group_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19895:1: ( rule__NavigatingArgCS__Group_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19896:2: rule__NavigatingArgCS__Group_0__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20913:1: ( rule__NavigatingArgCS__Group_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20914:2: rule__NavigatingArgCS__Group_0__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0__1__Impl_in_rule__NavigatingArgCS__Group_0__140800);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0__1__Impl_in_rule__NavigatingArgCS__Group_0__142670);
             rule__NavigatingArgCS__Group_0__1__Impl();
 
             state._fsp--;
@@ -59516,33 +61984,33 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19902:1: rule__NavigatingArgCS__Group_0__1__Impl : ( ( rule__NavigatingArgCS__Alternatives_0_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20920:1: rule__NavigatingArgCS__Group_0__1__Impl : ( ( rule__NavigatingArgCS__Alternatives_0_1 )? ) ;
     public final void rule__NavigatingArgCS__Group_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19906:1: ( ( ( rule__NavigatingArgCS__Alternatives_0_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19907:1: ( ( rule__NavigatingArgCS__Alternatives_0_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20924:1: ( ( ( rule__NavigatingArgCS__Alternatives_0_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20925:1: ( ( rule__NavigatingArgCS__Alternatives_0_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19907:1: ( ( rule__NavigatingArgCS__Alternatives_0_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19908:1: ( rule__NavigatingArgCS__Alternatives_0_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20925:1: ( ( rule__NavigatingArgCS__Alternatives_0_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20926:1: ( rule__NavigatingArgCS__Alternatives_0_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getAlternatives_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19909:1: ( rule__NavigatingArgCS__Alternatives_0_1 )?
-            int alt210=2;
-            int LA210_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20927:1: ( rule__NavigatingArgCS__Alternatives_0_1 )?
+            int alt238=2;
+            int LA238_0 = input.LA(1);
 
-            if ( (LA210_0==97||LA210_0==111) ) {
-                alt210=1;
+            if ( (LA238_0==106||LA238_0==120) ) {
+                alt238=1;
             }
-            switch (alt210) {
+            switch (alt238) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19909:2: rule__NavigatingArgCS__Alternatives_0_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20927:2: rule__NavigatingArgCS__Alternatives_0_1
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Alternatives_0_1_in_rule__NavigatingArgCS__Group_0__1__Impl40827);
+                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Alternatives_0_1_in_rule__NavigatingArgCS__Group_0__1__Impl42697);
                     rule__NavigatingArgCS__Alternatives_0_1();
 
                     state._fsp--;
@@ -59578,21 +62046,21 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19923:1: rule__NavigatingArgCS__Group_0_1_0__0 : rule__NavigatingArgCS__Group_0_1_0__0__Impl rule__NavigatingArgCS__Group_0_1_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20941:1: rule__NavigatingArgCS__Group_0_1_0__0 : rule__NavigatingArgCS__Group_0_1_0__0__Impl rule__NavigatingArgCS__Group_0_1_0__1 ;
     public final void rule__NavigatingArgCS__Group_0_1_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19927:1: ( rule__NavigatingArgCS__Group_0_1_0__0__Impl rule__NavigatingArgCS__Group_0_1_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19928:2: rule__NavigatingArgCS__Group_0_1_0__0__Impl rule__NavigatingArgCS__Group_0_1_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20945:1: ( rule__NavigatingArgCS__Group_0_1_0__0__Impl rule__NavigatingArgCS__Group_0_1_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20946:2: rule__NavigatingArgCS__Group_0_1_0__0__Impl rule__NavigatingArgCS__Group_0_1_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__0__Impl_in_rule__NavigatingArgCS__Group_0_1_0__040862);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__0__Impl_in_rule__NavigatingArgCS__Group_0_1_0__042732);
             rule__NavigatingArgCS__Group_0_1_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__1_in_rule__NavigatingArgCS__Group_0_1_0__040865);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__1_in_rule__NavigatingArgCS__Group_0_1_0__042735);
             rule__NavigatingArgCS__Group_0_1_0__1();
 
             state._fsp--;
@@ -59616,22 +62084,22 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19935:1: rule__NavigatingArgCS__Group_0_1_0__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20953:1: rule__NavigatingArgCS__Group_0_1_0__0__Impl : ( ':' ) ;
     public final void rule__NavigatingArgCS__Group_0_1_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19939:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19940:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20957:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20958:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19940:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19941:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20958:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20959:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getColonKeyword_0_1_0_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__NavigatingArgCS__Group_0_1_0__0__Impl40893); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__NavigatingArgCS__Group_0_1_0__0__Impl42763); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingArgCSAccess().getColonKeyword_0_1_0_0()); 
             }
@@ -59657,21 +62125,21 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19954:1: rule__NavigatingArgCS__Group_0_1_0__1 : rule__NavigatingArgCS__Group_0_1_0__1__Impl rule__NavigatingArgCS__Group_0_1_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20972:1: rule__NavigatingArgCS__Group_0_1_0__1 : rule__NavigatingArgCS__Group_0_1_0__1__Impl rule__NavigatingArgCS__Group_0_1_0__2 ;
     public final void rule__NavigatingArgCS__Group_0_1_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19958:1: ( rule__NavigatingArgCS__Group_0_1_0__1__Impl rule__NavigatingArgCS__Group_0_1_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19959:2: rule__NavigatingArgCS__Group_0_1_0__1__Impl rule__NavigatingArgCS__Group_0_1_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20976:1: ( rule__NavigatingArgCS__Group_0_1_0__1__Impl rule__NavigatingArgCS__Group_0_1_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20977:2: rule__NavigatingArgCS__Group_0_1_0__1__Impl rule__NavigatingArgCS__Group_0_1_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__1__Impl_in_rule__NavigatingArgCS__Group_0_1_0__140924);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__1__Impl_in_rule__NavigatingArgCS__Group_0_1_0__142794);
             rule__NavigatingArgCS__Group_0_1_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__2_in_rule__NavigatingArgCS__Group_0_1_0__140927);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__2_in_rule__NavigatingArgCS__Group_0_1_0__142797);
             rule__NavigatingArgCS__Group_0_1_0__2();
 
             state._fsp--;
@@ -59695,25 +62163,25 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19966:1: rule__NavigatingArgCS__Group_0_1_0__1__Impl : ( ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20984:1: rule__NavigatingArgCS__Group_0_1_0__1__Impl : ( ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 ) ) ;
     public final void rule__NavigatingArgCS__Group_0_1_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19970:1: ( ( ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19971:1: ( ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20988:1: ( ( ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20989:1: ( ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19971:1: ( ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19972:1: ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20989:1: ( ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20990:1: ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedTypeAssignment_0_1_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19973:1: ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19973:2: rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20991:1: ( rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20991:2: rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1_in_rule__NavigatingArgCS__Group_0_1_0__1__Impl40954);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1_in_rule__NavigatingArgCS__Group_0_1_0__1__Impl42824);
             rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1();
 
             state._fsp--;
@@ -59746,16 +62214,16 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19983:1: rule__NavigatingArgCS__Group_0_1_0__2 : rule__NavigatingArgCS__Group_0_1_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21001:1: rule__NavigatingArgCS__Group_0_1_0__2 : rule__NavigatingArgCS__Group_0_1_0__2__Impl ;
     public final void rule__NavigatingArgCS__Group_0_1_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19987:1: ( rule__NavigatingArgCS__Group_0_1_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19988:2: rule__NavigatingArgCS__Group_0_1_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21005:1: ( rule__NavigatingArgCS__Group_0_1_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21006:2: rule__NavigatingArgCS__Group_0_1_0__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__2__Impl_in_rule__NavigatingArgCS__Group_0_1_0__240984);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0__2__Impl_in_rule__NavigatingArgCS__Group_0_1_0__242854);
             rule__NavigatingArgCS__Group_0_1_0__2__Impl();
 
             state._fsp--;
@@ -59779,33 +62247,33 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19994:1: rule__NavigatingArgCS__Group_0_1_0__2__Impl : ( ( rule__NavigatingArgCS__Group_0_1_0_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21012:1: rule__NavigatingArgCS__Group_0_1_0__2__Impl : ( ( rule__NavigatingArgCS__Group_0_1_0_2__0 )? ) ;
     public final void rule__NavigatingArgCS__Group_0_1_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19998:1: ( ( ( rule__NavigatingArgCS__Group_0_1_0_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19999:1: ( ( rule__NavigatingArgCS__Group_0_1_0_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21016:1: ( ( ( rule__NavigatingArgCS__Group_0_1_0_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21017:1: ( ( rule__NavigatingArgCS__Group_0_1_0_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:19999:1: ( ( rule__NavigatingArgCS__Group_0_1_0_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20000:1: ( rule__NavigatingArgCS__Group_0_1_0_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21017:1: ( ( rule__NavigatingArgCS__Group_0_1_0_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21018:1: ( rule__NavigatingArgCS__Group_0_1_0_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getGroup_0_1_0_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20001:1: ( rule__NavigatingArgCS__Group_0_1_0_2__0 )?
-            int alt211=2;
-            int LA211_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21019:1: ( rule__NavigatingArgCS__Group_0_1_0_2__0 )?
+            int alt239=2;
+            int LA239_0 = input.LA(1);
 
-            if ( (LA211_0==70) ) {
-                alt211=1;
+            if ( (LA239_0==79) ) {
+                alt239=1;
             }
-            switch (alt211) {
+            switch (alt239) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20001:2: rule__NavigatingArgCS__Group_0_1_0_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21019:2: rule__NavigatingArgCS__Group_0_1_0_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__0_in_rule__NavigatingArgCS__Group_0_1_0__2__Impl41011);
+                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__0_in_rule__NavigatingArgCS__Group_0_1_0__2__Impl42881);
                     rule__NavigatingArgCS__Group_0_1_0_2__0();
 
                     state._fsp--;
@@ -59841,21 +62309,21 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20017:1: rule__NavigatingArgCS__Group_0_1_0_2__0 : rule__NavigatingArgCS__Group_0_1_0_2__0__Impl rule__NavigatingArgCS__Group_0_1_0_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21035:1: rule__NavigatingArgCS__Group_0_1_0_2__0 : rule__NavigatingArgCS__Group_0_1_0_2__0__Impl rule__NavigatingArgCS__Group_0_1_0_2__1 ;
     public final void rule__NavigatingArgCS__Group_0_1_0_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20021:1: ( rule__NavigatingArgCS__Group_0_1_0_2__0__Impl rule__NavigatingArgCS__Group_0_1_0_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20022:2: rule__NavigatingArgCS__Group_0_1_0_2__0__Impl rule__NavigatingArgCS__Group_0_1_0_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21039:1: ( rule__NavigatingArgCS__Group_0_1_0_2__0__Impl rule__NavigatingArgCS__Group_0_1_0_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21040:2: rule__NavigatingArgCS__Group_0_1_0_2__0__Impl rule__NavigatingArgCS__Group_0_1_0_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__0__Impl_in_rule__NavigatingArgCS__Group_0_1_0_2__041048);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__0__Impl_in_rule__NavigatingArgCS__Group_0_1_0_2__042918);
             rule__NavigatingArgCS__Group_0_1_0_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__1_in_rule__NavigatingArgCS__Group_0_1_0_2__041051);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__1_in_rule__NavigatingArgCS__Group_0_1_0_2__042921);
             rule__NavigatingArgCS__Group_0_1_0_2__1();
 
             state._fsp--;
@@ -59879,22 +62347,22 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20029:1: rule__NavigatingArgCS__Group_0_1_0_2__0__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21047:1: rule__NavigatingArgCS__Group_0_1_0_2__0__Impl : ( '=' ) ;
     public final void rule__NavigatingArgCS__Group_0_1_0_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20033:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20034:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21051:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21052:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20034:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20035:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21052:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21053:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getEqualsSignKeyword_0_1_0_2_0()); 
             }
-            match(input,70,FollowSets001.FOLLOW_70_in_rule__NavigatingArgCS__Group_0_1_0_2__0__Impl41079); if (state.failed) return ;
+            match(input,79,FollowSets001.FOLLOW_79_in_rule__NavigatingArgCS__Group_0_1_0_2__0__Impl42949); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingArgCSAccess().getEqualsSignKeyword_0_1_0_2_0()); 
             }
@@ -59920,16 +62388,16 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20048:1: rule__NavigatingArgCS__Group_0_1_0_2__1 : rule__NavigatingArgCS__Group_0_1_0_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21066:1: rule__NavigatingArgCS__Group_0_1_0_2__1 : rule__NavigatingArgCS__Group_0_1_0_2__1__Impl ;
     public final void rule__NavigatingArgCS__Group_0_1_0_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20052:1: ( rule__NavigatingArgCS__Group_0_1_0_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20053:2: rule__NavigatingArgCS__Group_0_1_0_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21070:1: ( rule__NavigatingArgCS__Group_0_1_0_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21071:2: rule__NavigatingArgCS__Group_0_1_0_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__1__Impl_in_rule__NavigatingArgCS__Group_0_1_0_2__141110);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__1__Impl_in_rule__NavigatingArgCS__Group_0_1_0_2__142980);
             rule__NavigatingArgCS__Group_0_1_0_2__1__Impl();
 
             state._fsp--;
@@ -59953,25 +62421,25 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_0_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20059:1: rule__NavigatingArgCS__Group_0_1_0_2__1__Impl : ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21077:1: rule__NavigatingArgCS__Group_0_1_0_2__1__Impl : ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 ) ) ;
     public final void rule__NavigatingArgCS__Group_0_1_0_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20063:1: ( ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20064:1: ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21081:1: ( ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21082:1: ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20064:1: ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20065:1: ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21082:1: ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21083:1: ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedInitExpressionAssignment_0_1_0_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20066:1: ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20066:2: rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21084:1: ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21084:2: rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1_in_rule__NavigatingArgCS__Group_0_1_0_2__1__Impl41137);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1_in_rule__NavigatingArgCS__Group_0_1_0_2__1__Impl43007);
             rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1();
 
             state._fsp--;
@@ -60004,21 +62472,21 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20080:1: rule__NavigatingArgCS__Group_0_1_1__0 : rule__NavigatingArgCS__Group_0_1_1__0__Impl rule__NavigatingArgCS__Group_0_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21098:1: rule__NavigatingArgCS__Group_0_1_1__0 : rule__NavigatingArgCS__Group_0_1_1__0__Impl rule__NavigatingArgCS__Group_0_1_1__1 ;
     public final void rule__NavigatingArgCS__Group_0_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20084:1: ( rule__NavigatingArgCS__Group_0_1_1__0__Impl rule__NavigatingArgCS__Group_0_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20085:2: rule__NavigatingArgCS__Group_0_1_1__0__Impl rule__NavigatingArgCS__Group_0_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21102:1: ( rule__NavigatingArgCS__Group_0_1_1__0__Impl rule__NavigatingArgCS__Group_0_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21103:2: rule__NavigatingArgCS__Group_0_1_1__0__Impl rule__NavigatingArgCS__Group_0_1_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_1__0__Impl_in_rule__NavigatingArgCS__Group_0_1_1__041171);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_1__0__Impl_in_rule__NavigatingArgCS__Group_0_1_1__043041);
             rule__NavigatingArgCS__Group_0_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_1__1_in_rule__NavigatingArgCS__Group_0_1_1__041174);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_1__1_in_rule__NavigatingArgCS__Group_0_1_1__043044);
             rule__NavigatingArgCS__Group_0_1_1__1();
 
             state._fsp--;
@@ -60042,22 +62510,22 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20092:1: rule__NavigatingArgCS__Group_0_1_1__0__Impl : ( 'in' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21110:1: rule__NavigatingArgCS__Group_0_1_1__0__Impl : ( 'in' ) ;
     public final void rule__NavigatingArgCS__Group_0_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20096:1: ( ( 'in' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20097:1: ( 'in' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21114:1: ( ( 'in' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21115:1: ( 'in' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20097:1: ( 'in' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20098:1: 'in'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21115:1: ( 'in' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21116:1: 'in'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getInKeyword_0_1_1_0()); 
             }
-            match(input,111,FollowSets001.FOLLOW_111_in_rule__NavigatingArgCS__Group_0_1_1__0__Impl41202); if (state.failed) return ;
+            match(input,120,FollowSets001.FOLLOW_120_in_rule__NavigatingArgCS__Group_0_1_1__0__Impl43072); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingArgCSAccess().getInKeyword_0_1_1_0()); 
             }
@@ -60083,16 +62551,16 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20111:1: rule__NavigatingArgCS__Group_0_1_1__1 : rule__NavigatingArgCS__Group_0_1_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21129:1: rule__NavigatingArgCS__Group_0_1_1__1 : rule__NavigatingArgCS__Group_0_1_1__1__Impl ;
     public final void rule__NavigatingArgCS__Group_0_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20115:1: ( rule__NavigatingArgCS__Group_0_1_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20116:2: rule__NavigatingArgCS__Group_0_1_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21133:1: ( rule__NavigatingArgCS__Group_0_1_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21134:2: rule__NavigatingArgCS__Group_0_1_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_1__1__Impl_in_rule__NavigatingArgCS__Group_0_1_1__141233);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_0_1_1__1__Impl_in_rule__NavigatingArgCS__Group_0_1_1__143103);
             rule__NavigatingArgCS__Group_0_1_1__1__Impl();
 
             state._fsp--;
@@ -60116,25 +62584,25 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_0_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20122:1: rule__NavigatingArgCS__Group_0_1_1__1__Impl : ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21140:1: rule__NavigatingArgCS__Group_0_1_1__1__Impl : ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 ) ) ;
     public final void rule__NavigatingArgCS__Group_0_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20126:1: ( ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20127:1: ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21144:1: ( ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21145:1: ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20127:1: ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20128:1: ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21145:1: ( ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21146:1: ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedInitExpressionAssignment_0_1_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20129:1: ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20129:2: rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21147:1: ( rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21147:2: rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1_in_rule__NavigatingArgCS__Group_0_1_1__1__Impl41260);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1_in_rule__NavigatingArgCS__Group_0_1_1__1__Impl43130);
             rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1();
 
             state._fsp--;
@@ -60167,21 +62635,21 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20143:1: rule__NavigatingArgCS__Group_1__0 : rule__NavigatingArgCS__Group_1__0__Impl rule__NavigatingArgCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21161:1: rule__NavigatingArgCS__Group_1__0 : rule__NavigatingArgCS__Group_1__0__Impl rule__NavigatingArgCS__Group_1__1 ;
     public final void rule__NavigatingArgCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20147:1: ( rule__NavigatingArgCS__Group_1__0__Impl rule__NavigatingArgCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20148:2: rule__NavigatingArgCS__Group_1__0__Impl rule__NavigatingArgCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21165:1: ( rule__NavigatingArgCS__Group_1__0__Impl rule__NavigatingArgCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21166:2: rule__NavigatingArgCS__Group_1__0__Impl rule__NavigatingArgCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_1__0__Impl_in_rule__NavigatingArgCS__Group_1__041294);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_1__0__Impl_in_rule__NavigatingArgCS__Group_1__043164);
             rule__NavigatingArgCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_1__1_in_rule__NavigatingArgCS__Group_1__041297);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_1__1_in_rule__NavigatingArgCS__Group_1__043167);
             rule__NavigatingArgCS__Group_1__1();
 
             state._fsp--;
@@ -60205,22 +62673,22 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20155:1: rule__NavigatingArgCS__Group_1__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21173:1: rule__NavigatingArgCS__Group_1__0__Impl : ( ':' ) ;
     public final void rule__NavigatingArgCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20159:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20160:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21177:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21178:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20160:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20161:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21178:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21179:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getColonKeyword_1_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__NavigatingArgCS__Group_1__0__Impl41325); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__NavigatingArgCS__Group_1__0__Impl43195); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingArgCSAccess().getColonKeyword_1_0()); 
             }
@@ -60246,16 +62714,16 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20174:1: rule__NavigatingArgCS__Group_1__1 : rule__NavigatingArgCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21192:1: rule__NavigatingArgCS__Group_1__1 : rule__NavigatingArgCS__Group_1__1__Impl ;
     public final void rule__NavigatingArgCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20178:1: ( rule__NavigatingArgCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20179:2: rule__NavigatingArgCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21196:1: ( rule__NavigatingArgCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21197:2: rule__NavigatingArgCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_1__1__Impl_in_rule__NavigatingArgCS__Group_1__141356);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__Group_1__1__Impl_in_rule__NavigatingArgCS__Group_1__143226);
             rule__NavigatingArgCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -60279,25 +62747,25 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20185:1: rule__NavigatingArgCS__Group_1__1__Impl : ( ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21203:1: rule__NavigatingArgCS__Group_1__1__Impl : ( ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 ) ) ;
     public final void rule__NavigatingArgCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20189:1: ( ( ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20190:1: ( ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21207:1: ( ( ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21208:1: ( ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20190:1: ( ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20191:1: ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21208:1: ( ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21209:1: ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedTypeAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20192:1: ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20192:2: rule__NavigatingArgCS__OwnedTypeAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21210:1: ( rule__NavigatingArgCS__OwnedTypeAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21210:2: rule__NavigatingArgCS__OwnedTypeAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedTypeAssignment_1_1_in_rule__NavigatingArgCS__Group_1__1__Impl41383);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingArgCS__OwnedTypeAssignment_1_1_in_rule__NavigatingArgCS__Group_1__1__Impl43253);
             rule__NavigatingArgCS__OwnedTypeAssignment_1_1();
 
             state._fsp--;
@@ -60330,21 +62798,21 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20206:1: rule__NavigatingBarArgCS__Group__0 : rule__NavigatingBarArgCS__Group__0__Impl rule__NavigatingBarArgCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21224:1: rule__NavigatingBarArgCS__Group__0 : rule__NavigatingBarArgCS__Group__0__Impl rule__NavigatingBarArgCS__Group__1 ;
     public final void rule__NavigatingBarArgCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20210:1: ( rule__NavigatingBarArgCS__Group__0__Impl rule__NavigatingBarArgCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20211:2: rule__NavigatingBarArgCS__Group__0__Impl rule__NavigatingBarArgCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21228:1: ( rule__NavigatingBarArgCS__Group__0__Impl rule__NavigatingBarArgCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21229:2: rule__NavigatingBarArgCS__Group__0__Impl rule__NavigatingBarArgCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__0__Impl_in_rule__NavigatingBarArgCS__Group__041417);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__0__Impl_in_rule__NavigatingBarArgCS__Group__043287);
             rule__NavigatingBarArgCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__1_in_rule__NavigatingBarArgCS__Group__041420);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__1_in_rule__NavigatingBarArgCS__Group__043290);
             rule__NavigatingBarArgCS__Group__1();
 
             state._fsp--;
@@ -60368,25 +62836,25 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20218:1: rule__NavigatingBarArgCS__Group__0__Impl : ( ( rule__NavigatingBarArgCS__PrefixAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21236:1: rule__NavigatingBarArgCS__Group__0__Impl : ( ( rule__NavigatingBarArgCS__PrefixAssignment_0 ) ) ;
     public final void rule__NavigatingBarArgCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20222:1: ( ( ( rule__NavigatingBarArgCS__PrefixAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20223:1: ( ( rule__NavigatingBarArgCS__PrefixAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21240:1: ( ( ( rule__NavigatingBarArgCS__PrefixAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21241:1: ( ( rule__NavigatingBarArgCS__PrefixAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20223:1: ( ( rule__NavigatingBarArgCS__PrefixAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20224:1: ( rule__NavigatingBarArgCS__PrefixAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21241:1: ( ( rule__NavigatingBarArgCS__PrefixAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21242:1: ( rule__NavigatingBarArgCS__PrefixAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getPrefixAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20225:1: ( rule__NavigatingBarArgCS__PrefixAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20225:2: rule__NavigatingBarArgCS__PrefixAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21243:1: ( rule__NavigatingBarArgCS__PrefixAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21243:2: rule__NavigatingBarArgCS__PrefixAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__PrefixAssignment_0_in_rule__NavigatingBarArgCS__Group__0__Impl41447);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__PrefixAssignment_0_in_rule__NavigatingBarArgCS__Group__0__Impl43317);
             rule__NavigatingBarArgCS__PrefixAssignment_0();
 
             state._fsp--;
@@ -60419,21 +62887,21 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20235:1: rule__NavigatingBarArgCS__Group__1 : rule__NavigatingBarArgCS__Group__1__Impl rule__NavigatingBarArgCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21253:1: rule__NavigatingBarArgCS__Group__1 : rule__NavigatingBarArgCS__Group__1__Impl rule__NavigatingBarArgCS__Group__2 ;
     public final void rule__NavigatingBarArgCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20239:1: ( rule__NavigatingBarArgCS__Group__1__Impl rule__NavigatingBarArgCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20240:2: rule__NavigatingBarArgCS__Group__1__Impl rule__NavigatingBarArgCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21257:1: ( rule__NavigatingBarArgCS__Group__1__Impl rule__NavigatingBarArgCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21258:2: rule__NavigatingBarArgCS__Group__1__Impl rule__NavigatingBarArgCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__1__Impl_in_rule__NavigatingBarArgCS__Group__141477);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__1__Impl_in_rule__NavigatingBarArgCS__Group__143347);
             rule__NavigatingBarArgCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__2_in_rule__NavigatingBarArgCS__Group__141480);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__2_in_rule__NavigatingBarArgCS__Group__143350);
             rule__NavigatingBarArgCS__Group__2();
 
             state._fsp--;
@@ -60457,25 +62925,25 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20247:1: rule__NavigatingBarArgCS__Group__1__Impl : ( ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21265:1: rule__NavigatingBarArgCS__Group__1__Impl : ( ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 ) ) ;
     public final void rule__NavigatingBarArgCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20251:1: ( ( ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20252:1: ( ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21269:1: ( ( ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21270:1: ( ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20252:1: ( ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20253:1: ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21270:1: ( ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21271:1: ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getOwnedNameExpressionAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20254:1: ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20254:2: rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21272:1: ( rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21272:2: rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingBarArgCS__Group__1__Impl41507);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingBarArgCS__Group__1__Impl43377);
             rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1();
 
             state._fsp--;
@@ -60508,16 +62976,16 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20264:1: rule__NavigatingBarArgCS__Group__2 : rule__NavigatingBarArgCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21282:1: rule__NavigatingBarArgCS__Group__2 : rule__NavigatingBarArgCS__Group__2__Impl ;
     public final void rule__NavigatingBarArgCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20268:1: ( rule__NavigatingBarArgCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20269:2: rule__NavigatingBarArgCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21286:1: ( rule__NavigatingBarArgCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21287:2: rule__NavigatingBarArgCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__2__Impl_in_rule__NavigatingBarArgCS__Group__241537);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group__2__Impl_in_rule__NavigatingBarArgCS__Group__243407);
             rule__NavigatingBarArgCS__Group__2__Impl();
 
             state._fsp--;
@@ -60541,33 +63009,33 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20275:1: rule__NavigatingBarArgCS__Group__2__Impl : ( ( rule__NavigatingBarArgCS__Group_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21293:1: rule__NavigatingBarArgCS__Group__2__Impl : ( ( rule__NavigatingBarArgCS__Group_2__0 )? ) ;
     public final void rule__NavigatingBarArgCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20279:1: ( ( ( rule__NavigatingBarArgCS__Group_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20280:1: ( ( rule__NavigatingBarArgCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21297:1: ( ( ( rule__NavigatingBarArgCS__Group_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21298:1: ( ( rule__NavigatingBarArgCS__Group_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20280:1: ( ( rule__NavigatingBarArgCS__Group_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20281:1: ( rule__NavigatingBarArgCS__Group_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21298:1: ( ( rule__NavigatingBarArgCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21299:1: ( rule__NavigatingBarArgCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20282:1: ( rule__NavigatingBarArgCS__Group_2__0 )?
-            int alt212=2;
-            int LA212_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21300:1: ( rule__NavigatingBarArgCS__Group_2__0 )?
+            int alt240=2;
+            int LA240_0 = input.LA(1);
 
-            if ( (LA212_0==97) ) {
-                alt212=1;
+            if ( (LA240_0==106) ) {
+                alt240=1;
             }
-            switch (alt212) {
+            switch (alt240) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20282:2: rule__NavigatingBarArgCS__Group_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21300:2: rule__NavigatingBarArgCS__Group_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__0_in_rule__NavigatingBarArgCS__Group__2__Impl41564);
+                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__0_in_rule__NavigatingBarArgCS__Group__2__Impl43434);
                     rule__NavigatingBarArgCS__Group_2__0();
 
                     state._fsp--;
@@ -60603,21 +63071,21 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20298:1: rule__NavigatingBarArgCS__Group_2__0 : rule__NavigatingBarArgCS__Group_2__0__Impl rule__NavigatingBarArgCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21316:1: rule__NavigatingBarArgCS__Group_2__0 : rule__NavigatingBarArgCS__Group_2__0__Impl rule__NavigatingBarArgCS__Group_2__1 ;
     public final void rule__NavigatingBarArgCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20302:1: ( rule__NavigatingBarArgCS__Group_2__0__Impl rule__NavigatingBarArgCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20303:2: rule__NavigatingBarArgCS__Group_2__0__Impl rule__NavigatingBarArgCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21320:1: ( rule__NavigatingBarArgCS__Group_2__0__Impl rule__NavigatingBarArgCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21321:2: rule__NavigatingBarArgCS__Group_2__0__Impl rule__NavigatingBarArgCS__Group_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__0__Impl_in_rule__NavigatingBarArgCS__Group_2__041601);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__0__Impl_in_rule__NavigatingBarArgCS__Group_2__043471);
             rule__NavigatingBarArgCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__1_in_rule__NavigatingBarArgCS__Group_2__041604);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__1_in_rule__NavigatingBarArgCS__Group_2__043474);
             rule__NavigatingBarArgCS__Group_2__1();
 
             state._fsp--;
@@ -60641,22 +63109,22 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20310:1: rule__NavigatingBarArgCS__Group_2__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21328:1: rule__NavigatingBarArgCS__Group_2__0__Impl : ( ':' ) ;
     public final void rule__NavigatingBarArgCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20314:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20315:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21332:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21333:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20315:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20316:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21333:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21334:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getColonKeyword_2_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__NavigatingBarArgCS__Group_2__0__Impl41632); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__NavigatingBarArgCS__Group_2__0__Impl43502); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingBarArgCSAccess().getColonKeyword_2_0()); 
             }
@@ -60682,21 +63150,21 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20329:1: rule__NavigatingBarArgCS__Group_2__1 : rule__NavigatingBarArgCS__Group_2__1__Impl rule__NavigatingBarArgCS__Group_2__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21347:1: rule__NavigatingBarArgCS__Group_2__1 : rule__NavigatingBarArgCS__Group_2__1__Impl rule__NavigatingBarArgCS__Group_2__2 ;
     public final void rule__NavigatingBarArgCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20333:1: ( rule__NavigatingBarArgCS__Group_2__1__Impl rule__NavigatingBarArgCS__Group_2__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20334:2: rule__NavigatingBarArgCS__Group_2__1__Impl rule__NavigatingBarArgCS__Group_2__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21351:1: ( rule__NavigatingBarArgCS__Group_2__1__Impl rule__NavigatingBarArgCS__Group_2__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21352:2: rule__NavigatingBarArgCS__Group_2__1__Impl rule__NavigatingBarArgCS__Group_2__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__1__Impl_in_rule__NavigatingBarArgCS__Group_2__141663);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__1__Impl_in_rule__NavigatingBarArgCS__Group_2__143533);
             rule__NavigatingBarArgCS__Group_2__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__2_in_rule__NavigatingBarArgCS__Group_2__141666);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__2_in_rule__NavigatingBarArgCS__Group_2__143536);
             rule__NavigatingBarArgCS__Group_2__2();
 
             state._fsp--;
@@ -60720,25 +63188,25 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20341:1: rule__NavigatingBarArgCS__Group_2__1__Impl : ( ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21359:1: rule__NavigatingBarArgCS__Group_2__1__Impl : ( ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 ) ) ;
     public final void rule__NavigatingBarArgCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20345:1: ( ( ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20346:1: ( ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21363:1: ( ( ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21364:1: ( ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20346:1: ( ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20347:1: ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21364:1: ( ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21365:1: ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getOwnedTypeAssignment_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20348:1: ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20348:2: rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21366:1: ( rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21366:2: rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1_in_rule__NavigatingBarArgCS__Group_2__1__Impl41693);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1_in_rule__NavigatingBarArgCS__Group_2__1__Impl43563);
             rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1();
 
             state._fsp--;
@@ -60771,16 +63239,16 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20358:1: rule__NavigatingBarArgCS__Group_2__2 : rule__NavigatingBarArgCS__Group_2__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21376:1: rule__NavigatingBarArgCS__Group_2__2 : rule__NavigatingBarArgCS__Group_2__2__Impl ;
     public final void rule__NavigatingBarArgCS__Group_2__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20362:1: ( rule__NavigatingBarArgCS__Group_2__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20363:2: rule__NavigatingBarArgCS__Group_2__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21380:1: ( rule__NavigatingBarArgCS__Group_2__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21381:2: rule__NavigatingBarArgCS__Group_2__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__2__Impl_in_rule__NavigatingBarArgCS__Group_2__241723);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2__2__Impl_in_rule__NavigatingBarArgCS__Group_2__243593);
             rule__NavigatingBarArgCS__Group_2__2__Impl();
 
             state._fsp--;
@@ -60804,33 +63272,33 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20369:1: rule__NavigatingBarArgCS__Group_2__2__Impl : ( ( rule__NavigatingBarArgCS__Group_2_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21387:1: rule__NavigatingBarArgCS__Group_2__2__Impl : ( ( rule__NavigatingBarArgCS__Group_2_2__0 )? ) ;
     public final void rule__NavigatingBarArgCS__Group_2__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20373:1: ( ( ( rule__NavigatingBarArgCS__Group_2_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20374:1: ( ( rule__NavigatingBarArgCS__Group_2_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21391:1: ( ( ( rule__NavigatingBarArgCS__Group_2_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21392:1: ( ( rule__NavigatingBarArgCS__Group_2_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20374:1: ( ( rule__NavigatingBarArgCS__Group_2_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20375:1: ( rule__NavigatingBarArgCS__Group_2_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21392:1: ( ( rule__NavigatingBarArgCS__Group_2_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21393:1: ( rule__NavigatingBarArgCS__Group_2_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getGroup_2_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20376:1: ( rule__NavigatingBarArgCS__Group_2_2__0 )?
-            int alt213=2;
-            int LA213_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21394:1: ( rule__NavigatingBarArgCS__Group_2_2__0 )?
+            int alt241=2;
+            int LA241_0 = input.LA(1);
 
-            if ( (LA213_0==70) ) {
-                alt213=1;
+            if ( (LA241_0==79) ) {
+                alt241=1;
             }
-            switch (alt213) {
+            switch (alt241) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20376:2: rule__NavigatingBarArgCS__Group_2_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21394:2: rule__NavigatingBarArgCS__Group_2_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2_2__0_in_rule__NavigatingBarArgCS__Group_2__2__Impl41750);
+                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2_2__0_in_rule__NavigatingBarArgCS__Group_2__2__Impl43620);
                     rule__NavigatingBarArgCS__Group_2_2__0();
 
                     state._fsp--;
@@ -60866,21 +63334,21 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20392:1: rule__NavigatingBarArgCS__Group_2_2__0 : rule__NavigatingBarArgCS__Group_2_2__0__Impl rule__NavigatingBarArgCS__Group_2_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21410:1: rule__NavigatingBarArgCS__Group_2_2__0 : rule__NavigatingBarArgCS__Group_2_2__0__Impl rule__NavigatingBarArgCS__Group_2_2__1 ;
     public final void rule__NavigatingBarArgCS__Group_2_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20396:1: ( rule__NavigatingBarArgCS__Group_2_2__0__Impl rule__NavigatingBarArgCS__Group_2_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20397:2: rule__NavigatingBarArgCS__Group_2_2__0__Impl rule__NavigatingBarArgCS__Group_2_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21414:1: ( rule__NavigatingBarArgCS__Group_2_2__0__Impl rule__NavigatingBarArgCS__Group_2_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21415:2: rule__NavigatingBarArgCS__Group_2_2__0__Impl rule__NavigatingBarArgCS__Group_2_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2_2__0__Impl_in_rule__NavigatingBarArgCS__Group_2_2__041787);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2_2__0__Impl_in_rule__NavigatingBarArgCS__Group_2_2__043657);
             rule__NavigatingBarArgCS__Group_2_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2_2__1_in_rule__NavigatingBarArgCS__Group_2_2__041790);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2_2__1_in_rule__NavigatingBarArgCS__Group_2_2__043660);
             rule__NavigatingBarArgCS__Group_2_2__1();
 
             state._fsp--;
@@ -60904,22 +63372,22 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20404:1: rule__NavigatingBarArgCS__Group_2_2__0__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21422:1: rule__NavigatingBarArgCS__Group_2_2__0__Impl : ( '=' ) ;
     public final void rule__NavigatingBarArgCS__Group_2_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20408:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20409:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21426:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21427:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20409:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20410:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21427:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21428:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getEqualsSignKeyword_2_2_0()); 
             }
-            match(input,70,FollowSets001.FOLLOW_70_in_rule__NavigatingBarArgCS__Group_2_2__0__Impl41818); if (state.failed) return ;
+            match(input,79,FollowSets001.FOLLOW_79_in_rule__NavigatingBarArgCS__Group_2_2__0__Impl43688); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingBarArgCSAccess().getEqualsSignKeyword_2_2_0()); 
             }
@@ -60945,16 +63413,16 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20423:1: rule__NavigatingBarArgCS__Group_2_2__1 : rule__NavigatingBarArgCS__Group_2_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21441:1: rule__NavigatingBarArgCS__Group_2_2__1 : rule__NavigatingBarArgCS__Group_2_2__1__Impl ;
     public final void rule__NavigatingBarArgCS__Group_2_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20427:1: ( rule__NavigatingBarArgCS__Group_2_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20428:2: rule__NavigatingBarArgCS__Group_2_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21445:1: ( rule__NavigatingBarArgCS__Group_2_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21446:2: rule__NavigatingBarArgCS__Group_2_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2_2__1__Impl_in_rule__NavigatingBarArgCS__Group_2_2__141849);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__Group_2_2__1__Impl_in_rule__NavigatingBarArgCS__Group_2_2__143719);
             rule__NavigatingBarArgCS__Group_2_2__1__Impl();
 
             state._fsp--;
@@ -60978,25 +63446,25 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__Group_2_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20434:1: rule__NavigatingBarArgCS__Group_2_2__1__Impl : ( ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21452:1: rule__NavigatingBarArgCS__Group_2_2__1__Impl : ( ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 ) ) ;
     public final void rule__NavigatingBarArgCS__Group_2_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20438:1: ( ( ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20439:1: ( ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21456:1: ( ( ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21457:1: ( ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20439:1: ( ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20440:1: ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21457:1: ( ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21458:1: ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getOwnedInitExpressionAssignment_2_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20441:1: ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20441:2: rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21459:1: ( rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21459:2: rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1_in_rule__NavigatingBarArgCS__Group_2_2__1__Impl41876);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1_in_rule__NavigatingBarArgCS__Group_2_2__1__Impl43746);
             rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1();
 
             state._fsp--;
@@ -61029,21 +63497,21 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20455:1: rule__NavigatingCommaArgCS__Group__0 : rule__NavigatingCommaArgCS__Group__0__Impl rule__NavigatingCommaArgCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21473:1: rule__NavigatingCommaArgCS__Group__0 : rule__NavigatingCommaArgCS__Group__0__Impl rule__NavigatingCommaArgCS__Group__1 ;
     public final void rule__NavigatingCommaArgCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20459:1: ( rule__NavigatingCommaArgCS__Group__0__Impl rule__NavigatingCommaArgCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20460:2: rule__NavigatingCommaArgCS__Group__0__Impl rule__NavigatingCommaArgCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21477:1: ( rule__NavigatingCommaArgCS__Group__0__Impl rule__NavigatingCommaArgCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21478:2: rule__NavigatingCommaArgCS__Group__0__Impl rule__NavigatingCommaArgCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__0__Impl_in_rule__NavigatingCommaArgCS__Group__041910);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__0__Impl_in_rule__NavigatingCommaArgCS__Group__043780);
             rule__NavigatingCommaArgCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__1_in_rule__NavigatingCommaArgCS__Group__041913);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__1_in_rule__NavigatingCommaArgCS__Group__043783);
             rule__NavigatingCommaArgCS__Group__1();
 
             state._fsp--;
@@ -61067,25 +63535,25 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20467:1: rule__NavigatingCommaArgCS__Group__0__Impl : ( ( rule__NavigatingCommaArgCS__PrefixAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21485:1: rule__NavigatingCommaArgCS__Group__0__Impl : ( ( rule__NavigatingCommaArgCS__PrefixAssignment_0 ) ) ;
     public final void rule__NavigatingCommaArgCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20471:1: ( ( ( rule__NavigatingCommaArgCS__PrefixAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20472:1: ( ( rule__NavigatingCommaArgCS__PrefixAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21489:1: ( ( ( rule__NavigatingCommaArgCS__PrefixAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21490:1: ( ( rule__NavigatingCommaArgCS__PrefixAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20472:1: ( ( rule__NavigatingCommaArgCS__PrefixAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20473:1: ( rule__NavigatingCommaArgCS__PrefixAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21490:1: ( ( rule__NavigatingCommaArgCS__PrefixAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21491:1: ( rule__NavigatingCommaArgCS__PrefixAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getPrefixAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20474:1: ( rule__NavigatingCommaArgCS__PrefixAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20474:2: rule__NavigatingCommaArgCS__PrefixAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21492:1: ( rule__NavigatingCommaArgCS__PrefixAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21492:2: rule__NavigatingCommaArgCS__PrefixAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__PrefixAssignment_0_in_rule__NavigatingCommaArgCS__Group__0__Impl41940);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__PrefixAssignment_0_in_rule__NavigatingCommaArgCS__Group__0__Impl43810);
             rule__NavigatingCommaArgCS__PrefixAssignment_0();
 
             state._fsp--;
@@ -61118,21 +63586,21 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20484:1: rule__NavigatingCommaArgCS__Group__1 : rule__NavigatingCommaArgCS__Group__1__Impl rule__NavigatingCommaArgCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21502:1: rule__NavigatingCommaArgCS__Group__1 : rule__NavigatingCommaArgCS__Group__1__Impl rule__NavigatingCommaArgCS__Group__2 ;
     public final void rule__NavigatingCommaArgCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20488:1: ( rule__NavigatingCommaArgCS__Group__1__Impl rule__NavigatingCommaArgCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20489:2: rule__NavigatingCommaArgCS__Group__1__Impl rule__NavigatingCommaArgCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21506:1: ( rule__NavigatingCommaArgCS__Group__1__Impl rule__NavigatingCommaArgCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21507:2: rule__NavigatingCommaArgCS__Group__1__Impl rule__NavigatingCommaArgCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__1__Impl_in_rule__NavigatingCommaArgCS__Group__141970);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__1__Impl_in_rule__NavigatingCommaArgCS__Group__143840);
             rule__NavigatingCommaArgCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__2_in_rule__NavigatingCommaArgCS__Group__141973);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__2_in_rule__NavigatingCommaArgCS__Group__143843);
             rule__NavigatingCommaArgCS__Group__2();
 
             state._fsp--;
@@ -61156,25 +63624,25 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20496:1: rule__NavigatingCommaArgCS__Group__1__Impl : ( ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21514:1: rule__NavigatingCommaArgCS__Group__1__Impl : ( ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 ) ) ;
     public final void rule__NavigatingCommaArgCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20500:1: ( ( ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20501:1: ( ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21518:1: ( ( ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21519:1: ( ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20501:1: ( ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20502:1: ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21519:1: ( ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21520:1: ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedNameExpressionAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20503:1: ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20503:2: rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21521:1: ( rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21521:2: rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingCommaArgCS__Group__1__Impl42000);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingCommaArgCS__Group__1__Impl43870);
             rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1();
 
             state._fsp--;
@@ -61207,16 +63675,16 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20513:1: rule__NavigatingCommaArgCS__Group__2 : rule__NavigatingCommaArgCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21531:1: rule__NavigatingCommaArgCS__Group__2 : rule__NavigatingCommaArgCS__Group__2__Impl ;
     public final void rule__NavigatingCommaArgCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20517:1: ( rule__NavigatingCommaArgCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20518:2: rule__NavigatingCommaArgCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21535:1: ( rule__NavigatingCommaArgCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21536:2: rule__NavigatingCommaArgCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__2__Impl_in_rule__NavigatingCommaArgCS__Group__242030);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group__2__Impl_in_rule__NavigatingCommaArgCS__Group__243900);
             rule__NavigatingCommaArgCS__Group__2__Impl();
 
             state._fsp--;
@@ -61240,33 +63708,33 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20524:1: rule__NavigatingCommaArgCS__Group__2__Impl : ( ( rule__NavigatingCommaArgCS__Alternatives_2 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21542:1: rule__NavigatingCommaArgCS__Group__2__Impl : ( ( rule__NavigatingCommaArgCS__Alternatives_2 )? ) ;
     public final void rule__NavigatingCommaArgCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20528:1: ( ( ( rule__NavigatingCommaArgCS__Alternatives_2 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20529:1: ( ( rule__NavigatingCommaArgCS__Alternatives_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21546:1: ( ( ( rule__NavigatingCommaArgCS__Alternatives_2 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21547:1: ( ( rule__NavigatingCommaArgCS__Alternatives_2 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20529:1: ( ( rule__NavigatingCommaArgCS__Alternatives_2 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20530:1: ( rule__NavigatingCommaArgCS__Alternatives_2 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21547:1: ( ( rule__NavigatingCommaArgCS__Alternatives_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21548:1: ( rule__NavigatingCommaArgCS__Alternatives_2 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getAlternatives_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20531:1: ( rule__NavigatingCommaArgCS__Alternatives_2 )?
-            int alt214=2;
-            int LA214_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21549:1: ( rule__NavigatingCommaArgCS__Alternatives_2 )?
+            int alt242=2;
+            int LA242_0 = input.LA(1);
 
-            if ( (LA214_0==97||LA214_0==111) ) {
-                alt214=1;
+            if ( (LA242_0==106||LA242_0==120) ) {
+                alt242=1;
             }
-            switch (alt214) {
+            switch (alt242) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20531:2: rule__NavigatingCommaArgCS__Alternatives_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21549:2: rule__NavigatingCommaArgCS__Alternatives_2
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Alternatives_2_in_rule__NavigatingCommaArgCS__Group__2__Impl42057);
+                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Alternatives_2_in_rule__NavigatingCommaArgCS__Group__2__Impl43927);
                     rule__NavigatingCommaArgCS__Alternatives_2();
 
                     state._fsp--;
@@ -61302,21 +63770,21 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20547:1: rule__NavigatingCommaArgCS__Group_2_0__0 : rule__NavigatingCommaArgCS__Group_2_0__0__Impl rule__NavigatingCommaArgCS__Group_2_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21565:1: rule__NavigatingCommaArgCS__Group_2_0__0 : rule__NavigatingCommaArgCS__Group_2_0__0__Impl rule__NavigatingCommaArgCS__Group_2_0__1 ;
     public final void rule__NavigatingCommaArgCS__Group_2_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20551:1: ( rule__NavigatingCommaArgCS__Group_2_0__0__Impl rule__NavigatingCommaArgCS__Group_2_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20552:2: rule__NavigatingCommaArgCS__Group_2_0__0__Impl rule__NavigatingCommaArgCS__Group_2_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21569:1: ( rule__NavigatingCommaArgCS__Group_2_0__0__Impl rule__NavigatingCommaArgCS__Group_2_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21570:2: rule__NavigatingCommaArgCS__Group_2_0__0__Impl rule__NavigatingCommaArgCS__Group_2_0__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__042094);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__043964);
             rule__NavigatingCommaArgCS__Group_2_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__1_in_rule__NavigatingCommaArgCS__Group_2_0__042097);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__1_in_rule__NavigatingCommaArgCS__Group_2_0__043967);
             rule__NavigatingCommaArgCS__Group_2_0__1();
 
             state._fsp--;
@@ -61340,22 +63808,22 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20559:1: rule__NavigatingCommaArgCS__Group_2_0__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21577:1: rule__NavigatingCommaArgCS__Group_2_0__0__Impl : ( ':' ) ;
     public final void rule__NavigatingCommaArgCS__Group_2_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20563:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20564:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21581:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21582:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20564:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20565:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21582:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21583:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getColonKeyword_2_0_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__NavigatingCommaArgCS__Group_2_0__0__Impl42125); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__NavigatingCommaArgCS__Group_2_0__0__Impl43995); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingCommaArgCSAccess().getColonKeyword_2_0_0()); 
             }
@@ -61381,21 +63849,21 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20578:1: rule__NavigatingCommaArgCS__Group_2_0__1 : rule__NavigatingCommaArgCS__Group_2_0__1__Impl rule__NavigatingCommaArgCS__Group_2_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21596:1: rule__NavigatingCommaArgCS__Group_2_0__1 : rule__NavigatingCommaArgCS__Group_2_0__1__Impl rule__NavigatingCommaArgCS__Group_2_0__2 ;
     public final void rule__NavigatingCommaArgCS__Group_2_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20582:1: ( rule__NavigatingCommaArgCS__Group_2_0__1__Impl rule__NavigatingCommaArgCS__Group_2_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20583:2: rule__NavigatingCommaArgCS__Group_2_0__1__Impl rule__NavigatingCommaArgCS__Group_2_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21600:1: ( rule__NavigatingCommaArgCS__Group_2_0__1__Impl rule__NavigatingCommaArgCS__Group_2_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21601:2: rule__NavigatingCommaArgCS__Group_2_0__1__Impl rule__NavigatingCommaArgCS__Group_2_0__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__142156);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__144026);
             rule__NavigatingCommaArgCS__Group_2_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__2_in_rule__NavigatingCommaArgCS__Group_2_0__142159);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__2_in_rule__NavigatingCommaArgCS__Group_2_0__144029);
             rule__NavigatingCommaArgCS__Group_2_0__2();
 
             state._fsp--;
@@ -61419,25 +63887,25 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20590:1: rule__NavigatingCommaArgCS__Group_2_0__1__Impl : ( ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21608:1: rule__NavigatingCommaArgCS__Group_2_0__1__Impl : ( ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 ) ) ;
     public final void rule__NavigatingCommaArgCS__Group_2_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20594:1: ( ( ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20595:1: ( ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21612:1: ( ( ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21613:1: ( ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20595:1: ( ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20596:1: ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21613:1: ( ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21614:1: ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedTypeAssignment_2_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20597:1: ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20597:2: rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21615:1: ( rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21615:2: rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1_in_rule__NavigatingCommaArgCS__Group_2_0__1__Impl42186);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1_in_rule__NavigatingCommaArgCS__Group_2_0__1__Impl44056);
             rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1();
 
             state._fsp--;
@@ -61470,16 +63938,16 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20607:1: rule__NavigatingCommaArgCS__Group_2_0__2 : rule__NavigatingCommaArgCS__Group_2_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21625:1: rule__NavigatingCommaArgCS__Group_2_0__2 : rule__NavigatingCommaArgCS__Group_2_0__2__Impl ;
     public final void rule__NavigatingCommaArgCS__Group_2_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20611:1: ( rule__NavigatingCommaArgCS__Group_2_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20612:2: rule__NavigatingCommaArgCS__Group_2_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21629:1: ( rule__NavigatingCommaArgCS__Group_2_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21630:2: rule__NavigatingCommaArgCS__Group_2_0__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__2__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__242216);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__2__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__244086);
             rule__NavigatingCommaArgCS__Group_2_0__2__Impl();
 
             state._fsp--;
@@ -61503,33 +63971,33 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20618:1: rule__NavigatingCommaArgCS__Group_2_0__2__Impl : ( ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21636:1: rule__NavigatingCommaArgCS__Group_2_0__2__Impl : ( ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )? ) ;
     public final void rule__NavigatingCommaArgCS__Group_2_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20622:1: ( ( ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20623:1: ( ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21640:1: ( ( ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21641:1: ( ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20623:1: ( ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20624:1: ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21641:1: ( ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21642:1: ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getGroup_2_0_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20625:1: ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )?
-            int alt215=2;
-            int LA215_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21643:1: ( rule__NavigatingCommaArgCS__Group_2_0_2__0 )?
+            int alt243=2;
+            int LA243_0 = input.LA(1);
 
-            if ( (LA215_0==70) ) {
-                alt215=1;
+            if ( (LA243_0==79) ) {
+                alt243=1;
             }
-            switch (alt215) {
+            switch (alt243) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20625:2: rule__NavigatingCommaArgCS__Group_2_0_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21643:2: rule__NavigatingCommaArgCS__Group_2_0_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__0_in_rule__NavigatingCommaArgCS__Group_2_0__2__Impl42243);
+                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__0_in_rule__NavigatingCommaArgCS__Group_2_0__2__Impl44113);
                     rule__NavigatingCommaArgCS__Group_2_0_2__0();
 
                     state._fsp--;
@@ -61565,21 +64033,21 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20641:1: rule__NavigatingCommaArgCS__Group_2_0_2__0 : rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl rule__NavigatingCommaArgCS__Group_2_0_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21659:1: rule__NavigatingCommaArgCS__Group_2_0_2__0 : rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl rule__NavigatingCommaArgCS__Group_2_0_2__1 ;
     public final void rule__NavigatingCommaArgCS__Group_2_0_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20645:1: ( rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl rule__NavigatingCommaArgCS__Group_2_0_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20646:2: rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl rule__NavigatingCommaArgCS__Group_2_0_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21663:1: ( rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl rule__NavigatingCommaArgCS__Group_2_0_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21664:2: rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl rule__NavigatingCommaArgCS__Group_2_0_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_0_2__042280);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_0_2__044150);
             rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__1_in_rule__NavigatingCommaArgCS__Group_2_0_2__042283);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__1_in_rule__NavigatingCommaArgCS__Group_2_0_2__044153);
             rule__NavigatingCommaArgCS__Group_2_0_2__1();
 
             state._fsp--;
@@ -61603,22 +64071,22 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20653:1: rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21671:1: rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl : ( '=' ) ;
     public final void rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20657:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20658:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21675:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21676:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20658:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20659:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21676:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21677:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getEqualsSignKeyword_2_0_2_0()); 
             }
-            match(input,70,FollowSets001.FOLLOW_70_in_rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl42311); if (state.failed) return ;
+            match(input,79,FollowSets001.FOLLOW_79_in_rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl44181); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingCommaArgCSAccess().getEqualsSignKeyword_2_0_2_0()); 
             }
@@ -61644,16 +64112,16 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20672:1: rule__NavigatingCommaArgCS__Group_2_0_2__1 : rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21690:1: rule__NavigatingCommaArgCS__Group_2_0_2__1 : rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl ;
     public final void rule__NavigatingCommaArgCS__Group_2_0_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20676:1: ( rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20677:2: rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21694:1: ( rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21695:2: rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_0_2__142342);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_0_2__144212);
             rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl();
 
             state._fsp--;
@@ -61677,25 +64145,25 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20683:1: rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl : ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21701:1: rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl : ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 ) ) ;
     public final void rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20687:1: ( ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20688:1: ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21705:1: ( ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21706:1: ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20688:1: ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20689:1: ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21706:1: ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21707:1: ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedInitExpressionAssignment_2_0_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20690:1: ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20690:2: rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21708:1: ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21708:2: rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1_in_rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl42369);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1_in_rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl44239);
             rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1();
 
             state._fsp--;
@@ -61728,21 +64196,21 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20704:1: rule__NavigatingCommaArgCS__Group_2_1__0 : rule__NavigatingCommaArgCS__Group_2_1__0__Impl rule__NavigatingCommaArgCS__Group_2_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21722:1: rule__NavigatingCommaArgCS__Group_2_1__0 : rule__NavigatingCommaArgCS__Group_2_1__0__Impl rule__NavigatingCommaArgCS__Group_2_1__1 ;
     public final void rule__NavigatingCommaArgCS__Group_2_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20708:1: ( rule__NavigatingCommaArgCS__Group_2_1__0__Impl rule__NavigatingCommaArgCS__Group_2_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20709:2: rule__NavigatingCommaArgCS__Group_2_1__0__Impl rule__NavigatingCommaArgCS__Group_2_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21726:1: ( rule__NavigatingCommaArgCS__Group_2_1__0__Impl rule__NavigatingCommaArgCS__Group_2_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21727:2: rule__NavigatingCommaArgCS__Group_2_1__0__Impl rule__NavigatingCommaArgCS__Group_2_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_1__042403);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_1__044273);
             rule__NavigatingCommaArgCS__Group_2_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__1_in_rule__NavigatingCommaArgCS__Group_2_1__042406);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__1_in_rule__NavigatingCommaArgCS__Group_2_1__044276);
             rule__NavigatingCommaArgCS__Group_2_1__1();
 
             state._fsp--;
@@ -61766,22 +64234,22 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20716:1: rule__NavigatingCommaArgCS__Group_2_1__0__Impl : ( 'in' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21734:1: rule__NavigatingCommaArgCS__Group_2_1__0__Impl : ( 'in' ) ;
     public final void rule__NavigatingCommaArgCS__Group_2_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20720:1: ( ( 'in' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20721:1: ( 'in' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21738:1: ( ( 'in' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21739:1: ( 'in' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20721:1: ( 'in' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20722:1: 'in'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21739:1: ( 'in' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21740:1: 'in'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getInKeyword_2_1_0()); 
             }
-            match(input,111,FollowSets001.FOLLOW_111_in_rule__NavigatingCommaArgCS__Group_2_1__0__Impl42434); if (state.failed) return ;
+            match(input,120,FollowSets001.FOLLOW_120_in_rule__NavigatingCommaArgCS__Group_2_1__0__Impl44304); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingCommaArgCSAccess().getInKeyword_2_1_0()); 
             }
@@ -61807,16 +64275,16 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20735:1: rule__NavigatingCommaArgCS__Group_2_1__1 : rule__NavigatingCommaArgCS__Group_2_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21753:1: rule__NavigatingCommaArgCS__Group_2_1__1 : rule__NavigatingCommaArgCS__Group_2_1__1__Impl ;
     public final void rule__NavigatingCommaArgCS__Group_2_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20739:1: ( rule__NavigatingCommaArgCS__Group_2_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20740:2: rule__NavigatingCommaArgCS__Group_2_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21757:1: ( rule__NavigatingCommaArgCS__Group_2_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21758:2: rule__NavigatingCommaArgCS__Group_2_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_1__142465);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_1__144335);
             rule__NavigatingCommaArgCS__Group_2_1__1__Impl();
 
             state._fsp--;
@@ -61840,25 +64308,25 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__Group_2_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20746:1: rule__NavigatingCommaArgCS__Group_2_1__1__Impl : ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21764:1: rule__NavigatingCommaArgCS__Group_2_1__1__Impl : ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 ) ) ;
     public final void rule__NavigatingCommaArgCS__Group_2_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20750:1: ( ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20751:1: ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21768:1: ( ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21769:1: ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20751:1: ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20752:1: ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21769:1: ( ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21770:1: ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedInitExpressionAssignment_2_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20753:1: ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20753:2: rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21771:1: ( rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21771:2: rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1_in_rule__NavigatingCommaArgCS__Group_2_1__1__Impl42492);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1_in_rule__NavigatingCommaArgCS__Group_2_1__1__Impl44362);
             rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1();
 
             state._fsp--;
@@ -61891,21 +64359,21 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20767:1: rule__NavigatingSemiArgCS__Group__0 : rule__NavigatingSemiArgCS__Group__0__Impl rule__NavigatingSemiArgCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21785:1: rule__NavigatingSemiArgCS__Group__0 : rule__NavigatingSemiArgCS__Group__0__Impl rule__NavigatingSemiArgCS__Group__1 ;
     public final void rule__NavigatingSemiArgCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20771:1: ( rule__NavigatingSemiArgCS__Group__0__Impl rule__NavigatingSemiArgCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20772:2: rule__NavigatingSemiArgCS__Group__0__Impl rule__NavigatingSemiArgCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21789:1: ( rule__NavigatingSemiArgCS__Group__0__Impl rule__NavigatingSemiArgCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21790:2: rule__NavigatingSemiArgCS__Group__0__Impl rule__NavigatingSemiArgCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__0__Impl_in_rule__NavigatingSemiArgCS__Group__042526);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__0__Impl_in_rule__NavigatingSemiArgCS__Group__044396);
             rule__NavigatingSemiArgCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__1_in_rule__NavigatingSemiArgCS__Group__042529);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__1_in_rule__NavigatingSemiArgCS__Group__044399);
             rule__NavigatingSemiArgCS__Group__1();
 
             state._fsp--;
@@ -61929,25 +64397,25 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20779:1: rule__NavigatingSemiArgCS__Group__0__Impl : ( ( rule__NavigatingSemiArgCS__PrefixAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21797:1: rule__NavigatingSemiArgCS__Group__0__Impl : ( ( rule__NavigatingSemiArgCS__PrefixAssignment_0 ) ) ;
     public final void rule__NavigatingSemiArgCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20783:1: ( ( ( rule__NavigatingSemiArgCS__PrefixAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20784:1: ( ( rule__NavigatingSemiArgCS__PrefixAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21801:1: ( ( ( rule__NavigatingSemiArgCS__PrefixAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21802:1: ( ( rule__NavigatingSemiArgCS__PrefixAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20784:1: ( ( rule__NavigatingSemiArgCS__PrefixAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20785:1: ( rule__NavigatingSemiArgCS__PrefixAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21802:1: ( ( rule__NavigatingSemiArgCS__PrefixAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21803:1: ( rule__NavigatingSemiArgCS__PrefixAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getPrefixAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20786:1: ( rule__NavigatingSemiArgCS__PrefixAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20786:2: rule__NavigatingSemiArgCS__PrefixAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21804:1: ( rule__NavigatingSemiArgCS__PrefixAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21804:2: rule__NavigatingSemiArgCS__PrefixAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__PrefixAssignment_0_in_rule__NavigatingSemiArgCS__Group__0__Impl42556);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__PrefixAssignment_0_in_rule__NavigatingSemiArgCS__Group__0__Impl44426);
             rule__NavigatingSemiArgCS__PrefixAssignment_0();
 
             state._fsp--;
@@ -61980,21 +64448,21 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20796:1: rule__NavigatingSemiArgCS__Group__1 : rule__NavigatingSemiArgCS__Group__1__Impl rule__NavigatingSemiArgCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21814:1: rule__NavigatingSemiArgCS__Group__1 : rule__NavigatingSemiArgCS__Group__1__Impl rule__NavigatingSemiArgCS__Group__2 ;
     public final void rule__NavigatingSemiArgCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20800:1: ( rule__NavigatingSemiArgCS__Group__1__Impl rule__NavigatingSemiArgCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20801:2: rule__NavigatingSemiArgCS__Group__1__Impl rule__NavigatingSemiArgCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21818:1: ( rule__NavigatingSemiArgCS__Group__1__Impl rule__NavigatingSemiArgCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21819:2: rule__NavigatingSemiArgCS__Group__1__Impl rule__NavigatingSemiArgCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__1__Impl_in_rule__NavigatingSemiArgCS__Group__142586);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__1__Impl_in_rule__NavigatingSemiArgCS__Group__144456);
             rule__NavigatingSemiArgCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__2_in_rule__NavigatingSemiArgCS__Group__142589);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__2_in_rule__NavigatingSemiArgCS__Group__144459);
             rule__NavigatingSemiArgCS__Group__2();
 
             state._fsp--;
@@ -62018,25 +64486,25 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20808:1: rule__NavigatingSemiArgCS__Group__1__Impl : ( ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21826:1: rule__NavigatingSemiArgCS__Group__1__Impl : ( ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 ) ) ;
     public final void rule__NavigatingSemiArgCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20812:1: ( ( ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20813:1: ( ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21830:1: ( ( ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21831:1: ( ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20813:1: ( ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20814:1: ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21831:1: ( ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21832:1: ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getOwnedNameExpressionAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20815:1: ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20815:2: rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21833:1: ( rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21833:2: rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingSemiArgCS__Group__1__Impl42616);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingSemiArgCS__Group__1__Impl44486);
             rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1();
 
             state._fsp--;
@@ -62069,16 +64537,16 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20825:1: rule__NavigatingSemiArgCS__Group__2 : rule__NavigatingSemiArgCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21843:1: rule__NavigatingSemiArgCS__Group__2 : rule__NavigatingSemiArgCS__Group__2__Impl ;
     public final void rule__NavigatingSemiArgCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20829:1: ( rule__NavigatingSemiArgCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20830:2: rule__NavigatingSemiArgCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21847:1: ( rule__NavigatingSemiArgCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21848:2: rule__NavigatingSemiArgCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__2__Impl_in_rule__NavigatingSemiArgCS__Group__242646);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group__2__Impl_in_rule__NavigatingSemiArgCS__Group__244516);
             rule__NavigatingSemiArgCS__Group__2__Impl();
 
             state._fsp--;
@@ -62102,33 +64570,33 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20836:1: rule__NavigatingSemiArgCS__Group__2__Impl : ( ( rule__NavigatingSemiArgCS__Group_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21854:1: rule__NavigatingSemiArgCS__Group__2__Impl : ( ( rule__NavigatingSemiArgCS__Group_2__0 )? ) ;
     public final void rule__NavigatingSemiArgCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20840:1: ( ( ( rule__NavigatingSemiArgCS__Group_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20841:1: ( ( rule__NavigatingSemiArgCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21858:1: ( ( ( rule__NavigatingSemiArgCS__Group_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21859:1: ( ( rule__NavigatingSemiArgCS__Group_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20841:1: ( ( rule__NavigatingSemiArgCS__Group_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20842:1: ( rule__NavigatingSemiArgCS__Group_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21859:1: ( ( rule__NavigatingSemiArgCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21860:1: ( rule__NavigatingSemiArgCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20843:1: ( rule__NavigatingSemiArgCS__Group_2__0 )?
-            int alt216=2;
-            int LA216_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21861:1: ( rule__NavigatingSemiArgCS__Group_2__0 )?
+            int alt244=2;
+            int LA244_0 = input.LA(1);
 
-            if ( (LA216_0==97) ) {
-                alt216=1;
+            if ( (LA244_0==106) ) {
+                alt244=1;
             }
-            switch (alt216) {
+            switch (alt244) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20843:2: rule__NavigatingSemiArgCS__Group_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21861:2: rule__NavigatingSemiArgCS__Group_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__0_in_rule__NavigatingSemiArgCS__Group__2__Impl42673);
+                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__0_in_rule__NavigatingSemiArgCS__Group__2__Impl44543);
                     rule__NavigatingSemiArgCS__Group_2__0();
 
                     state._fsp--;
@@ -62164,21 +64632,21 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20859:1: rule__NavigatingSemiArgCS__Group_2__0 : rule__NavigatingSemiArgCS__Group_2__0__Impl rule__NavigatingSemiArgCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21877:1: rule__NavigatingSemiArgCS__Group_2__0 : rule__NavigatingSemiArgCS__Group_2__0__Impl rule__NavigatingSemiArgCS__Group_2__1 ;
     public final void rule__NavigatingSemiArgCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20863:1: ( rule__NavigatingSemiArgCS__Group_2__0__Impl rule__NavigatingSemiArgCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20864:2: rule__NavigatingSemiArgCS__Group_2__0__Impl rule__NavigatingSemiArgCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21881:1: ( rule__NavigatingSemiArgCS__Group_2__0__Impl rule__NavigatingSemiArgCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21882:2: rule__NavigatingSemiArgCS__Group_2__0__Impl rule__NavigatingSemiArgCS__Group_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__0__Impl_in_rule__NavigatingSemiArgCS__Group_2__042710);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__0__Impl_in_rule__NavigatingSemiArgCS__Group_2__044580);
             rule__NavigatingSemiArgCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__1_in_rule__NavigatingSemiArgCS__Group_2__042713);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__1_in_rule__NavigatingSemiArgCS__Group_2__044583);
             rule__NavigatingSemiArgCS__Group_2__1();
 
             state._fsp--;
@@ -62202,22 +64670,22 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20871:1: rule__NavigatingSemiArgCS__Group_2__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21889:1: rule__NavigatingSemiArgCS__Group_2__0__Impl : ( ':' ) ;
     public final void rule__NavigatingSemiArgCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20875:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20876:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21893:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21894:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20876:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20877:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21894:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21895:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getColonKeyword_2_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__NavigatingSemiArgCS__Group_2__0__Impl42741); if (state.failed) return ;
+            match(input,106,FollowSets001.FOLLOW_106_in_rule__NavigatingSemiArgCS__Group_2__0__Impl44611); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingSemiArgCSAccess().getColonKeyword_2_0()); 
             }
@@ -62243,21 +64711,21 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20890:1: rule__NavigatingSemiArgCS__Group_2__1 : rule__NavigatingSemiArgCS__Group_2__1__Impl rule__NavigatingSemiArgCS__Group_2__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21908:1: rule__NavigatingSemiArgCS__Group_2__1 : rule__NavigatingSemiArgCS__Group_2__1__Impl rule__NavigatingSemiArgCS__Group_2__2 ;
     public final void rule__NavigatingSemiArgCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20894:1: ( rule__NavigatingSemiArgCS__Group_2__1__Impl rule__NavigatingSemiArgCS__Group_2__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20895:2: rule__NavigatingSemiArgCS__Group_2__1__Impl rule__NavigatingSemiArgCS__Group_2__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21912:1: ( rule__NavigatingSemiArgCS__Group_2__1__Impl rule__NavigatingSemiArgCS__Group_2__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21913:2: rule__NavigatingSemiArgCS__Group_2__1__Impl rule__NavigatingSemiArgCS__Group_2__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__1__Impl_in_rule__NavigatingSemiArgCS__Group_2__142772);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__1__Impl_in_rule__NavigatingSemiArgCS__Group_2__144642);
             rule__NavigatingSemiArgCS__Group_2__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__2_in_rule__NavigatingSemiArgCS__Group_2__142775);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__2_in_rule__NavigatingSemiArgCS__Group_2__144645);
             rule__NavigatingSemiArgCS__Group_2__2();
 
             state._fsp--;
@@ -62281,25 +64749,25 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20902:1: rule__NavigatingSemiArgCS__Group_2__1__Impl : ( ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21920:1: rule__NavigatingSemiArgCS__Group_2__1__Impl : ( ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 ) ) ;
     public final void rule__NavigatingSemiArgCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20906:1: ( ( ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20907:1: ( ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21924:1: ( ( ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21925:1: ( ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20907:1: ( ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20908:1: ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21925:1: ( ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21926:1: ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getOwnedTypeAssignment_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20909:1: ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20909:2: rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21927:1: ( rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21927:2: rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1_in_rule__NavigatingSemiArgCS__Group_2__1__Impl42802);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1_in_rule__NavigatingSemiArgCS__Group_2__1__Impl44672);
             rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1();
 
             state._fsp--;
@@ -62332,16 +64800,16 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20919:1: rule__NavigatingSemiArgCS__Group_2__2 : rule__NavigatingSemiArgCS__Group_2__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21937:1: rule__NavigatingSemiArgCS__Group_2__2 : rule__NavigatingSemiArgCS__Group_2__2__Impl ;
     public final void rule__NavigatingSemiArgCS__Group_2__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20923:1: ( rule__NavigatingSemiArgCS__Group_2__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20924:2: rule__NavigatingSemiArgCS__Group_2__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21941:1: ( rule__NavigatingSemiArgCS__Group_2__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21942:2: rule__NavigatingSemiArgCS__Group_2__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__2__Impl_in_rule__NavigatingSemiArgCS__Group_2__242832);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2__2__Impl_in_rule__NavigatingSemiArgCS__Group_2__244702);
             rule__NavigatingSemiArgCS__Group_2__2__Impl();
 
             state._fsp--;
@@ -62365,33 +64833,33 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20930:1: rule__NavigatingSemiArgCS__Group_2__2__Impl : ( ( rule__NavigatingSemiArgCS__Group_2_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21948:1: rule__NavigatingSemiArgCS__Group_2__2__Impl : ( ( rule__NavigatingSemiArgCS__Group_2_2__0 )? ) ;
     public final void rule__NavigatingSemiArgCS__Group_2__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20934:1: ( ( ( rule__NavigatingSemiArgCS__Group_2_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20935:1: ( ( rule__NavigatingSemiArgCS__Group_2_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21952:1: ( ( ( rule__NavigatingSemiArgCS__Group_2_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21953:1: ( ( rule__NavigatingSemiArgCS__Group_2_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20935:1: ( ( rule__NavigatingSemiArgCS__Group_2_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20936:1: ( rule__NavigatingSemiArgCS__Group_2_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21953:1: ( ( rule__NavigatingSemiArgCS__Group_2_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21954:1: ( rule__NavigatingSemiArgCS__Group_2_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getGroup_2_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20937:1: ( rule__NavigatingSemiArgCS__Group_2_2__0 )?
-            int alt217=2;
-            int LA217_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21955:1: ( rule__NavigatingSemiArgCS__Group_2_2__0 )?
+            int alt245=2;
+            int LA245_0 = input.LA(1);
 
-            if ( (LA217_0==70) ) {
-                alt217=1;
+            if ( (LA245_0==79) ) {
+                alt245=1;
             }
-            switch (alt217) {
+            switch (alt245) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20937:2: rule__NavigatingSemiArgCS__Group_2_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21955:2: rule__NavigatingSemiArgCS__Group_2_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__0_in_rule__NavigatingSemiArgCS__Group_2__2__Impl42859);
+                    pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__0_in_rule__NavigatingSemiArgCS__Group_2__2__Impl44729);
                     rule__NavigatingSemiArgCS__Group_2_2__0();
 
                     state._fsp--;
@@ -62427,21 +64895,21 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20953:1: rule__NavigatingSemiArgCS__Group_2_2__0 : rule__NavigatingSemiArgCS__Group_2_2__0__Impl rule__NavigatingSemiArgCS__Group_2_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21971:1: rule__NavigatingSemiArgCS__Group_2_2__0 : rule__NavigatingSemiArgCS__Group_2_2__0__Impl rule__NavigatingSemiArgCS__Group_2_2__1 ;
     public final void rule__NavigatingSemiArgCS__Group_2_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20957:1: ( rule__NavigatingSemiArgCS__Group_2_2__0__Impl rule__NavigatingSemiArgCS__Group_2_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20958:2: rule__NavigatingSemiArgCS__Group_2_2__0__Impl rule__NavigatingSemiArgCS__Group_2_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21975:1: ( rule__NavigatingSemiArgCS__Group_2_2__0__Impl rule__NavigatingSemiArgCS__Group_2_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21976:2: rule__NavigatingSemiArgCS__Group_2_2__0__Impl rule__NavigatingSemiArgCS__Group_2_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__0__Impl_in_rule__NavigatingSemiArgCS__Group_2_2__042896);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__0__Impl_in_rule__NavigatingSemiArgCS__Group_2_2__044766);
             rule__NavigatingSemiArgCS__Group_2_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__1_in_rule__NavigatingSemiArgCS__Group_2_2__042899);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__1_in_rule__NavigatingSemiArgCS__Group_2_2__044769);
             rule__NavigatingSemiArgCS__Group_2_2__1();
 
             state._fsp--;
@@ -62465,22 +64933,22 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20965:1: rule__NavigatingSemiArgCS__Group_2_2__0__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21983:1: rule__NavigatingSemiArgCS__Group_2_2__0__Impl : ( '=' ) ;
     public final void rule__NavigatingSemiArgCS__Group_2_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20969:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20970:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21987:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21988:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20970:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20971:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21988:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21989:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getEqualsSignKeyword_2_2_0()); 
             }
-            match(input,70,FollowSets001.FOLLOW_70_in_rule__NavigatingSemiArgCS__Group_2_2__0__Impl42927); if (state.failed) return ;
+            match(input,79,FollowSets001.FOLLOW_79_in_rule__NavigatingSemiArgCS__Group_2_2__0__Impl44797); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingSemiArgCSAccess().getEqualsSignKeyword_2_2_0()); 
             }
@@ -62506,16 +64974,16 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20984:1: rule__NavigatingSemiArgCS__Group_2_2__1 : rule__NavigatingSemiArgCS__Group_2_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22002:1: rule__NavigatingSemiArgCS__Group_2_2__1 : rule__NavigatingSemiArgCS__Group_2_2__1__Impl ;
     public final void rule__NavigatingSemiArgCS__Group_2_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20988:1: ( rule__NavigatingSemiArgCS__Group_2_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20989:2: rule__NavigatingSemiArgCS__Group_2_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22006:1: ( rule__NavigatingSemiArgCS__Group_2_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22007:2: rule__NavigatingSemiArgCS__Group_2_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__1__Impl_in_rule__NavigatingSemiArgCS__Group_2_2__142958);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__1__Impl_in_rule__NavigatingSemiArgCS__Group_2_2__144828);
             rule__NavigatingSemiArgCS__Group_2_2__1__Impl();
 
             state._fsp--;
@@ -62539,25 +65007,25 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__Group_2_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20995:1: rule__NavigatingSemiArgCS__Group_2_2__1__Impl : ( ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22013:1: rule__NavigatingSemiArgCS__Group_2_2__1__Impl : ( ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 ) ) ;
     public final void rule__NavigatingSemiArgCS__Group_2_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:20999:1: ( ( ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21000:1: ( ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22017:1: ( ( ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22018:1: ( ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21000:1: ( ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21001:1: ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22018:1: ( ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22019:1: ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getOwnedInitExpressionAssignment_2_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21002:1: ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21002:2: rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22020:1: ( rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22020:2: rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1_in_rule__NavigatingSemiArgCS__Group_2_2__1__Impl42985);
+            pushFollow(FollowSets001.FOLLOW_rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1_in_rule__NavigatingSemiArgCS__Group_2_2__1__Impl44855);
             rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1();
 
             state._fsp--;
@@ -62590,21 +65058,21 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21016:1: rule__IfExpCS__Group__0 : rule__IfExpCS__Group__0__Impl rule__IfExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22034:1: rule__IfExpCS__Group__0 : rule__IfExpCS__Group__0__Impl rule__IfExpCS__Group__1 ;
     public final void rule__IfExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21020:1: ( rule__IfExpCS__Group__0__Impl rule__IfExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21021:2: rule__IfExpCS__Group__0__Impl rule__IfExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22038:1: ( rule__IfExpCS__Group__0__Impl rule__IfExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22039:2: rule__IfExpCS__Group__0__Impl rule__IfExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__0__Impl_in_rule__IfExpCS__Group__043019);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__0__Impl_in_rule__IfExpCS__Group__044889);
             rule__IfExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__1_in_rule__IfExpCS__Group__043022);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__1_in_rule__IfExpCS__Group__044892);
             rule__IfExpCS__Group__1();
 
             state._fsp--;
@@ -62628,22 +65096,22 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21028:1: rule__IfExpCS__Group__0__Impl : ( 'if' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22046:1: rule__IfExpCS__Group__0__Impl : ( 'if' ) ;
     public final void rule__IfExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21032:1: ( ( 'if' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21033:1: ( 'if' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22050:1: ( ( 'if' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22051:1: ( 'if' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21033:1: ( 'if' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21034:1: 'if'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22051:1: ( 'if' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22052:1: 'if'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getIfKeyword_0()); 
             }
-            match(input,112,FollowSets001.FOLLOW_112_in_rule__IfExpCS__Group__0__Impl43050); if (state.failed) return ;
+            match(input,121,FollowSets001.FOLLOW_121_in_rule__IfExpCS__Group__0__Impl44920); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIfExpCSAccess().getIfKeyword_0()); 
             }
@@ -62669,21 +65137,21 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21047:1: rule__IfExpCS__Group__1 : rule__IfExpCS__Group__1__Impl rule__IfExpCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22065:1: rule__IfExpCS__Group__1 : rule__IfExpCS__Group__1__Impl rule__IfExpCS__Group__2 ;
     public final void rule__IfExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21051:1: ( rule__IfExpCS__Group__1__Impl rule__IfExpCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21052:2: rule__IfExpCS__Group__1__Impl rule__IfExpCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22069:1: ( rule__IfExpCS__Group__1__Impl rule__IfExpCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22070:2: rule__IfExpCS__Group__1__Impl rule__IfExpCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__1__Impl_in_rule__IfExpCS__Group__143081);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__1__Impl_in_rule__IfExpCS__Group__144951);
             rule__IfExpCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__2_in_rule__IfExpCS__Group__143084);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__2_in_rule__IfExpCS__Group__144954);
             rule__IfExpCS__Group__2();
 
             state._fsp--;
@@ -62707,25 +65175,25 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21059:1: rule__IfExpCS__Group__1__Impl : ( ( rule__IfExpCS__OwnedConditionAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22077:1: rule__IfExpCS__Group__1__Impl : ( ( rule__IfExpCS__OwnedConditionAssignment_1 ) ) ;
     public final void rule__IfExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21063:1: ( ( ( rule__IfExpCS__OwnedConditionAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21064:1: ( ( rule__IfExpCS__OwnedConditionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22081:1: ( ( ( rule__IfExpCS__OwnedConditionAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22082:1: ( ( rule__IfExpCS__OwnedConditionAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21064:1: ( ( rule__IfExpCS__OwnedConditionAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21065:1: ( rule__IfExpCS__OwnedConditionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22082:1: ( ( rule__IfExpCS__OwnedConditionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22083:1: ( rule__IfExpCS__OwnedConditionAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getOwnedConditionAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21066:1: ( rule__IfExpCS__OwnedConditionAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21066:2: rule__IfExpCS__OwnedConditionAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22084:1: ( rule__IfExpCS__OwnedConditionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22084:2: rule__IfExpCS__OwnedConditionAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__OwnedConditionAssignment_1_in_rule__IfExpCS__Group__1__Impl43111);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__OwnedConditionAssignment_1_in_rule__IfExpCS__Group__1__Impl44981);
             rule__IfExpCS__OwnedConditionAssignment_1();
 
             state._fsp--;
@@ -62758,21 +65226,21 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21076:1: rule__IfExpCS__Group__2 : rule__IfExpCS__Group__2__Impl rule__IfExpCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22094:1: rule__IfExpCS__Group__2 : rule__IfExpCS__Group__2__Impl rule__IfExpCS__Group__3 ;
     public final void rule__IfExpCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21080:1: ( rule__IfExpCS__Group__2__Impl rule__IfExpCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21081:2: rule__IfExpCS__Group__2__Impl rule__IfExpCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22098:1: ( rule__IfExpCS__Group__2__Impl rule__IfExpCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22099:2: rule__IfExpCS__Group__2__Impl rule__IfExpCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__2__Impl_in_rule__IfExpCS__Group__243141);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__2__Impl_in_rule__IfExpCS__Group__245011);
             rule__IfExpCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__3_in_rule__IfExpCS__Group__243144);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__3_in_rule__IfExpCS__Group__245014);
             rule__IfExpCS__Group__3();
 
             state._fsp--;
@@ -62796,22 +65264,22 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21088:1: rule__IfExpCS__Group__2__Impl : ( 'then' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22106:1: rule__IfExpCS__Group__2__Impl : ( 'then' ) ;
     public final void rule__IfExpCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21092:1: ( ( 'then' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21093:1: ( 'then' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22110:1: ( ( 'then' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22111:1: ( 'then' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21093:1: ( 'then' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21094:1: 'then'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22111:1: ( 'then' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22112:1: 'then'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getThenKeyword_2()); 
             }
-            match(input,113,FollowSets001.FOLLOW_113_in_rule__IfExpCS__Group__2__Impl43172); if (state.failed) return ;
+            match(input,122,FollowSets001.FOLLOW_122_in_rule__IfExpCS__Group__2__Impl45042); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIfExpCSAccess().getThenKeyword_2()); 
             }
@@ -62837,21 +65305,21 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21107:1: rule__IfExpCS__Group__3 : rule__IfExpCS__Group__3__Impl rule__IfExpCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22125:1: rule__IfExpCS__Group__3 : rule__IfExpCS__Group__3__Impl rule__IfExpCS__Group__4 ;
     public final void rule__IfExpCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21111:1: ( rule__IfExpCS__Group__3__Impl rule__IfExpCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21112:2: rule__IfExpCS__Group__3__Impl rule__IfExpCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22129:1: ( rule__IfExpCS__Group__3__Impl rule__IfExpCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22130:2: rule__IfExpCS__Group__3__Impl rule__IfExpCS__Group__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__3__Impl_in_rule__IfExpCS__Group__343203);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__3__Impl_in_rule__IfExpCS__Group__345073);
             rule__IfExpCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__4_in_rule__IfExpCS__Group__343206);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__4_in_rule__IfExpCS__Group__345076);
             rule__IfExpCS__Group__4();
 
             state._fsp--;
@@ -62875,25 +65343,25 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21119:1: rule__IfExpCS__Group__3__Impl : ( ( rule__IfExpCS__OwnedThenExpressionAssignment_3 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22137:1: rule__IfExpCS__Group__3__Impl : ( ( rule__IfExpCS__OwnedThenExpressionAssignment_3 ) ) ;
     public final void rule__IfExpCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21123:1: ( ( ( rule__IfExpCS__OwnedThenExpressionAssignment_3 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21124:1: ( ( rule__IfExpCS__OwnedThenExpressionAssignment_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22141:1: ( ( ( rule__IfExpCS__OwnedThenExpressionAssignment_3 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22142:1: ( ( rule__IfExpCS__OwnedThenExpressionAssignment_3 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21124:1: ( ( rule__IfExpCS__OwnedThenExpressionAssignment_3 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21125:1: ( rule__IfExpCS__OwnedThenExpressionAssignment_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22142:1: ( ( rule__IfExpCS__OwnedThenExpressionAssignment_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22143:1: ( rule__IfExpCS__OwnedThenExpressionAssignment_3 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getOwnedThenExpressionAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21126:1: ( rule__IfExpCS__OwnedThenExpressionAssignment_3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21126:2: rule__IfExpCS__OwnedThenExpressionAssignment_3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22144:1: ( rule__IfExpCS__OwnedThenExpressionAssignment_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22144:2: rule__IfExpCS__OwnedThenExpressionAssignment_3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__OwnedThenExpressionAssignment_3_in_rule__IfExpCS__Group__3__Impl43233);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__OwnedThenExpressionAssignment_3_in_rule__IfExpCS__Group__3__Impl45103);
             rule__IfExpCS__OwnedThenExpressionAssignment_3();
 
             state._fsp--;
@@ -62926,21 +65394,21 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21136:1: rule__IfExpCS__Group__4 : rule__IfExpCS__Group__4__Impl rule__IfExpCS__Group__5 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22154:1: rule__IfExpCS__Group__4 : rule__IfExpCS__Group__4__Impl rule__IfExpCS__Group__5 ;
     public final void rule__IfExpCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21140:1: ( rule__IfExpCS__Group__4__Impl rule__IfExpCS__Group__5 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21141:2: rule__IfExpCS__Group__4__Impl rule__IfExpCS__Group__5
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22158:1: ( rule__IfExpCS__Group__4__Impl rule__IfExpCS__Group__5 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22159:2: rule__IfExpCS__Group__4__Impl rule__IfExpCS__Group__5
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__4__Impl_in_rule__IfExpCS__Group__443263);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__4__Impl_in_rule__IfExpCS__Group__445133);
             rule__IfExpCS__Group__4__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__5_in_rule__IfExpCS__Group__443266);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__5_in_rule__IfExpCS__Group__445136);
             rule__IfExpCS__Group__5();
 
             state._fsp--;
@@ -62964,37 +65432,37 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21148:1: rule__IfExpCS__Group__4__Impl : ( ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22166:1: rule__IfExpCS__Group__4__Impl : ( ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )* ) ;
     public final void rule__IfExpCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21152:1: ( ( ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21153:1: ( ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22170:1: ( ( ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22171:1: ( ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21153:1: ( ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21154:1: ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22171:1: ( ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22172:1: ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getOwnedIfThenExpressionsAssignment_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21155:1: ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )*
-            loop218:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22173:1: ( rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 )*
+            loop246:
             do {
-                int alt218=2;
-                int LA218_0 = input.LA(1);
+                int alt246=2;
+                int LA246_0 = input.LA(1);
 
-                if ( (LA218_0==116) ) {
-                    alt218=1;
+                if ( (LA246_0==125) ) {
+                    alt246=1;
                 }
 
 
-                switch (alt218) {
+                switch (alt246) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21155:2: rule__IfExpCS__OwnedIfThenExpressionsAssignment_4
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22173:2: rule__IfExpCS__OwnedIfThenExpressionsAssignment_4
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__OwnedIfThenExpressionsAssignment_4_in_rule__IfExpCS__Group__4__Impl43293);
+            	    pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__OwnedIfThenExpressionsAssignment_4_in_rule__IfExpCS__Group__4__Impl45163);
             	    rule__IfExpCS__OwnedIfThenExpressionsAssignment_4();
 
             	    state._fsp--;
@@ -63004,7 +65472,7 @@
             	    break;
 
             	default :
-            	    break loop218;
+            	    break loop246;
                 }
             } while (true);
 
@@ -63033,21 +65501,21 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21165:1: rule__IfExpCS__Group__5 : rule__IfExpCS__Group__5__Impl rule__IfExpCS__Group__6 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22183:1: rule__IfExpCS__Group__5 : rule__IfExpCS__Group__5__Impl rule__IfExpCS__Group__6 ;
     public final void rule__IfExpCS__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21169:1: ( rule__IfExpCS__Group__5__Impl rule__IfExpCS__Group__6 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21170:2: rule__IfExpCS__Group__5__Impl rule__IfExpCS__Group__6
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22187:1: ( rule__IfExpCS__Group__5__Impl rule__IfExpCS__Group__6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22188:2: rule__IfExpCS__Group__5__Impl rule__IfExpCS__Group__6
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__5__Impl_in_rule__IfExpCS__Group__543324);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__5__Impl_in_rule__IfExpCS__Group__545194);
             rule__IfExpCS__Group__5__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__6_in_rule__IfExpCS__Group__543327);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__6_in_rule__IfExpCS__Group__545197);
             rule__IfExpCS__Group__6();
 
             state._fsp--;
@@ -63071,22 +65539,22 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__5__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21177:1: rule__IfExpCS__Group__5__Impl : ( 'else' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22195:1: rule__IfExpCS__Group__5__Impl : ( 'else' ) ;
     public final void rule__IfExpCS__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21181:1: ( ( 'else' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21182:1: ( 'else' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22199:1: ( ( 'else' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22200:1: ( 'else' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21182:1: ( 'else' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21183:1: 'else'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22200:1: ( 'else' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22201:1: 'else'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getElseKeyword_5()); 
             }
-            match(input,114,FollowSets001.FOLLOW_114_in_rule__IfExpCS__Group__5__Impl43355); if (state.failed) return ;
+            match(input,123,FollowSets001.FOLLOW_123_in_rule__IfExpCS__Group__5__Impl45225); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIfExpCSAccess().getElseKeyword_5()); 
             }
@@ -63112,21 +65580,21 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21196:1: rule__IfExpCS__Group__6 : rule__IfExpCS__Group__6__Impl rule__IfExpCS__Group__7 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22214:1: rule__IfExpCS__Group__6 : rule__IfExpCS__Group__6__Impl rule__IfExpCS__Group__7 ;
     public final void rule__IfExpCS__Group__6() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21200:1: ( rule__IfExpCS__Group__6__Impl rule__IfExpCS__Group__7 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21201:2: rule__IfExpCS__Group__6__Impl rule__IfExpCS__Group__7
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22218:1: ( rule__IfExpCS__Group__6__Impl rule__IfExpCS__Group__7 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22219:2: rule__IfExpCS__Group__6__Impl rule__IfExpCS__Group__7
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__6__Impl_in_rule__IfExpCS__Group__643386);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__6__Impl_in_rule__IfExpCS__Group__645256);
             rule__IfExpCS__Group__6__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__7_in_rule__IfExpCS__Group__643389);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__7_in_rule__IfExpCS__Group__645259);
             rule__IfExpCS__Group__7();
 
             state._fsp--;
@@ -63150,25 +65618,25 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__6__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21208:1: rule__IfExpCS__Group__6__Impl : ( ( rule__IfExpCS__OwnedElseExpressionAssignment_6 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22226:1: rule__IfExpCS__Group__6__Impl : ( ( rule__IfExpCS__OwnedElseExpressionAssignment_6 ) ) ;
     public final void rule__IfExpCS__Group__6__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21212:1: ( ( ( rule__IfExpCS__OwnedElseExpressionAssignment_6 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21213:1: ( ( rule__IfExpCS__OwnedElseExpressionAssignment_6 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22230:1: ( ( ( rule__IfExpCS__OwnedElseExpressionAssignment_6 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22231:1: ( ( rule__IfExpCS__OwnedElseExpressionAssignment_6 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21213:1: ( ( rule__IfExpCS__OwnedElseExpressionAssignment_6 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21214:1: ( rule__IfExpCS__OwnedElseExpressionAssignment_6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22231:1: ( ( rule__IfExpCS__OwnedElseExpressionAssignment_6 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22232:1: ( rule__IfExpCS__OwnedElseExpressionAssignment_6 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getOwnedElseExpressionAssignment_6()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21215:1: ( rule__IfExpCS__OwnedElseExpressionAssignment_6 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21215:2: rule__IfExpCS__OwnedElseExpressionAssignment_6
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22233:1: ( rule__IfExpCS__OwnedElseExpressionAssignment_6 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22233:2: rule__IfExpCS__OwnedElseExpressionAssignment_6
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__OwnedElseExpressionAssignment_6_in_rule__IfExpCS__Group__6__Impl43416);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__OwnedElseExpressionAssignment_6_in_rule__IfExpCS__Group__6__Impl45286);
             rule__IfExpCS__OwnedElseExpressionAssignment_6();
 
             state._fsp--;
@@ -63201,16 +65669,16 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__7"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21225:1: rule__IfExpCS__Group__7 : rule__IfExpCS__Group__7__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22243:1: rule__IfExpCS__Group__7 : rule__IfExpCS__Group__7__Impl ;
     public final void rule__IfExpCS__Group__7() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21229:1: ( rule__IfExpCS__Group__7__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21230:2: rule__IfExpCS__Group__7__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22247:1: ( rule__IfExpCS__Group__7__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22248:2: rule__IfExpCS__Group__7__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__7__Impl_in_rule__IfExpCS__Group__743446);
+            pushFollow(FollowSets001.FOLLOW_rule__IfExpCS__Group__7__Impl_in_rule__IfExpCS__Group__745316);
             rule__IfExpCS__Group__7__Impl();
 
             state._fsp--;
@@ -63234,22 +65702,22 @@
 
 
     // $ANTLR start "rule__IfExpCS__Group__7__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21236:1: rule__IfExpCS__Group__7__Impl : ( 'endif' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22254:1: rule__IfExpCS__Group__7__Impl : ( 'endif' ) ;
     public final void rule__IfExpCS__Group__7__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21240:1: ( ( 'endif' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21241:1: ( 'endif' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22258:1: ( ( 'endif' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22259:1: ( 'endif' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21241:1: ( 'endif' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21242:1: 'endif'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22259:1: ( 'endif' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22260:1: 'endif'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getEndifKeyword_7()); 
             }
-            match(input,115,FollowSets001.FOLLOW_115_in_rule__IfExpCS__Group__7__Impl43474); if (state.failed) return ;
+            match(input,124,FollowSets001.FOLLOW_124_in_rule__IfExpCS__Group__7__Impl45344); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIfExpCSAccess().getEndifKeyword_7()); 
             }
@@ -63275,21 +65743,21 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21271:1: rule__ElseIfThenExpCS__Group__0 : rule__ElseIfThenExpCS__Group__0__Impl rule__ElseIfThenExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22289:1: rule__ElseIfThenExpCS__Group__0 : rule__ElseIfThenExpCS__Group__0__Impl rule__ElseIfThenExpCS__Group__1 ;
     public final void rule__ElseIfThenExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21275:1: ( rule__ElseIfThenExpCS__Group__0__Impl rule__ElseIfThenExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21276:2: rule__ElseIfThenExpCS__Group__0__Impl rule__ElseIfThenExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22293:1: ( rule__ElseIfThenExpCS__Group__0__Impl rule__ElseIfThenExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22294:2: rule__ElseIfThenExpCS__Group__0__Impl rule__ElseIfThenExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__0__Impl_in_rule__ElseIfThenExpCS__Group__043521);
+            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__0__Impl_in_rule__ElseIfThenExpCS__Group__045391);
             rule__ElseIfThenExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__1_in_rule__ElseIfThenExpCS__Group__043524);
+            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__1_in_rule__ElseIfThenExpCS__Group__045394);
             rule__ElseIfThenExpCS__Group__1();
 
             state._fsp--;
@@ -63313,22 +65781,22 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21283:1: rule__ElseIfThenExpCS__Group__0__Impl : ( 'elseif' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22301:1: rule__ElseIfThenExpCS__Group__0__Impl : ( 'elseif' ) ;
     public final void rule__ElseIfThenExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21287:1: ( ( 'elseif' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21288:1: ( 'elseif' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22305:1: ( ( 'elseif' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22306:1: ( 'elseif' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21288:1: ( 'elseif' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21289:1: 'elseif'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22306:1: ( 'elseif' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22307:1: 'elseif'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getElseIfThenExpCSAccess().getElseifKeyword_0()); 
             }
-            match(input,116,FollowSets001.FOLLOW_116_in_rule__ElseIfThenExpCS__Group__0__Impl43552); if (state.failed) return ;
+            match(input,125,FollowSets001.FOLLOW_125_in_rule__ElseIfThenExpCS__Group__0__Impl45422); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getElseIfThenExpCSAccess().getElseifKeyword_0()); 
             }
@@ -63354,21 +65822,21 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21302:1: rule__ElseIfThenExpCS__Group__1 : rule__ElseIfThenExpCS__Group__1__Impl rule__ElseIfThenExpCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22320:1: rule__ElseIfThenExpCS__Group__1 : rule__ElseIfThenExpCS__Group__1__Impl rule__ElseIfThenExpCS__Group__2 ;
     public final void rule__ElseIfThenExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21306:1: ( rule__ElseIfThenExpCS__Group__1__Impl rule__ElseIfThenExpCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21307:2: rule__ElseIfThenExpCS__Group__1__Impl rule__ElseIfThenExpCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22324:1: ( rule__ElseIfThenExpCS__Group__1__Impl rule__ElseIfThenExpCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22325:2: rule__ElseIfThenExpCS__Group__1__Impl rule__ElseIfThenExpCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__1__Impl_in_rule__ElseIfThenExpCS__Group__143583);
+            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__1__Impl_in_rule__ElseIfThenExpCS__Group__145453);
             rule__ElseIfThenExpCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__2_in_rule__ElseIfThenExpCS__Group__143586);
+            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__2_in_rule__ElseIfThenExpCS__Group__145456);
             rule__ElseIfThenExpCS__Group__2();
 
             state._fsp--;
@@ -63392,25 +65860,25 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21314:1: rule__ElseIfThenExpCS__Group__1__Impl : ( ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22332:1: rule__ElseIfThenExpCS__Group__1__Impl : ( ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 ) ) ;
     public final void rule__ElseIfThenExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21318:1: ( ( ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21319:1: ( ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22336:1: ( ( ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22337:1: ( ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21319:1: ( ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21320:1: ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22337:1: ( ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22338:1: ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getElseIfThenExpCSAccess().getOwnedConditionAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21321:1: ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21321:2: rule__ElseIfThenExpCS__OwnedConditionAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22339:1: ( rule__ElseIfThenExpCS__OwnedConditionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22339:2: rule__ElseIfThenExpCS__OwnedConditionAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__OwnedConditionAssignment_1_in_rule__ElseIfThenExpCS__Group__1__Impl43613);
+            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__OwnedConditionAssignment_1_in_rule__ElseIfThenExpCS__Group__1__Impl45483);
             rule__ElseIfThenExpCS__OwnedConditionAssignment_1();
 
             state._fsp--;
@@ -63443,21 +65911,21 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21331:1: rule__ElseIfThenExpCS__Group__2 : rule__ElseIfThenExpCS__Group__2__Impl rule__ElseIfThenExpCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22349:1: rule__ElseIfThenExpCS__Group__2 : rule__ElseIfThenExpCS__Group__2__Impl rule__ElseIfThenExpCS__Group__3 ;
     public final void rule__ElseIfThenExpCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21335:1: ( rule__ElseIfThenExpCS__Group__2__Impl rule__ElseIfThenExpCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21336:2: rule__ElseIfThenExpCS__Group__2__Impl rule__ElseIfThenExpCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22353:1: ( rule__ElseIfThenExpCS__Group__2__Impl rule__ElseIfThenExpCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22354:2: rule__ElseIfThenExpCS__Group__2__Impl rule__ElseIfThenExpCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__2__Impl_in_rule__ElseIfThenExpCS__Group__243643);
+            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__2__Impl_in_rule__ElseIfThenExpCS__Group__245513);
             rule__ElseIfThenExpCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__3_in_rule__ElseIfThenExpCS__Group__243646);
+            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__3_in_rule__ElseIfThenExpCS__Group__245516);
             rule__ElseIfThenExpCS__Group__3();
 
             state._fsp--;
@@ -63481,22 +65949,22 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21343:1: rule__ElseIfThenExpCS__Group__2__Impl : ( 'then' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22361:1: rule__ElseIfThenExpCS__Group__2__Impl : ( 'then' ) ;
     public final void rule__ElseIfThenExpCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21347:1: ( ( 'then' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21348:1: ( 'then' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22365:1: ( ( 'then' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22366:1: ( 'then' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21348:1: ( 'then' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21349:1: 'then'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22366:1: ( 'then' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22367:1: 'then'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getElseIfThenExpCSAccess().getThenKeyword_2()); 
             }
-            match(input,113,FollowSets001.FOLLOW_113_in_rule__ElseIfThenExpCS__Group__2__Impl43674); if (state.failed) return ;
+            match(input,122,FollowSets001.FOLLOW_122_in_rule__ElseIfThenExpCS__Group__2__Impl45544); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getElseIfThenExpCSAccess().getThenKeyword_2()); 
             }
@@ -63522,16 +65990,16 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21362:1: rule__ElseIfThenExpCS__Group__3 : rule__ElseIfThenExpCS__Group__3__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22380:1: rule__ElseIfThenExpCS__Group__3 : rule__ElseIfThenExpCS__Group__3__Impl ;
     public final void rule__ElseIfThenExpCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21366:1: ( rule__ElseIfThenExpCS__Group__3__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21367:2: rule__ElseIfThenExpCS__Group__3__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22384:1: ( rule__ElseIfThenExpCS__Group__3__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22385:2: rule__ElseIfThenExpCS__Group__3__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__3__Impl_in_rule__ElseIfThenExpCS__Group__343705);
+            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__Group__3__Impl_in_rule__ElseIfThenExpCS__Group__345575);
             rule__ElseIfThenExpCS__Group__3__Impl();
 
             state._fsp--;
@@ -63555,25 +66023,25 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21373:1: rule__ElseIfThenExpCS__Group__3__Impl : ( ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22391:1: rule__ElseIfThenExpCS__Group__3__Impl : ( ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 ) ) ;
     public final void rule__ElseIfThenExpCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21377:1: ( ( ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21378:1: ( ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22395:1: ( ( ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22396:1: ( ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21378:1: ( ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21379:1: ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22396:1: ( ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22397:1: ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getElseIfThenExpCSAccess().getOwnedThenExpressionAssignment_3()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21380:1: ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21380:2: rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22398:1: ( rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22398:2: rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3_in_rule__ElseIfThenExpCS__Group__3__Impl43732);
+            pushFollow(FollowSets001.FOLLOW_rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3_in_rule__ElseIfThenExpCS__Group__3__Impl45602);
             rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3();
 
             state._fsp--;
@@ -63606,21 +66074,21 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21398:1: rule__LetExpCS__Group__0 : rule__LetExpCS__Group__0__Impl rule__LetExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22416:1: rule__LetExpCS__Group__0 : rule__LetExpCS__Group__0__Impl rule__LetExpCS__Group__1 ;
     public final void rule__LetExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21402:1: ( rule__LetExpCS__Group__0__Impl rule__LetExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21403:2: rule__LetExpCS__Group__0__Impl rule__LetExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22420:1: ( rule__LetExpCS__Group__0__Impl rule__LetExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22421:2: rule__LetExpCS__Group__0__Impl rule__LetExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__0__Impl_in_rule__LetExpCS__Group__043770);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__0__Impl_in_rule__LetExpCS__Group__045640);
             rule__LetExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__1_in_rule__LetExpCS__Group__043773);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__1_in_rule__LetExpCS__Group__045643);
             rule__LetExpCS__Group__1();
 
             state._fsp--;
@@ -63644,22 +66112,22 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21410:1: rule__LetExpCS__Group__0__Impl : ( 'let' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22428:1: rule__LetExpCS__Group__0__Impl : ( 'let' ) ;
     public final void rule__LetExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21414:1: ( ( 'let' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21415:1: ( 'let' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22432:1: ( ( 'let' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22433:1: ( 'let' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21415:1: ( 'let' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21416:1: 'let'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22433:1: ( 'let' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22434:1: 'let'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getLetKeyword_0()); 
             }
-            match(input,117,FollowSets001.FOLLOW_117_in_rule__LetExpCS__Group__0__Impl43801); if (state.failed) return ;
+            match(input,126,FollowSets001.FOLLOW_126_in_rule__LetExpCS__Group__0__Impl45671); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLetExpCSAccess().getLetKeyword_0()); 
             }
@@ -63685,21 +66153,21 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21429:1: rule__LetExpCS__Group__1 : rule__LetExpCS__Group__1__Impl rule__LetExpCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22447:1: rule__LetExpCS__Group__1 : rule__LetExpCS__Group__1__Impl rule__LetExpCS__Group__2 ;
     public final void rule__LetExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21433:1: ( rule__LetExpCS__Group__1__Impl rule__LetExpCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21434:2: rule__LetExpCS__Group__1__Impl rule__LetExpCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22451:1: ( rule__LetExpCS__Group__1__Impl rule__LetExpCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22452:2: rule__LetExpCS__Group__1__Impl rule__LetExpCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__1__Impl_in_rule__LetExpCS__Group__143832);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__1__Impl_in_rule__LetExpCS__Group__145702);
             rule__LetExpCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__2_in_rule__LetExpCS__Group__143835);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__2_in_rule__LetExpCS__Group__145705);
             rule__LetExpCS__Group__2();
 
             state._fsp--;
@@ -63723,25 +66191,25 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21441:1: rule__LetExpCS__Group__1__Impl : ( ( rule__LetExpCS__OwnedVariablesAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22459:1: rule__LetExpCS__Group__1__Impl : ( ( rule__LetExpCS__OwnedVariablesAssignment_1 ) ) ;
     public final void rule__LetExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21445:1: ( ( ( rule__LetExpCS__OwnedVariablesAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21446:1: ( ( rule__LetExpCS__OwnedVariablesAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22463:1: ( ( ( rule__LetExpCS__OwnedVariablesAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22464:1: ( ( rule__LetExpCS__OwnedVariablesAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21446:1: ( ( rule__LetExpCS__OwnedVariablesAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21447:1: ( rule__LetExpCS__OwnedVariablesAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22464:1: ( ( rule__LetExpCS__OwnedVariablesAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22465:1: ( rule__LetExpCS__OwnedVariablesAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getOwnedVariablesAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21448:1: ( rule__LetExpCS__OwnedVariablesAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21448:2: rule__LetExpCS__OwnedVariablesAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22466:1: ( rule__LetExpCS__OwnedVariablesAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22466:2: rule__LetExpCS__OwnedVariablesAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__OwnedVariablesAssignment_1_in_rule__LetExpCS__Group__1__Impl43862);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__OwnedVariablesAssignment_1_in_rule__LetExpCS__Group__1__Impl45732);
             rule__LetExpCS__OwnedVariablesAssignment_1();
 
             state._fsp--;
@@ -63774,21 +66242,21 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21458:1: rule__LetExpCS__Group__2 : rule__LetExpCS__Group__2__Impl rule__LetExpCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22476:1: rule__LetExpCS__Group__2 : rule__LetExpCS__Group__2__Impl rule__LetExpCS__Group__3 ;
     public final void rule__LetExpCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21462:1: ( rule__LetExpCS__Group__2__Impl rule__LetExpCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21463:2: rule__LetExpCS__Group__2__Impl rule__LetExpCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22480:1: ( rule__LetExpCS__Group__2__Impl rule__LetExpCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22481:2: rule__LetExpCS__Group__2__Impl rule__LetExpCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__2__Impl_in_rule__LetExpCS__Group__243892);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__2__Impl_in_rule__LetExpCS__Group__245762);
             rule__LetExpCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__3_in_rule__LetExpCS__Group__243895);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__3_in_rule__LetExpCS__Group__245765);
             rule__LetExpCS__Group__3();
 
             state._fsp--;
@@ -63812,37 +66280,37 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21470:1: rule__LetExpCS__Group__2__Impl : ( ( rule__LetExpCS__Group_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22488:1: rule__LetExpCS__Group__2__Impl : ( ( rule__LetExpCS__Group_2__0 )* ) ;
     public final void rule__LetExpCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21474:1: ( ( ( rule__LetExpCS__Group_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21475:1: ( ( rule__LetExpCS__Group_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22492:1: ( ( ( rule__LetExpCS__Group_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22493:1: ( ( rule__LetExpCS__Group_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21475:1: ( ( rule__LetExpCS__Group_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21476:1: ( rule__LetExpCS__Group_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22493:1: ( ( rule__LetExpCS__Group_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22494:1: ( rule__LetExpCS__Group_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21477:1: ( rule__LetExpCS__Group_2__0 )*
-            loop219:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22495:1: ( rule__LetExpCS__Group_2__0 )*
+            loop247:
             do {
-                int alt219=2;
-                int LA219_0 = input.LA(1);
+                int alt247=2;
+                int LA247_0 = input.LA(1);
 
-                if ( (LA219_0==98) ) {
-                    alt219=1;
+                if ( (LA247_0==107) ) {
+                    alt247=1;
                 }
 
 
-                switch (alt219) {
+                switch (alt247) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21477:2: rule__LetExpCS__Group_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22495:2: rule__LetExpCS__Group_2__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group_2__0_in_rule__LetExpCS__Group__2__Impl43922);
+            	    pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group_2__0_in_rule__LetExpCS__Group__2__Impl45792);
             	    rule__LetExpCS__Group_2__0();
 
             	    state._fsp--;
@@ -63852,7 +66320,7 @@
             	    break;
 
             	default :
-            	    break loop219;
+            	    break loop247;
                 }
             } while (true);
 
@@ -63881,21 +66349,21 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21487:1: rule__LetExpCS__Group__3 : rule__LetExpCS__Group__3__Impl rule__LetExpCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22505:1: rule__LetExpCS__Group__3 : rule__LetExpCS__Group__3__Impl rule__LetExpCS__Group__4 ;
     public final void rule__LetExpCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21491:1: ( rule__LetExpCS__Group__3__Impl rule__LetExpCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21492:2: rule__LetExpCS__Group__3__Impl rule__LetExpCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22509:1: ( rule__LetExpCS__Group__3__Impl rule__LetExpCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22510:2: rule__LetExpCS__Group__3__Impl rule__LetExpCS__Group__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__3__Impl_in_rule__LetExpCS__Group__343953);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__3__Impl_in_rule__LetExpCS__Group__345823);
             rule__LetExpCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__4_in_rule__LetExpCS__Group__343956);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__4_in_rule__LetExpCS__Group__345826);
             rule__LetExpCS__Group__4();
 
             state._fsp--;
@@ -63919,22 +66387,22 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21499:1: rule__LetExpCS__Group__3__Impl : ( 'in' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22517:1: rule__LetExpCS__Group__3__Impl : ( 'in' ) ;
     public final void rule__LetExpCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21503:1: ( ( 'in' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21504:1: ( 'in' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22521:1: ( ( 'in' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22522:1: ( 'in' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21504:1: ( 'in' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21505:1: 'in'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22522:1: ( 'in' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22523:1: 'in'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getInKeyword_3()); 
             }
-            match(input,111,FollowSets001.FOLLOW_111_in_rule__LetExpCS__Group__3__Impl43984); if (state.failed) return ;
+            match(input,120,FollowSets001.FOLLOW_120_in_rule__LetExpCS__Group__3__Impl45854); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLetExpCSAccess().getInKeyword_3()); 
             }
@@ -63960,16 +66428,16 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21518:1: rule__LetExpCS__Group__4 : rule__LetExpCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22536:1: rule__LetExpCS__Group__4 : rule__LetExpCS__Group__4__Impl ;
     public final void rule__LetExpCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21522:1: ( rule__LetExpCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21523:2: rule__LetExpCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22540:1: ( rule__LetExpCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22541:2: rule__LetExpCS__Group__4__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__4__Impl_in_rule__LetExpCS__Group__444015);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group__4__Impl_in_rule__LetExpCS__Group__445885);
             rule__LetExpCS__Group__4__Impl();
 
             state._fsp--;
@@ -63993,25 +66461,25 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21529:1: rule__LetExpCS__Group__4__Impl : ( ( rule__LetExpCS__OwnedInExpressionAssignment_4 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22547:1: rule__LetExpCS__Group__4__Impl : ( ( rule__LetExpCS__OwnedInExpressionAssignment_4 ) ) ;
     public final void rule__LetExpCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21533:1: ( ( ( rule__LetExpCS__OwnedInExpressionAssignment_4 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21534:1: ( ( rule__LetExpCS__OwnedInExpressionAssignment_4 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22551:1: ( ( ( rule__LetExpCS__OwnedInExpressionAssignment_4 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22552:1: ( ( rule__LetExpCS__OwnedInExpressionAssignment_4 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21534:1: ( ( rule__LetExpCS__OwnedInExpressionAssignment_4 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21535:1: ( rule__LetExpCS__OwnedInExpressionAssignment_4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22552:1: ( ( rule__LetExpCS__OwnedInExpressionAssignment_4 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22553:1: ( rule__LetExpCS__OwnedInExpressionAssignment_4 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getOwnedInExpressionAssignment_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21536:1: ( rule__LetExpCS__OwnedInExpressionAssignment_4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21536:2: rule__LetExpCS__OwnedInExpressionAssignment_4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22554:1: ( rule__LetExpCS__OwnedInExpressionAssignment_4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22554:2: rule__LetExpCS__OwnedInExpressionAssignment_4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__OwnedInExpressionAssignment_4_in_rule__LetExpCS__Group__4__Impl44042);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__OwnedInExpressionAssignment_4_in_rule__LetExpCS__Group__4__Impl45912);
             rule__LetExpCS__OwnedInExpressionAssignment_4();
 
             state._fsp--;
@@ -64044,21 +66512,21 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21556:1: rule__LetExpCS__Group_2__0 : rule__LetExpCS__Group_2__0__Impl rule__LetExpCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22574:1: rule__LetExpCS__Group_2__0 : rule__LetExpCS__Group_2__0__Impl rule__LetExpCS__Group_2__1 ;
     public final void rule__LetExpCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21560:1: ( rule__LetExpCS__Group_2__0__Impl rule__LetExpCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21561:2: rule__LetExpCS__Group_2__0__Impl rule__LetExpCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22578:1: ( rule__LetExpCS__Group_2__0__Impl rule__LetExpCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22579:2: rule__LetExpCS__Group_2__0__Impl rule__LetExpCS__Group_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group_2__0__Impl_in_rule__LetExpCS__Group_2__044082);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group_2__0__Impl_in_rule__LetExpCS__Group_2__045952);
             rule__LetExpCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group_2__1_in_rule__LetExpCS__Group_2__044085);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group_2__1_in_rule__LetExpCS__Group_2__045955);
             rule__LetExpCS__Group_2__1();
 
             state._fsp--;
@@ -64082,22 +66550,22 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21568:1: rule__LetExpCS__Group_2__0__Impl : ( ',' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22586:1: rule__LetExpCS__Group_2__0__Impl : ( ',' ) ;
     public final void rule__LetExpCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21572:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21573:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22590:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22591:1: ( ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21573:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21574:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22591:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22592:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0()); 
             }
-            match(input,98,FollowSets001.FOLLOW_98_in_rule__LetExpCS__Group_2__0__Impl44113); if (state.failed) return ;
+            match(input,107,FollowSets001.FOLLOW_107_in_rule__LetExpCS__Group_2__0__Impl45983); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0()); 
             }
@@ -64123,16 +66591,16 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21587:1: rule__LetExpCS__Group_2__1 : rule__LetExpCS__Group_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22605:1: rule__LetExpCS__Group_2__1 : rule__LetExpCS__Group_2__1__Impl ;
     public final void rule__LetExpCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21591:1: ( rule__LetExpCS__Group_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21592:2: rule__LetExpCS__Group_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22609:1: ( rule__LetExpCS__Group_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22610:2: rule__LetExpCS__Group_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group_2__1__Impl_in_rule__LetExpCS__Group_2__144144);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__Group_2__1__Impl_in_rule__LetExpCS__Group_2__146014);
             rule__LetExpCS__Group_2__1__Impl();
 
             state._fsp--;
@@ -64156,25 +66624,25 @@
 
 
     // $ANTLR start "rule__LetExpCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21598:1: rule__LetExpCS__Group_2__1__Impl : ( ( rule__LetExpCS__OwnedVariablesAssignment_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22616:1: rule__LetExpCS__Group_2__1__Impl : ( ( rule__LetExpCS__OwnedVariablesAssignment_2_1 ) ) ;
     public final void rule__LetExpCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21602:1: ( ( ( rule__LetExpCS__OwnedVariablesAssignment_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21603:1: ( ( rule__LetExpCS__OwnedVariablesAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22620:1: ( ( ( rule__LetExpCS__OwnedVariablesAssignment_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22621:1: ( ( rule__LetExpCS__OwnedVariablesAssignment_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21603:1: ( ( rule__LetExpCS__OwnedVariablesAssignment_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21604:1: ( rule__LetExpCS__OwnedVariablesAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22621:1: ( ( rule__LetExpCS__OwnedVariablesAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22622:1: ( rule__LetExpCS__OwnedVariablesAssignment_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getOwnedVariablesAssignment_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21605:1: ( rule__LetExpCS__OwnedVariablesAssignment_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21605:2: rule__LetExpCS__OwnedVariablesAssignment_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22623:1: ( rule__LetExpCS__OwnedVariablesAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22623:2: rule__LetExpCS__OwnedVariablesAssignment_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__OwnedVariablesAssignment_2_1_in_rule__LetExpCS__Group_2__1__Impl44171);
+            pushFollow(FollowSets001.FOLLOW_rule__LetExpCS__OwnedVariablesAssignment_2_1_in_rule__LetExpCS__Group_2__1__Impl46041);
             rule__LetExpCS__OwnedVariablesAssignment_2_1();
 
             state._fsp--;
@@ -64207,21 +66675,21 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21619:1: rule__LetVariableCS__Group__0 : rule__LetVariableCS__Group__0__Impl rule__LetVariableCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22637:1: rule__LetVariableCS__Group__0 : rule__LetVariableCS__Group__0__Impl rule__LetVariableCS__Group__1 ;
     public final void rule__LetVariableCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21623:1: ( rule__LetVariableCS__Group__0__Impl rule__LetVariableCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21624:2: rule__LetVariableCS__Group__0__Impl rule__LetVariableCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22641:1: ( rule__LetVariableCS__Group__0__Impl rule__LetVariableCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22642:2: rule__LetVariableCS__Group__0__Impl rule__LetVariableCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__0__Impl_in_rule__LetVariableCS__Group__044205);
+            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__0__Impl_in_rule__LetVariableCS__Group__046075);
             rule__LetVariableCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__1_in_rule__LetVariableCS__Group__044208);
+            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__1_in_rule__LetVariableCS__Group__046078);
             rule__LetVariableCS__Group__1();
 
             state._fsp--;
@@ -64245,25 +66713,25 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21631:1: rule__LetVariableCS__Group__0__Impl : ( ( rule__LetVariableCS__NameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22649:1: rule__LetVariableCS__Group__0__Impl : ( ( rule__LetVariableCS__NameAssignment_0 ) ) ;
     public final void rule__LetVariableCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21635:1: ( ( ( rule__LetVariableCS__NameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21636:1: ( ( rule__LetVariableCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22653:1: ( ( ( rule__LetVariableCS__NameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22654:1: ( ( rule__LetVariableCS__NameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21636:1: ( ( rule__LetVariableCS__NameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21637:1: ( rule__LetVariableCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22654:1: ( ( rule__LetVariableCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22655:1: ( rule__LetVariableCS__NameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21638:1: ( rule__LetVariableCS__NameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21638:2: rule__LetVariableCS__NameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22656:1: ( rule__LetVariableCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22656:2: rule__LetVariableCS__NameAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__NameAssignment_0_in_rule__LetVariableCS__Group__0__Impl44235);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__NameAssignment_0_in_rule__LetVariableCS__Group__0__Impl46105);
             rule__LetVariableCS__NameAssignment_0();
 
             state._fsp--;
@@ -64296,21 +66764,21 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21648:1: rule__LetVariableCS__Group__1 : rule__LetVariableCS__Group__1__Impl rule__LetVariableCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22666:1: rule__LetVariableCS__Group__1 : rule__LetVariableCS__Group__1__Impl rule__LetVariableCS__Group__2 ;
     public final void rule__LetVariableCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21652:1: ( rule__LetVariableCS__Group__1__Impl rule__LetVariableCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21653:2: rule__LetVariableCS__Group__1__Impl rule__LetVariableCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22670:1: ( rule__LetVariableCS__Group__1__Impl rule__LetVariableCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22671:2: rule__LetVariableCS__Group__1__Impl rule__LetVariableCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__1__Impl_in_rule__LetVariableCS__Group__144265);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group__1__Impl_in_rule__LetVariableCS__Group__146135);
             rule__LetVariableCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__2_in_rule__LetVariableCS__Group__144268);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group__2_in_rule__LetVariableCS__Group__146138);
             rule__LetVariableCS__Group__2();
 
             state._fsp--;
@@ -64334,33 +66802,33 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21660:1: rule__LetVariableCS__Group__1__Impl : ( ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22678:1: rule__LetVariableCS__Group__1__Impl : ( ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )? ) ;
     public final void rule__LetVariableCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21664:1: ( ( ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21665:1: ( ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22682:1: ( ( ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22683:1: ( ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21665:1: ( ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21666:1: ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22683:1: ( ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22684:1: ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getOwnedRoundBracketedClauseAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21667:1: ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )?
-            int alt220=2;
-            int LA220_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22685:1: ( rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 )?
+            int alt248=2;
+            int LA248_0 = input.LA(1);
 
-            if ( (LA220_0==95) ) {
-                alt220=1;
+            if ( (LA248_0==104) ) {
+                alt248=1;
             }
-            switch (alt220) {
+            switch (alt248) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21667:2: rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22685:2: rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1_in_rule__LetVariableCS__Group__1__Impl44295);
+                    pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1_in_rule__LetVariableCS__Group__1__Impl46165);
                     rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1();
 
                     state._fsp--;
@@ -64396,21 +66864,21 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21677:1: rule__LetVariableCS__Group__2 : rule__LetVariableCS__Group__2__Impl rule__LetVariableCS__Group__3 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22695:1: rule__LetVariableCS__Group__2 : rule__LetVariableCS__Group__2__Impl rule__LetVariableCS__Group__3 ;
     public final void rule__LetVariableCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21681:1: ( rule__LetVariableCS__Group__2__Impl rule__LetVariableCS__Group__3 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21682:2: rule__LetVariableCS__Group__2__Impl rule__LetVariableCS__Group__3
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22699:1: ( rule__LetVariableCS__Group__2__Impl rule__LetVariableCS__Group__3 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22700:2: rule__LetVariableCS__Group__2__Impl rule__LetVariableCS__Group__3
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__2__Impl_in_rule__LetVariableCS__Group__244326);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group__2__Impl_in_rule__LetVariableCS__Group__246196);
             rule__LetVariableCS__Group__2__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__3_in_rule__LetVariableCS__Group__244329);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group__3_in_rule__LetVariableCS__Group__246199);
             rule__LetVariableCS__Group__3();
 
             state._fsp--;
@@ -64434,33 +66902,33 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21689:1: rule__LetVariableCS__Group__2__Impl : ( ( rule__LetVariableCS__Group_2__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22707:1: rule__LetVariableCS__Group__2__Impl : ( ( rule__LetVariableCS__Group_2__0 )? ) ;
     public final void rule__LetVariableCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21693:1: ( ( ( rule__LetVariableCS__Group_2__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21694:1: ( ( rule__LetVariableCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22711:1: ( ( ( rule__LetVariableCS__Group_2__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22712:1: ( ( rule__LetVariableCS__Group_2__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21694:1: ( ( rule__LetVariableCS__Group_2__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21695:1: ( rule__LetVariableCS__Group_2__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22712:1: ( ( rule__LetVariableCS__Group_2__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22713:1: ( rule__LetVariableCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getGroup_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21696:1: ( rule__LetVariableCS__Group_2__0 )?
-            int alt221=2;
-            int LA221_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22714:1: ( rule__LetVariableCS__Group_2__0 )?
+            int alt249=2;
+            int LA249_0 = input.LA(1);
 
-            if ( (LA221_0==97) ) {
-                alt221=1;
+            if ( (LA249_0==106) ) {
+                alt249=1;
             }
-            switch (alt221) {
+            switch (alt249) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21696:2: rule__LetVariableCS__Group_2__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22714:2: rule__LetVariableCS__Group_2__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group_2__0_in_rule__LetVariableCS__Group__2__Impl44356);
+                    pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group_2__0_in_rule__LetVariableCS__Group__2__Impl46226);
                     rule__LetVariableCS__Group_2__0();
 
                     state._fsp--;
@@ -64496,21 +66964,21 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21706:1: rule__LetVariableCS__Group__3 : rule__LetVariableCS__Group__3__Impl rule__LetVariableCS__Group__4 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22724:1: rule__LetVariableCS__Group__3 : rule__LetVariableCS__Group__3__Impl rule__LetVariableCS__Group__4 ;
     public final void rule__LetVariableCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21710:1: ( rule__LetVariableCS__Group__3__Impl rule__LetVariableCS__Group__4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21711:2: rule__LetVariableCS__Group__3__Impl rule__LetVariableCS__Group__4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22728:1: ( rule__LetVariableCS__Group__3__Impl rule__LetVariableCS__Group__4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22729:2: rule__LetVariableCS__Group__3__Impl rule__LetVariableCS__Group__4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__3__Impl_in_rule__LetVariableCS__Group__344387);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group__3__Impl_in_rule__LetVariableCS__Group__346257);
             rule__LetVariableCS__Group__3__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__4_in_rule__LetVariableCS__Group__344390);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group__4_in_rule__LetVariableCS__Group__346260);
             rule__LetVariableCS__Group__4();
 
             state._fsp--;
@@ -64534,22 +67002,22 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__3__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21718:1: rule__LetVariableCS__Group__3__Impl : ( '=' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22736:1: rule__LetVariableCS__Group__3__Impl : ( '=' ) ;
     public final void rule__LetVariableCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21722:1: ( ( '=' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21723:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22740:1: ( ( '=' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22741:1: ( '=' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21723:1: ( '=' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21724:1: '='
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22741:1: ( '=' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22742:1: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getEqualsSignKeyword_3()); 
             }
-            match(input,70,FollowSets001.FOLLOW_70_in_rule__LetVariableCS__Group__3__Impl44418); if (state.failed) return ;
+            match(input,79,FollowSets002.FOLLOW_79_in_rule__LetVariableCS__Group__3__Impl46288); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLetVariableCSAccess().getEqualsSignKeyword_3()); 
             }
@@ -64575,16 +67043,16 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21737:1: rule__LetVariableCS__Group__4 : rule__LetVariableCS__Group__4__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22755:1: rule__LetVariableCS__Group__4 : rule__LetVariableCS__Group__4__Impl ;
     public final void rule__LetVariableCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21741:1: ( rule__LetVariableCS__Group__4__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21742:2: rule__LetVariableCS__Group__4__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22759:1: ( rule__LetVariableCS__Group__4__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22760:2: rule__LetVariableCS__Group__4__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group__4__Impl_in_rule__LetVariableCS__Group__444449);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group__4__Impl_in_rule__LetVariableCS__Group__446319);
             rule__LetVariableCS__Group__4__Impl();
 
             state._fsp--;
@@ -64608,25 +67076,25 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group__4__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21748:1: rule__LetVariableCS__Group__4__Impl : ( ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22766:1: rule__LetVariableCS__Group__4__Impl : ( ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 ) ) ;
     public final void rule__LetVariableCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21752:1: ( ( ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21753:1: ( ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22770:1: ( ( ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22771:1: ( ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21753:1: ( ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21754:1: ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22771:1: ( ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22772:1: ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getOwnedInitExpressionAssignment_4()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21755:1: ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21755:2: rule__LetVariableCS__OwnedInitExpressionAssignment_4
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22773:1: ( rule__LetVariableCS__OwnedInitExpressionAssignment_4 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22773:2: rule__LetVariableCS__OwnedInitExpressionAssignment_4
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__OwnedInitExpressionAssignment_4_in_rule__LetVariableCS__Group__4__Impl44476);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__OwnedInitExpressionAssignment_4_in_rule__LetVariableCS__Group__4__Impl46346);
             rule__LetVariableCS__OwnedInitExpressionAssignment_4();
 
             state._fsp--;
@@ -64659,21 +67127,21 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21775:1: rule__LetVariableCS__Group_2__0 : rule__LetVariableCS__Group_2__0__Impl rule__LetVariableCS__Group_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22793:1: rule__LetVariableCS__Group_2__0 : rule__LetVariableCS__Group_2__0__Impl rule__LetVariableCS__Group_2__1 ;
     public final void rule__LetVariableCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21779:1: ( rule__LetVariableCS__Group_2__0__Impl rule__LetVariableCS__Group_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21780:2: rule__LetVariableCS__Group_2__0__Impl rule__LetVariableCS__Group_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22797:1: ( rule__LetVariableCS__Group_2__0__Impl rule__LetVariableCS__Group_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22798:2: rule__LetVariableCS__Group_2__0__Impl rule__LetVariableCS__Group_2__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group_2__0__Impl_in_rule__LetVariableCS__Group_2__044516);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group_2__0__Impl_in_rule__LetVariableCS__Group_2__046386);
             rule__LetVariableCS__Group_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group_2__1_in_rule__LetVariableCS__Group_2__044519);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group_2__1_in_rule__LetVariableCS__Group_2__046389);
             rule__LetVariableCS__Group_2__1();
 
             state._fsp--;
@@ -64697,22 +67165,22 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21787:1: rule__LetVariableCS__Group_2__0__Impl : ( ':' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22805:1: rule__LetVariableCS__Group_2__0__Impl : ( ':' ) ;
     public final void rule__LetVariableCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21791:1: ( ( ':' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21792:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22809:1: ( ( ':' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22810:1: ( ':' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21792:1: ( ':' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21793:1: ':'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22810:1: ( ':' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22811:1: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getColonKeyword_2_0()); 
             }
-            match(input,97,FollowSets001.FOLLOW_97_in_rule__LetVariableCS__Group_2__0__Impl44547); if (state.failed) return ;
+            match(input,106,FollowSets002.FOLLOW_106_in_rule__LetVariableCS__Group_2__0__Impl46417); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getLetVariableCSAccess().getColonKeyword_2_0()); 
             }
@@ -64738,16 +67206,16 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21806:1: rule__LetVariableCS__Group_2__1 : rule__LetVariableCS__Group_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22824:1: rule__LetVariableCS__Group_2__1 : rule__LetVariableCS__Group_2__1__Impl ;
     public final void rule__LetVariableCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21810:1: ( rule__LetVariableCS__Group_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21811:2: rule__LetVariableCS__Group_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22828:1: ( rule__LetVariableCS__Group_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22829:2: rule__LetVariableCS__Group_2__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__Group_2__1__Impl_in_rule__LetVariableCS__Group_2__144578);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__Group_2__1__Impl_in_rule__LetVariableCS__Group_2__146448);
             rule__LetVariableCS__Group_2__1__Impl();
 
             state._fsp--;
@@ -64771,25 +67239,25 @@
 
 
     // $ANTLR start "rule__LetVariableCS__Group_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21817:1: rule__LetVariableCS__Group_2__1__Impl : ( ( rule__LetVariableCS__OwnedTypeAssignment_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22835:1: rule__LetVariableCS__Group_2__1__Impl : ( ( rule__LetVariableCS__OwnedTypeAssignment_2_1 ) ) ;
     public final void rule__LetVariableCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21821:1: ( ( ( rule__LetVariableCS__OwnedTypeAssignment_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21822:1: ( ( rule__LetVariableCS__OwnedTypeAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22839:1: ( ( ( rule__LetVariableCS__OwnedTypeAssignment_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22840:1: ( ( rule__LetVariableCS__OwnedTypeAssignment_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21822:1: ( ( rule__LetVariableCS__OwnedTypeAssignment_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21823:1: ( rule__LetVariableCS__OwnedTypeAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22840:1: ( ( rule__LetVariableCS__OwnedTypeAssignment_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22841:1: ( rule__LetVariableCS__OwnedTypeAssignment_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getOwnedTypeAssignment_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21824:1: ( rule__LetVariableCS__OwnedTypeAssignment_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21824:2: rule__LetVariableCS__OwnedTypeAssignment_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22842:1: ( rule__LetVariableCS__OwnedTypeAssignment_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22842:2: rule__LetVariableCS__OwnedTypeAssignment_2_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__LetVariableCS__OwnedTypeAssignment_2_1_in_rule__LetVariableCS__Group_2__1__Impl44605);
+            pushFollow(FollowSets002.FOLLOW_rule__LetVariableCS__OwnedTypeAssignment_2_1_in_rule__LetVariableCS__Group_2__1__Impl46475);
             rule__LetVariableCS__OwnedTypeAssignment_2_1();
 
             state._fsp--;
@@ -64822,21 +67290,21 @@
 
 
     // $ANTLR start "rule__NestedExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21838:1: rule__NestedExpCS__Group__0 : rule__NestedExpCS__Group__0__Impl rule__NestedExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22856:1: rule__NestedExpCS__Group__0 : rule__NestedExpCS__Group__0__Impl rule__NestedExpCS__Group__1 ;
     public final void rule__NestedExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21842:1: ( rule__NestedExpCS__Group__0__Impl rule__NestedExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21843:2: rule__NestedExpCS__Group__0__Impl rule__NestedExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22860:1: ( rule__NestedExpCS__Group__0__Impl rule__NestedExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22861:2: rule__NestedExpCS__Group__0__Impl rule__NestedExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NestedExpCS__Group__0__Impl_in_rule__NestedExpCS__Group__044639);
+            pushFollow(FollowSets002.FOLLOW_rule__NestedExpCS__Group__0__Impl_in_rule__NestedExpCS__Group__046509);
             rule__NestedExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NestedExpCS__Group__1_in_rule__NestedExpCS__Group__044642);
+            pushFollow(FollowSets002.FOLLOW_rule__NestedExpCS__Group__1_in_rule__NestedExpCS__Group__046512);
             rule__NestedExpCS__Group__1();
 
             state._fsp--;
@@ -64860,22 +67328,22 @@
 
 
     // $ANTLR start "rule__NestedExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21850:1: rule__NestedExpCS__Group__0__Impl : ( '(' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22868:1: rule__NestedExpCS__Group__0__Impl : ( '(' ) ;
     public final void rule__NestedExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21854:1: ( ( '(' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21855:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22872:1: ( ( '(' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22873:1: ( '(' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21855:1: ( '(' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21856:1: '('
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22873:1: ( '(' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22874:1: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNestedExpCSAccess().getLeftParenthesisKeyword_0()); 
             }
-            match(input,95,FollowSets001.FOLLOW_95_in_rule__NestedExpCS__Group__0__Impl44670); if (state.failed) return ;
+            match(input,104,FollowSets002.FOLLOW_104_in_rule__NestedExpCS__Group__0__Impl46540); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNestedExpCSAccess().getLeftParenthesisKeyword_0()); 
             }
@@ -64901,21 +67369,21 @@
 
 
     // $ANTLR start "rule__NestedExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21869:1: rule__NestedExpCS__Group__1 : rule__NestedExpCS__Group__1__Impl rule__NestedExpCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22887:1: rule__NestedExpCS__Group__1 : rule__NestedExpCS__Group__1__Impl rule__NestedExpCS__Group__2 ;
     public final void rule__NestedExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21873:1: ( rule__NestedExpCS__Group__1__Impl rule__NestedExpCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21874:2: rule__NestedExpCS__Group__1__Impl rule__NestedExpCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22891:1: ( rule__NestedExpCS__Group__1__Impl rule__NestedExpCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22892:2: rule__NestedExpCS__Group__1__Impl rule__NestedExpCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NestedExpCS__Group__1__Impl_in_rule__NestedExpCS__Group__144701);
+            pushFollow(FollowSets002.FOLLOW_rule__NestedExpCS__Group__1__Impl_in_rule__NestedExpCS__Group__146571);
             rule__NestedExpCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__NestedExpCS__Group__2_in_rule__NestedExpCS__Group__144704);
+            pushFollow(FollowSets002.FOLLOW_rule__NestedExpCS__Group__2_in_rule__NestedExpCS__Group__146574);
             rule__NestedExpCS__Group__2();
 
             state._fsp--;
@@ -64939,25 +67407,25 @@
 
 
     // $ANTLR start "rule__NestedExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21881:1: rule__NestedExpCS__Group__1__Impl : ( ( rule__NestedExpCS__OwnedExpressionAssignment_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22899:1: rule__NestedExpCS__Group__1__Impl : ( ( rule__NestedExpCS__OwnedExpressionAssignment_1 ) ) ;
     public final void rule__NestedExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21885:1: ( ( ( rule__NestedExpCS__OwnedExpressionAssignment_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21886:1: ( ( rule__NestedExpCS__OwnedExpressionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22903:1: ( ( ( rule__NestedExpCS__OwnedExpressionAssignment_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22904:1: ( ( rule__NestedExpCS__OwnedExpressionAssignment_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21886:1: ( ( rule__NestedExpCS__OwnedExpressionAssignment_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21887:1: ( rule__NestedExpCS__OwnedExpressionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22904:1: ( ( rule__NestedExpCS__OwnedExpressionAssignment_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22905:1: ( rule__NestedExpCS__OwnedExpressionAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNestedExpCSAccess().getOwnedExpressionAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21888:1: ( rule__NestedExpCS__OwnedExpressionAssignment_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21888:2: rule__NestedExpCS__OwnedExpressionAssignment_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22906:1: ( rule__NestedExpCS__OwnedExpressionAssignment_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22906:2: rule__NestedExpCS__OwnedExpressionAssignment_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NestedExpCS__OwnedExpressionAssignment_1_in_rule__NestedExpCS__Group__1__Impl44731);
+            pushFollow(FollowSets002.FOLLOW_rule__NestedExpCS__OwnedExpressionAssignment_1_in_rule__NestedExpCS__Group__1__Impl46601);
             rule__NestedExpCS__OwnedExpressionAssignment_1();
 
             state._fsp--;
@@ -64990,16 +67458,16 @@
 
 
     // $ANTLR start "rule__NestedExpCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21898:1: rule__NestedExpCS__Group__2 : rule__NestedExpCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22916:1: rule__NestedExpCS__Group__2 : rule__NestedExpCS__Group__2__Impl ;
     public final void rule__NestedExpCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21902:1: ( rule__NestedExpCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21903:2: rule__NestedExpCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22920:1: ( rule__NestedExpCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22921:2: rule__NestedExpCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__NestedExpCS__Group__2__Impl_in_rule__NestedExpCS__Group__244761);
+            pushFollow(FollowSets002.FOLLOW_rule__NestedExpCS__Group__2__Impl_in_rule__NestedExpCS__Group__246631);
             rule__NestedExpCS__Group__2__Impl();
 
             state._fsp--;
@@ -65023,22 +67491,22 @@
 
 
     // $ANTLR start "rule__NestedExpCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21909:1: rule__NestedExpCS__Group__2__Impl : ( ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22927:1: rule__NestedExpCS__Group__2__Impl : ( ')' ) ;
     public final void rule__NestedExpCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21913:1: ( ( ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21914:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22931:1: ( ( ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22932:1: ( ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21914:1: ( ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21915:1: ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22932:1: ( ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22933:1: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNestedExpCSAccess().getRightParenthesisKeyword_2()); 
             }
-            match(input,96,FollowSets001.FOLLOW_96_in_rule__NestedExpCS__Group__2__Impl44789); if (state.failed) return ;
+            match(input,105,FollowSets002.FOLLOW_105_in_rule__NestedExpCS__Group__2__Impl46659); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNestedExpCSAccess().getRightParenthesisKeyword_2()); 
             }
@@ -65064,21 +67532,21 @@
 
 
     // $ANTLR start "rule__SelfExpCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21934:1: rule__SelfExpCS__Group__0 : rule__SelfExpCS__Group__0__Impl rule__SelfExpCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22952:1: rule__SelfExpCS__Group__0 : rule__SelfExpCS__Group__0__Impl rule__SelfExpCS__Group__1 ;
     public final void rule__SelfExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21938:1: ( rule__SelfExpCS__Group__0__Impl rule__SelfExpCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21939:2: rule__SelfExpCS__Group__0__Impl rule__SelfExpCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22956:1: ( rule__SelfExpCS__Group__0__Impl rule__SelfExpCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22957:2: rule__SelfExpCS__Group__0__Impl rule__SelfExpCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SelfExpCS__Group__0__Impl_in_rule__SelfExpCS__Group__044826);
+            pushFollow(FollowSets002.FOLLOW_rule__SelfExpCS__Group__0__Impl_in_rule__SelfExpCS__Group__046696);
             rule__SelfExpCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__SelfExpCS__Group__1_in_rule__SelfExpCS__Group__044829);
+            pushFollow(FollowSets002.FOLLOW_rule__SelfExpCS__Group__1_in_rule__SelfExpCS__Group__046699);
             rule__SelfExpCS__Group__1();
 
             state._fsp--;
@@ -65102,23 +67570,23 @@
 
 
     // $ANTLR start "rule__SelfExpCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21946:1: rule__SelfExpCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22964:1: rule__SelfExpCS__Group__0__Impl : ( () ) ;
     public final void rule__SelfExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21950:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21951:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22968:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22969:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21951:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21952:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22969:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22970:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSelfExpCSAccess().getSelfExpCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21953:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21955:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22971:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22973:1: 
             {
             }
 
@@ -65143,16 +67611,16 @@
 
 
     // $ANTLR start "rule__SelfExpCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21965:1: rule__SelfExpCS__Group__1 : rule__SelfExpCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22983:1: rule__SelfExpCS__Group__1 : rule__SelfExpCS__Group__1__Impl ;
     public final void rule__SelfExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21969:1: ( rule__SelfExpCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21970:2: rule__SelfExpCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22987:1: ( rule__SelfExpCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22988:2: rule__SelfExpCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__SelfExpCS__Group__1__Impl_in_rule__SelfExpCS__Group__144887);
+            pushFollow(FollowSets002.FOLLOW_rule__SelfExpCS__Group__1__Impl_in_rule__SelfExpCS__Group__146757);
             rule__SelfExpCS__Group__1__Impl();
 
             state._fsp--;
@@ -65176,22 +67644,22 @@
 
 
     // $ANTLR start "rule__SelfExpCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21976:1: rule__SelfExpCS__Group__1__Impl : ( 'self' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22994:1: rule__SelfExpCS__Group__1__Impl : ( 'self' ) ;
     public final void rule__SelfExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21980:1: ( ( 'self' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21981:1: ( 'self' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22998:1: ( ( 'self' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22999:1: ( 'self' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21981:1: ( 'self' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21982:1: 'self'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22999:1: ( 'self' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23000:1: 'self'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSelfExpCSAccess().getSelfKeyword_1()); 
             }
-            match(input,118,FollowSets001.FOLLOW_118_in_rule__SelfExpCS__Group__1__Impl44915); if (state.failed) return ;
+            match(input,127,FollowSets002.FOLLOW_127_in_rule__SelfExpCS__Group__1__Impl46785); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSelfExpCSAccess().getSelfKeyword_1()); 
             }
@@ -65217,21 +67685,21 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:21999:1: rule__MultiplicityBoundsCS__Group__0 : rule__MultiplicityBoundsCS__Group__0__Impl rule__MultiplicityBoundsCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23017:1: rule__MultiplicityBoundsCS__Group__0 : rule__MultiplicityBoundsCS__Group__0__Impl rule__MultiplicityBoundsCS__Group__1 ;
     public final void rule__MultiplicityBoundsCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22003:1: ( rule__MultiplicityBoundsCS__Group__0__Impl rule__MultiplicityBoundsCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22004:2: rule__MultiplicityBoundsCS__Group__0__Impl rule__MultiplicityBoundsCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23021:1: ( rule__MultiplicityBoundsCS__Group__0__Impl rule__MultiplicityBoundsCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23022:2: rule__MultiplicityBoundsCS__Group__0__Impl rule__MultiplicityBoundsCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityBoundsCS__Group__0__Impl_in_rule__MultiplicityBoundsCS__Group__044950);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityBoundsCS__Group__0__Impl_in_rule__MultiplicityBoundsCS__Group__046820);
             rule__MultiplicityBoundsCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityBoundsCS__Group__1_in_rule__MultiplicityBoundsCS__Group__044953);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityBoundsCS__Group__1_in_rule__MultiplicityBoundsCS__Group__046823);
             rule__MultiplicityBoundsCS__Group__1();
 
             state._fsp--;
@@ -65255,25 +67723,25 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22011:1: rule__MultiplicityBoundsCS__Group__0__Impl : ( ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23029:1: rule__MultiplicityBoundsCS__Group__0__Impl : ( ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 ) ) ;
     public final void rule__MultiplicityBoundsCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22015:1: ( ( ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22016:1: ( ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23033:1: ( ( ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23034:1: ( ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22016:1: ( ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22017:1: ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23034:1: ( ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23035:1: ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityBoundsCSAccess().getLowerBoundAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22018:1: ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22018:2: rule__MultiplicityBoundsCS__LowerBoundAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23036:1: ( rule__MultiplicityBoundsCS__LowerBoundAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23036:2: rule__MultiplicityBoundsCS__LowerBoundAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityBoundsCS__LowerBoundAssignment_0_in_rule__MultiplicityBoundsCS__Group__0__Impl44980);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityBoundsCS__LowerBoundAssignment_0_in_rule__MultiplicityBoundsCS__Group__0__Impl46850);
             rule__MultiplicityBoundsCS__LowerBoundAssignment_0();
 
             state._fsp--;
@@ -65306,16 +67774,16 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22028:1: rule__MultiplicityBoundsCS__Group__1 : rule__MultiplicityBoundsCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23046:1: rule__MultiplicityBoundsCS__Group__1 : rule__MultiplicityBoundsCS__Group__1__Impl ;
     public final void rule__MultiplicityBoundsCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22032:1: ( rule__MultiplicityBoundsCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22033:2: rule__MultiplicityBoundsCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23050:1: ( rule__MultiplicityBoundsCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23051:2: rule__MultiplicityBoundsCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityBoundsCS__Group__1__Impl_in_rule__MultiplicityBoundsCS__Group__145010);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityBoundsCS__Group__1__Impl_in_rule__MultiplicityBoundsCS__Group__146880);
             rule__MultiplicityBoundsCS__Group__1__Impl();
 
             state._fsp--;
@@ -65339,33 +67807,33 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22039:1: rule__MultiplicityBoundsCS__Group__1__Impl : ( ( rule__MultiplicityBoundsCS__Group_1__0 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23057:1: rule__MultiplicityBoundsCS__Group__1__Impl : ( ( rule__MultiplicityBoundsCS__Group_1__0 )? ) ;
     public final void rule__MultiplicityBoundsCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22043:1: ( ( ( rule__MultiplicityBoundsCS__Group_1__0 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22044:1: ( ( rule__MultiplicityBoundsCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23061:1: ( ( ( rule__MultiplicityBoundsCS__Group_1__0 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23062:1: ( ( rule__MultiplicityBoundsCS__Group_1__0 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22044:1: ( ( rule__MultiplicityBoundsCS__Group_1__0 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22045:1: ( rule__MultiplicityBoundsCS__Group_1__0 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23062:1: ( ( rule__MultiplicityBoundsCS__Group_1__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23063:1: ( rule__MultiplicityBoundsCS__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityBoundsCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22046:1: ( rule__MultiplicityBoundsCS__Group_1__0 )?
-            int alt222=2;
-            int LA222_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23064:1: ( rule__MultiplicityBoundsCS__Group_1__0 )?
+            int alt250=2;
+            int LA250_0 = input.LA(1);
 
-            if ( (LA222_0==103) ) {
-                alt222=1;
+            if ( (LA250_0==112) ) {
+                alt250=1;
             }
-            switch (alt222) {
+            switch (alt250) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22046:2: rule__MultiplicityBoundsCS__Group_1__0
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23064:2: rule__MultiplicityBoundsCS__Group_1__0
                     {
-                    pushFollow(FollowSets001.FOLLOW_rule__MultiplicityBoundsCS__Group_1__0_in_rule__MultiplicityBoundsCS__Group__1__Impl45037);
+                    pushFollow(FollowSets002.FOLLOW_rule__MultiplicityBoundsCS__Group_1__0_in_rule__MultiplicityBoundsCS__Group__1__Impl46907);
                     rule__MultiplicityBoundsCS__Group_1__0();
 
                     state._fsp--;
@@ -65401,21 +67869,21 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22060:1: rule__MultiplicityBoundsCS__Group_1__0 : rule__MultiplicityBoundsCS__Group_1__0__Impl rule__MultiplicityBoundsCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23078:1: rule__MultiplicityBoundsCS__Group_1__0 : rule__MultiplicityBoundsCS__Group_1__0__Impl rule__MultiplicityBoundsCS__Group_1__1 ;
     public final void rule__MultiplicityBoundsCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22064:1: ( rule__MultiplicityBoundsCS__Group_1__0__Impl rule__MultiplicityBoundsCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22065:2: rule__MultiplicityBoundsCS__Group_1__0__Impl rule__MultiplicityBoundsCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23082:1: ( rule__MultiplicityBoundsCS__Group_1__0__Impl rule__MultiplicityBoundsCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23083:2: rule__MultiplicityBoundsCS__Group_1__0__Impl rule__MultiplicityBoundsCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityBoundsCS__Group_1__0__Impl_in_rule__MultiplicityBoundsCS__Group_1__045072);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityBoundsCS__Group_1__0__Impl_in_rule__MultiplicityBoundsCS__Group_1__046942);
             rule__MultiplicityBoundsCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityBoundsCS__Group_1__1_in_rule__MultiplicityBoundsCS__Group_1__045075);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityBoundsCS__Group_1__1_in_rule__MultiplicityBoundsCS__Group_1__046945);
             rule__MultiplicityBoundsCS__Group_1__1();
 
             state._fsp--;
@@ -65439,22 +67907,22 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22072:1: rule__MultiplicityBoundsCS__Group_1__0__Impl : ( '..' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23090:1: rule__MultiplicityBoundsCS__Group_1__0__Impl : ( '..' ) ;
     public final void rule__MultiplicityBoundsCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22076:1: ( ( '..' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22077:1: ( '..' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23094:1: ( ( '..' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23095:1: ( '..' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22077:1: ( '..' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22078:1: '..'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23095:1: ( '..' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23096:1: '..'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityBoundsCSAccess().getFullStopFullStopKeyword_1_0()); 
             }
-            match(input,103,FollowSets001.FOLLOW_103_in_rule__MultiplicityBoundsCS__Group_1__0__Impl45103); if (state.failed) return ;
+            match(input,112,FollowSets002.FOLLOW_112_in_rule__MultiplicityBoundsCS__Group_1__0__Impl46973); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getMultiplicityBoundsCSAccess().getFullStopFullStopKeyword_1_0()); 
             }
@@ -65480,16 +67948,16 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22091:1: rule__MultiplicityBoundsCS__Group_1__1 : rule__MultiplicityBoundsCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23109:1: rule__MultiplicityBoundsCS__Group_1__1 : rule__MultiplicityBoundsCS__Group_1__1__Impl ;
     public final void rule__MultiplicityBoundsCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22095:1: ( rule__MultiplicityBoundsCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22096:2: rule__MultiplicityBoundsCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23113:1: ( rule__MultiplicityBoundsCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23114:2: rule__MultiplicityBoundsCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityBoundsCS__Group_1__1__Impl_in_rule__MultiplicityBoundsCS__Group_1__145134);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityBoundsCS__Group_1__1__Impl_in_rule__MultiplicityBoundsCS__Group_1__147004);
             rule__MultiplicityBoundsCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -65513,25 +67981,25 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22102:1: rule__MultiplicityBoundsCS__Group_1__1__Impl : ( ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23120:1: rule__MultiplicityBoundsCS__Group_1__1__Impl : ( ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 ) ) ;
     public final void rule__MultiplicityBoundsCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22106:1: ( ( ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22107:1: ( ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23124:1: ( ( ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23125:1: ( ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22107:1: ( ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22108:1: ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23125:1: ( ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23126:1: ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityBoundsCSAccess().getUpperBoundAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22109:1: ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22109:2: rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23127:1: ( rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23127:2: rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1_in_rule__MultiplicityBoundsCS__Group_1__1__Impl45161);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1_in_rule__MultiplicityBoundsCS__Group_1__1__Impl47031);
             rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1();
 
             state._fsp--;
@@ -65564,21 +68032,21 @@
 
 
     // $ANTLR start "rule__MultiplicityCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22123:1: rule__MultiplicityCS__Group__0 : rule__MultiplicityCS__Group__0__Impl rule__MultiplicityCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23141:1: rule__MultiplicityCS__Group__0 : rule__MultiplicityCS__Group__0__Impl rule__MultiplicityCS__Group__1 ;
     public final void rule__MultiplicityCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22127:1: ( rule__MultiplicityCS__Group__0__Impl rule__MultiplicityCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22128:2: rule__MultiplicityCS__Group__0__Impl rule__MultiplicityCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23145:1: ( rule__MultiplicityCS__Group__0__Impl rule__MultiplicityCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23146:2: rule__MultiplicityCS__Group__0__Impl rule__MultiplicityCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityCS__Group__0__Impl_in_rule__MultiplicityCS__Group__045195);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityCS__Group__0__Impl_in_rule__MultiplicityCS__Group__047065);
             rule__MultiplicityCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityCS__Group__1_in_rule__MultiplicityCS__Group__045198);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityCS__Group__1_in_rule__MultiplicityCS__Group__047068);
             rule__MultiplicityCS__Group__1();
 
             state._fsp--;
@@ -65602,22 +68070,22 @@
 
 
     // $ANTLR start "rule__MultiplicityCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22135:1: rule__MultiplicityCS__Group__0__Impl : ( '[' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23153:1: rule__MultiplicityCS__Group__0__Impl : ( '[' ) ;
     public final void rule__MultiplicityCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22139:1: ( ( '[' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22140:1: ( '[' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23157:1: ( ( '[' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23158:1: ( '[' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22140:1: ( '[' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22141:1: '['
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23158:1: ( '[' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23159:1: '['
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0()); 
             }
-            match(input,109,FollowSets001.FOLLOW_109_in_rule__MultiplicityCS__Group__0__Impl45226); if (state.failed) return ;
+            match(input,118,FollowSets002.FOLLOW_118_in_rule__MultiplicityCS__Group__0__Impl47096); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0()); 
             }
@@ -65643,21 +68111,21 @@
 
 
     // $ANTLR start "rule__MultiplicityCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22154:1: rule__MultiplicityCS__Group__1 : rule__MultiplicityCS__Group__1__Impl rule__MultiplicityCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23172:1: rule__MultiplicityCS__Group__1 : rule__MultiplicityCS__Group__1__Impl rule__MultiplicityCS__Group__2 ;
     public final void rule__MultiplicityCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22158:1: ( rule__MultiplicityCS__Group__1__Impl rule__MultiplicityCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22159:2: rule__MultiplicityCS__Group__1__Impl rule__MultiplicityCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23176:1: ( rule__MultiplicityCS__Group__1__Impl rule__MultiplicityCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23177:2: rule__MultiplicityCS__Group__1__Impl rule__MultiplicityCS__Group__2
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityCS__Group__1__Impl_in_rule__MultiplicityCS__Group__145257);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityCS__Group__1__Impl_in_rule__MultiplicityCS__Group__147127);
             rule__MultiplicityCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityCS__Group__2_in_rule__MultiplicityCS__Group__145260);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityCS__Group__2_in_rule__MultiplicityCS__Group__147130);
             rule__MultiplicityCS__Group__2();
 
             state._fsp--;
@@ -65681,25 +68149,25 @@
 
 
     // $ANTLR start "rule__MultiplicityCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22166:1: rule__MultiplicityCS__Group__1__Impl : ( ( rule__MultiplicityCS__Alternatives_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23184:1: rule__MultiplicityCS__Group__1__Impl : ( ( rule__MultiplicityCS__Alternatives_1 ) ) ;
     public final void rule__MultiplicityCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22170:1: ( ( ( rule__MultiplicityCS__Alternatives_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22171:1: ( ( rule__MultiplicityCS__Alternatives_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23188:1: ( ( ( rule__MultiplicityCS__Alternatives_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23189:1: ( ( rule__MultiplicityCS__Alternatives_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22171:1: ( ( rule__MultiplicityCS__Alternatives_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22172:1: ( rule__MultiplicityCS__Alternatives_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23189:1: ( ( rule__MultiplicityCS__Alternatives_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23190:1: ( rule__MultiplicityCS__Alternatives_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityCSAccess().getAlternatives_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22173:1: ( rule__MultiplicityCS__Alternatives_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22173:2: rule__MultiplicityCS__Alternatives_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23191:1: ( rule__MultiplicityCS__Alternatives_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23191:2: rule__MultiplicityCS__Alternatives_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityCS__Alternatives_1_in_rule__MultiplicityCS__Group__1__Impl45287);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityCS__Alternatives_1_in_rule__MultiplicityCS__Group__1__Impl47157);
             rule__MultiplicityCS__Alternatives_1();
 
             state._fsp--;
@@ -65732,16 +68200,16 @@
 
 
     // $ANTLR start "rule__MultiplicityCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22183:1: rule__MultiplicityCS__Group__2 : rule__MultiplicityCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23201:1: rule__MultiplicityCS__Group__2 : rule__MultiplicityCS__Group__2__Impl ;
     public final void rule__MultiplicityCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22187:1: ( rule__MultiplicityCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22188:2: rule__MultiplicityCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23205:1: ( rule__MultiplicityCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23206:2: rule__MultiplicityCS__Group__2__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__MultiplicityCS__Group__2__Impl_in_rule__MultiplicityCS__Group__245317);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityCS__Group__2__Impl_in_rule__MultiplicityCS__Group__247187);
             rule__MultiplicityCS__Group__2__Impl();
 
             state._fsp--;
@@ -65765,22 +68233,22 @@
 
 
     // $ANTLR start "rule__MultiplicityCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22194:1: rule__MultiplicityCS__Group__2__Impl : ( ']' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23212:1: rule__MultiplicityCS__Group__2__Impl : ( ']' ) ;
     public final void rule__MultiplicityCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22198:1: ( ( ']' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22199:1: ( ']' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23216:1: ( ( ']' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23217:1: ( ']' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22199:1: ( ']' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22200:1: ']'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23217:1: ( ']' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23218:1: ']'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2()); 
             }
-            match(input,110,FollowSets001.FOLLOW_110_in_rule__MultiplicityCS__Group__2__Impl45345); if (state.failed) return ;
+            match(input,119,FollowSets002.FOLLOW_119_in_rule__MultiplicityCS__Group__2__Impl47215); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2()); 
             }
@@ -65806,21 +68274,21 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22219:1: rule__PathNameCS__Group__0 : rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23237:1: rule__PathNameCS__Group__0 : rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1 ;
     public final void rule__PathNameCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22223:1: ( rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22224:2: rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23241:1: ( rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23242:2: rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PathNameCS__Group__0__Impl_in_rule__PathNameCS__Group__045382);
+            pushFollow(FollowSets002.FOLLOW_rule__PathNameCS__Group__0__Impl_in_rule__PathNameCS__Group__047252);
             rule__PathNameCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PathNameCS__Group__1_in_rule__PathNameCS__Group__045385);
+            pushFollow(FollowSets002.FOLLOW_rule__PathNameCS__Group__1_in_rule__PathNameCS__Group__047255);
             rule__PathNameCS__Group__1();
 
             state._fsp--;
@@ -65844,25 +68312,25 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22231:1: rule__PathNameCS__Group__0__Impl : ( ( rule__PathNameCS__OwnedPathElementsAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23249:1: rule__PathNameCS__Group__0__Impl : ( ( rule__PathNameCS__OwnedPathElementsAssignment_0 ) ) ;
     public final void rule__PathNameCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22235:1: ( ( ( rule__PathNameCS__OwnedPathElementsAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22236:1: ( ( rule__PathNameCS__OwnedPathElementsAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23253:1: ( ( ( rule__PathNameCS__OwnedPathElementsAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23254:1: ( ( rule__PathNameCS__OwnedPathElementsAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22236:1: ( ( rule__PathNameCS__OwnedPathElementsAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22237:1: ( rule__PathNameCS__OwnedPathElementsAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23254:1: ( ( rule__PathNameCS__OwnedPathElementsAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23255:1: ( rule__PathNameCS__OwnedPathElementsAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getOwnedPathElementsAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22238:1: ( rule__PathNameCS__OwnedPathElementsAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22238:2: rule__PathNameCS__OwnedPathElementsAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23256:1: ( rule__PathNameCS__OwnedPathElementsAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23256:2: rule__PathNameCS__OwnedPathElementsAssignment_0
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PathNameCS__OwnedPathElementsAssignment_0_in_rule__PathNameCS__Group__0__Impl45412);
+            pushFollow(FollowSets002.FOLLOW_rule__PathNameCS__OwnedPathElementsAssignment_0_in_rule__PathNameCS__Group__0__Impl47282);
             rule__PathNameCS__OwnedPathElementsAssignment_0();
 
             state._fsp--;
@@ -65895,16 +68363,16 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22248:1: rule__PathNameCS__Group__1 : rule__PathNameCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23266:1: rule__PathNameCS__Group__1 : rule__PathNameCS__Group__1__Impl ;
     public final void rule__PathNameCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22252:1: ( rule__PathNameCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22253:2: rule__PathNameCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23270:1: ( rule__PathNameCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23271:2: rule__PathNameCS__Group__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PathNameCS__Group__1__Impl_in_rule__PathNameCS__Group__145442);
+            pushFollow(FollowSets002.FOLLOW_rule__PathNameCS__Group__1__Impl_in_rule__PathNameCS__Group__147312);
             rule__PathNameCS__Group__1__Impl();
 
             state._fsp--;
@@ -65928,37 +68396,37 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22259:1: rule__PathNameCS__Group__1__Impl : ( ( rule__PathNameCS__Group_1__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23277:1: rule__PathNameCS__Group__1__Impl : ( ( rule__PathNameCS__Group_1__0 )* ) ;
     public final void rule__PathNameCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22263:1: ( ( ( rule__PathNameCS__Group_1__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22264:1: ( ( rule__PathNameCS__Group_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23281:1: ( ( ( rule__PathNameCS__Group_1__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23282:1: ( ( rule__PathNameCS__Group_1__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22264:1: ( ( rule__PathNameCS__Group_1__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22265:1: ( rule__PathNameCS__Group_1__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23282:1: ( ( rule__PathNameCS__Group_1__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23283:1: ( rule__PathNameCS__Group_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getGroup_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22266:1: ( rule__PathNameCS__Group_1__0 )*
-            loop223:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23284:1: ( rule__PathNameCS__Group_1__0 )*
+            loop251:
             do {
-                int alt223=2;
-                int LA223_0 = input.LA(1);
+                int alt251=2;
+                int LA251_0 = input.LA(1);
 
-                if ( (LA223_0==102) ) {
-                    alt223=1;
+                if ( (LA251_0==111) ) {
+                    alt251=1;
                 }
 
 
-                switch (alt223) {
+                switch (alt251) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22266:2: rule__PathNameCS__Group_1__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23284:2: rule__PathNameCS__Group_1__0
             	    {
-            	    pushFollow(FollowSets001.FOLLOW_rule__PathNameCS__Group_1__0_in_rule__PathNameCS__Group__1__Impl45469);
+            	    pushFollow(FollowSets002.FOLLOW_rule__PathNameCS__Group_1__0_in_rule__PathNameCS__Group__1__Impl47339);
             	    rule__PathNameCS__Group_1__0();
 
             	    state._fsp--;
@@ -65968,7 +68436,7 @@
             	    break;
 
             	default :
-            	    break loop223;
+            	    break loop251;
                 }
             } while (true);
 
@@ -65997,21 +68465,21 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22280:1: rule__PathNameCS__Group_1__0 : rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23298:1: rule__PathNameCS__Group_1__0 : rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1 ;
     public final void rule__PathNameCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22284:1: ( rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22285:2: rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23302:1: ( rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23303:2: rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PathNameCS__Group_1__0__Impl_in_rule__PathNameCS__Group_1__045504);
+            pushFollow(FollowSets002.FOLLOW_rule__PathNameCS__Group_1__0__Impl_in_rule__PathNameCS__Group_1__047374);
             rule__PathNameCS__Group_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets001.FOLLOW_rule__PathNameCS__Group_1__1_in_rule__PathNameCS__Group_1__045507);
+            pushFollow(FollowSets002.FOLLOW_rule__PathNameCS__Group_1__1_in_rule__PathNameCS__Group_1__047377);
             rule__PathNameCS__Group_1__1();
 
             state._fsp--;
@@ -66035,22 +68503,22 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22292:1: rule__PathNameCS__Group_1__0__Impl : ( '::' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23310:1: rule__PathNameCS__Group_1__0__Impl : ( '::' ) ;
     public final void rule__PathNameCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22296:1: ( ( '::' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22297:1: ( '::' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23314:1: ( ( '::' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23315:1: ( '::' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22297:1: ( '::' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22298:1: '::'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23315:1: ( '::' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23316:1: '::'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getColonColonKeyword_1_0()); 
             }
-            match(input,102,FollowSets001.FOLLOW_102_in_rule__PathNameCS__Group_1__0__Impl45535); if (state.failed) return ;
+            match(input,111,FollowSets002.FOLLOW_111_in_rule__PathNameCS__Group_1__0__Impl47405); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPathNameCSAccess().getColonColonKeyword_1_0()); 
             }
@@ -66076,16 +68544,16 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22311:1: rule__PathNameCS__Group_1__1 : rule__PathNameCS__Group_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23329:1: rule__PathNameCS__Group_1__1 : rule__PathNameCS__Group_1__1__Impl ;
     public final void rule__PathNameCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22315:1: ( rule__PathNameCS__Group_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22316:2: rule__PathNameCS__Group_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23333:1: ( rule__PathNameCS__Group_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23334:2: rule__PathNameCS__Group_1__1__Impl
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PathNameCS__Group_1__1__Impl_in_rule__PathNameCS__Group_1__145566);
+            pushFollow(FollowSets002.FOLLOW_rule__PathNameCS__Group_1__1__Impl_in_rule__PathNameCS__Group_1__147436);
             rule__PathNameCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -66109,25 +68577,25 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22322:1: rule__PathNameCS__Group_1__1__Impl : ( ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23340:1: rule__PathNameCS__Group_1__1__Impl : ( ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 ) ) ;
     public final void rule__PathNameCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22326:1: ( ( ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22327:1: ( ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23344:1: ( ( ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23345:1: ( ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22327:1: ( ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22328:1: ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23345:1: ( ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23346:1: ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getOwnedPathElementsAssignment_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22329:1: ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22329:2: rule__PathNameCS__OwnedPathElementsAssignment_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23347:1: ( rule__PathNameCS__OwnedPathElementsAssignment_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23347:2: rule__PathNameCS__OwnedPathElementsAssignment_1_1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__PathNameCS__OwnedPathElementsAssignment_1_1_in_rule__PathNameCS__Group_1__1__Impl45593);
+            pushFollow(FollowSets002.FOLLOW_rule__PathNameCS__OwnedPathElementsAssignment_1_1_in_rule__PathNameCS__Group_1__1__Impl47463);
             rule__PathNameCS__OwnedPathElementsAssignment_1_1();
 
             state._fsp--;
@@ -66160,21 +68628,21 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22343:1: rule__TypeParameterCS__Group__0 : rule__TypeParameterCS__Group__0__Impl rule__TypeParameterCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23361:1: rule__TypeParameterCS__Group__0 : rule__TypeParameterCS__Group__0__Impl rule__TypeParameterCS__Group__1 ;
     public final void rule__TypeParameterCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22347:1: ( rule__TypeParameterCS__Group__0__Impl rule__TypeParameterCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22348:2: rule__TypeParameterCS__Group__0__Impl rule__TypeParameterCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23365:1: ( rule__TypeParameterCS__Group__0__Impl rule__TypeParameterCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23366:2: rule__TypeParameterCS__Group__0__Impl rule__TypeParameterCS__Group__1
             {
-            pushFollow(FollowSets001.FOLLOW_rule__TypeParameterCS__Group__0__Impl_in_rule__TypeParameterCS__Group__045627);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group__0__Impl_in_rule__TypeParameterCS__Group__047497);
             rule__TypeParameterCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group__1_in_rule__TypeParameterCS__Group__045630);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group__1_in_rule__TypeParameterCS__Group__047500);
             rule__TypeParameterCS__Group__1();
 
             state._fsp--;
@@ -66198,25 +68666,25 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22355:1: rule__TypeParameterCS__Group__0__Impl : ( ( rule__TypeParameterCS__NameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23373:1: rule__TypeParameterCS__Group__0__Impl : ( ( rule__TypeParameterCS__NameAssignment_0 ) ) ;
     public final void rule__TypeParameterCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22359:1: ( ( ( rule__TypeParameterCS__NameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22360:1: ( ( rule__TypeParameterCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23377:1: ( ( ( rule__TypeParameterCS__NameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23378:1: ( ( rule__TypeParameterCS__NameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22360:1: ( ( rule__TypeParameterCS__NameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22361:1: ( rule__TypeParameterCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23378:1: ( ( rule__TypeParameterCS__NameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23379:1: ( rule__TypeParameterCS__NameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22362:1: ( rule__TypeParameterCS__NameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22362:2: rule__TypeParameterCS__NameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23380:1: ( rule__TypeParameterCS__NameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23380:2: rule__TypeParameterCS__NameAssignment_0
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__NameAssignment_0_in_rule__TypeParameterCS__Group__0__Impl45657);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__NameAssignment_0_in_rule__TypeParameterCS__Group__0__Impl47527);
             rule__TypeParameterCS__NameAssignment_0();
 
             state._fsp--;
@@ -66249,16 +68717,16 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22372:1: rule__TypeParameterCS__Group__1 : rule__TypeParameterCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23390:1: rule__TypeParameterCS__Group__1 : rule__TypeParameterCS__Group__1__Impl ;
     public final void rule__TypeParameterCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22376:1: ( rule__TypeParameterCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22377:2: rule__TypeParameterCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23394:1: ( rule__TypeParameterCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23395:2: rule__TypeParameterCS__Group__1__Impl
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group__1__Impl_in_rule__TypeParameterCS__Group__145687);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group__1__Impl_in_rule__TypeParameterCS__Group__147557);
             rule__TypeParameterCS__Group__1__Impl();
 
             state._fsp--;
@@ -66282,33 +68750,33 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22383:1: rule__TypeParameterCS__Group__1__Impl : ( ( rule__TypeParameterCS__Alternatives_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23401:1: rule__TypeParameterCS__Group__1__Impl : ( ( rule__TypeParameterCS__Alternatives_1 )? ) ;
     public final void rule__TypeParameterCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22387:1: ( ( ( rule__TypeParameterCS__Alternatives_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22388:1: ( ( rule__TypeParameterCS__Alternatives_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23405:1: ( ( ( rule__TypeParameterCS__Alternatives_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23406:1: ( ( rule__TypeParameterCS__Alternatives_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22388:1: ( ( rule__TypeParameterCS__Alternatives_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22389:1: ( rule__TypeParameterCS__Alternatives_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23406:1: ( ( rule__TypeParameterCS__Alternatives_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23407:1: ( rule__TypeParameterCS__Alternatives_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getAlternatives_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22390:1: ( rule__TypeParameterCS__Alternatives_1 )?
-            int alt224=2;
-            int LA224_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23408:1: ( rule__TypeParameterCS__Alternatives_1 )?
+            int alt252=2;
+            int LA252_0 = input.LA(1);
 
-            if ( (LA224_0==28||LA224_0==47) ) {
-                alt224=1;
+            if ( (LA252_0==28||LA252_0==47) ) {
+                alt252=1;
             }
-            switch (alt224) {
+            switch (alt252) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22390:2: rule__TypeParameterCS__Alternatives_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23408:2: rule__TypeParameterCS__Alternatives_1
                     {
-                    pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Alternatives_1_in_rule__TypeParameterCS__Group__1__Impl45714);
+                    pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Alternatives_1_in_rule__TypeParameterCS__Group__1__Impl47584);
                     rule__TypeParameterCS__Alternatives_1();
 
                     state._fsp--;
@@ -66344,21 +68812,21 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22404:1: rule__TypeParameterCS__Group_1_0__0 : rule__TypeParameterCS__Group_1_0__0__Impl rule__TypeParameterCS__Group_1_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23422:1: rule__TypeParameterCS__Group_1_0__0 : rule__TypeParameterCS__Group_1_0__0__Impl rule__TypeParameterCS__Group_1_0__1 ;
     public final void rule__TypeParameterCS__Group_1_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22408:1: ( rule__TypeParameterCS__Group_1_0__0__Impl rule__TypeParameterCS__Group_1_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22409:2: rule__TypeParameterCS__Group_1_0__0__Impl rule__TypeParameterCS__Group_1_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23426:1: ( rule__TypeParameterCS__Group_1_0__0__Impl rule__TypeParameterCS__Group_1_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23427:2: rule__TypeParameterCS__Group_1_0__0__Impl rule__TypeParameterCS__Group_1_0__1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__0__Impl_in_rule__TypeParameterCS__Group_1_0__045749);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__0__Impl_in_rule__TypeParameterCS__Group_1_0__047619);
             rule__TypeParameterCS__Group_1_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__1_in_rule__TypeParameterCS__Group_1_0__045752);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__1_in_rule__TypeParameterCS__Group_1_0__047622);
             rule__TypeParameterCS__Group_1_0__1();
 
             state._fsp--;
@@ -66382,22 +68850,22 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22416:1: rule__TypeParameterCS__Group_1_0__0__Impl : ( 'extends' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23434:1: rule__TypeParameterCS__Group_1_0__0__Impl : ( 'extends' ) ;
     public final void rule__TypeParameterCS__Group_1_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22420:1: ( ( 'extends' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22421:1: ( 'extends' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23438:1: ( ( 'extends' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23439:1: ( 'extends' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22421:1: ( 'extends' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22422:1: 'extends'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23439:1: ( 'extends' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23440:1: 'extends'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getExtendsKeyword_1_0_0()); 
             }
-            match(input,28,FollowSets002.FOLLOW_28_in_rule__TypeParameterCS__Group_1_0__0__Impl45780); if (state.failed) return ;
+            match(input,28,FollowSets002.FOLLOW_28_in_rule__TypeParameterCS__Group_1_0__0__Impl47650); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTypeParameterCSAccess().getExtendsKeyword_1_0_0()); 
             }
@@ -66423,21 +68891,21 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22435:1: rule__TypeParameterCS__Group_1_0__1 : rule__TypeParameterCS__Group_1_0__1__Impl rule__TypeParameterCS__Group_1_0__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23453:1: rule__TypeParameterCS__Group_1_0__1 : rule__TypeParameterCS__Group_1_0__1__Impl rule__TypeParameterCS__Group_1_0__2 ;
     public final void rule__TypeParameterCS__Group_1_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22439:1: ( rule__TypeParameterCS__Group_1_0__1__Impl rule__TypeParameterCS__Group_1_0__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22440:2: rule__TypeParameterCS__Group_1_0__1__Impl rule__TypeParameterCS__Group_1_0__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23457:1: ( rule__TypeParameterCS__Group_1_0__1__Impl rule__TypeParameterCS__Group_1_0__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23458:2: rule__TypeParameterCS__Group_1_0__1__Impl rule__TypeParameterCS__Group_1_0__2
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__1__Impl_in_rule__TypeParameterCS__Group_1_0__145811);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__1__Impl_in_rule__TypeParameterCS__Group_1_0__147681);
             rule__TypeParameterCS__Group_1_0__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__2_in_rule__TypeParameterCS__Group_1_0__145814);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__2_in_rule__TypeParameterCS__Group_1_0__147684);
             rule__TypeParameterCS__Group_1_0__2();
 
             state._fsp--;
@@ -66461,25 +68929,25 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22447:1: rule__TypeParameterCS__Group_1_0__1__Impl : ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23465:1: rule__TypeParameterCS__Group_1_0__1__Impl : ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 ) ) ;
     public final void rule__TypeParameterCS__Group_1_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22451:1: ( ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22452:1: ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23469:1: ( ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23470:1: ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22452:1: ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22453:1: ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23470:1: ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23471:1: ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getOwnedExtendsAssignment_1_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22454:1: ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22454:2: rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23472:1: ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23472:2: rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1_in_rule__TypeParameterCS__Group_1_0__1__Impl45841);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1_in_rule__TypeParameterCS__Group_1_0__1__Impl47711);
             rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1();
 
             state._fsp--;
@@ -66512,16 +68980,16 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22464:1: rule__TypeParameterCS__Group_1_0__2 : rule__TypeParameterCS__Group_1_0__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23482:1: rule__TypeParameterCS__Group_1_0__2 : rule__TypeParameterCS__Group_1_0__2__Impl ;
     public final void rule__TypeParameterCS__Group_1_0__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22468:1: ( rule__TypeParameterCS__Group_1_0__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22469:2: rule__TypeParameterCS__Group_1_0__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23486:1: ( rule__TypeParameterCS__Group_1_0__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23487:2: rule__TypeParameterCS__Group_1_0__2__Impl
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__2__Impl_in_rule__TypeParameterCS__Group_1_0__245871);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0__2__Impl_in_rule__TypeParameterCS__Group_1_0__247741);
             rule__TypeParameterCS__Group_1_0__2__Impl();
 
             state._fsp--;
@@ -66545,37 +69013,37 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22475:1: rule__TypeParameterCS__Group_1_0__2__Impl : ( ( rule__TypeParameterCS__Group_1_0_2__0 )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23493:1: rule__TypeParameterCS__Group_1_0__2__Impl : ( ( rule__TypeParameterCS__Group_1_0_2__0 )* ) ;
     public final void rule__TypeParameterCS__Group_1_0__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22479:1: ( ( ( rule__TypeParameterCS__Group_1_0_2__0 )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22480:1: ( ( rule__TypeParameterCS__Group_1_0_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23497:1: ( ( ( rule__TypeParameterCS__Group_1_0_2__0 )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23498:1: ( ( rule__TypeParameterCS__Group_1_0_2__0 )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22480:1: ( ( rule__TypeParameterCS__Group_1_0_2__0 )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22481:1: ( rule__TypeParameterCS__Group_1_0_2__0 )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23498:1: ( ( rule__TypeParameterCS__Group_1_0_2__0 )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23499:1: ( rule__TypeParameterCS__Group_1_0_2__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getGroup_1_0_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22482:1: ( rule__TypeParameterCS__Group_1_0_2__0 )*
-            loop225:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23500:1: ( rule__TypeParameterCS__Group_1_0_2__0 )*
+            loop253:
             do {
-                int alt225=2;
-                int LA225_0 = input.LA(1);
+                int alt253=2;
+                int LA253_0 = input.LA(1);
 
-                if ( (LA225_0==119) ) {
-                    alt225=1;
+                if ( (LA253_0==128) ) {
+                    alt253=1;
                 }
 
 
-                switch (alt225) {
+                switch (alt253) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22482:2: rule__TypeParameterCS__Group_1_0_2__0
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23500:2: rule__TypeParameterCS__Group_1_0_2__0
             	    {
-            	    pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0_2__0_in_rule__TypeParameterCS__Group_1_0__2__Impl45898);
+            	    pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0_2__0_in_rule__TypeParameterCS__Group_1_0__2__Impl47768);
             	    rule__TypeParameterCS__Group_1_0_2__0();
 
             	    state._fsp--;
@@ -66585,7 +69053,7 @@
             	    break;
 
             	default :
-            	    break loop225;
+            	    break loop253;
                 }
             } while (true);
 
@@ -66614,21 +69082,21 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0_2__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22498:1: rule__TypeParameterCS__Group_1_0_2__0 : rule__TypeParameterCS__Group_1_0_2__0__Impl rule__TypeParameterCS__Group_1_0_2__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23516:1: rule__TypeParameterCS__Group_1_0_2__0 : rule__TypeParameterCS__Group_1_0_2__0__Impl rule__TypeParameterCS__Group_1_0_2__1 ;
     public final void rule__TypeParameterCS__Group_1_0_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22502:1: ( rule__TypeParameterCS__Group_1_0_2__0__Impl rule__TypeParameterCS__Group_1_0_2__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22503:2: rule__TypeParameterCS__Group_1_0_2__0__Impl rule__TypeParameterCS__Group_1_0_2__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23520:1: ( rule__TypeParameterCS__Group_1_0_2__0__Impl rule__TypeParameterCS__Group_1_0_2__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23521:2: rule__TypeParameterCS__Group_1_0_2__0__Impl rule__TypeParameterCS__Group_1_0_2__1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0_2__0__Impl_in_rule__TypeParameterCS__Group_1_0_2__045935);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0_2__0__Impl_in_rule__TypeParameterCS__Group_1_0_2__047805);
             rule__TypeParameterCS__Group_1_0_2__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0_2__1_in_rule__TypeParameterCS__Group_1_0_2__045938);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0_2__1_in_rule__TypeParameterCS__Group_1_0_2__047808);
             rule__TypeParameterCS__Group_1_0_2__1();
 
             state._fsp--;
@@ -66652,22 +69120,22 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0_2__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22510:1: rule__TypeParameterCS__Group_1_0_2__0__Impl : ( '&&' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23528:1: rule__TypeParameterCS__Group_1_0_2__0__Impl : ( '&&' ) ;
     public final void rule__TypeParameterCS__Group_1_0_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22514:1: ( ( '&&' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22515:1: ( '&&' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23532:1: ( ( '&&' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23533:1: ( '&&' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22515:1: ( '&&' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22516:1: '&&'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23533:1: ( '&&' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23534:1: '&&'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getAmpersandAmpersandKeyword_1_0_2_0()); 
             }
-            match(input,119,FollowSets002.FOLLOW_119_in_rule__TypeParameterCS__Group_1_0_2__0__Impl45966); if (state.failed) return ;
+            match(input,128,FollowSets002.FOLLOW_128_in_rule__TypeParameterCS__Group_1_0_2__0__Impl47836); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTypeParameterCSAccess().getAmpersandAmpersandKeyword_1_0_2_0()); 
             }
@@ -66693,16 +69161,16 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0_2__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22529:1: rule__TypeParameterCS__Group_1_0_2__1 : rule__TypeParameterCS__Group_1_0_2__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23547:1: rule__TypeParameterCS__Group_1_0_2__1 : rule__TypeParameterCS__Group_1_0_2__1__Impl ;
     public final void rule__TypeParameterCS__Group_1_0_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22533:1: ( rule__TypeParameterCS__Group_1_0_2__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22534:2: rule__TypeParameterCS__Group_1_0_2__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23551:1: ( rule__TypeParameterCS__Group_1_0_2__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23552:2: rule__TypeParameterCS__Group_1_0_2__1__Impl
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0_2__1__Impl_in_rule__TypeParameterCS__Group_1_0_2__145997);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_0_2__1__Impl_in_rule__TypeParameterCS__Group_1_0_2__147867);
             rule__TypeParameterCS__Group_1_0_2__1__Impl();
 
             state._fsp--;
@@ -66726,25 +69194,25 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_0_2__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22540:1: rule__TypeParameterCS__Group_1_0_2__1__Impl : ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23558:1: rule__TypeParameterCS__Group_1_0_2__1__Impl : ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 ) ) ;
     public final void rule__TypeParameterCS__Group_1_0_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22544:1: ( ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22545:1: ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23562:1: ( ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23563:1: ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22545:1: ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22546:1: ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23563:1: ( ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23564:1: ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getOwnedExtendsAssignment_1_0_2_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22547:1: ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22547:2: rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23565:1: ( rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23565:2: rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1_in_rule__TypeParameterCS__Group_1_0_2__1__Impl46024);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1_in_rule__TypeParameterCS__Group_1_0_2__1__Impl47894);
             rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1();
 
             state._fsp--;
@@ -66777,21 +69245,21 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22561:1: rule__TypeParameterCS__Group_1_1__0 : rule__TypeParameterCS__Group_1_1__0__Impl rule__TypeParameterCS__Group_1_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23579:1: rule__TypeParameterCS__Group_1_1__0 : rule__TypeParameterCS__Group_1_1__0__Impl rule__TypeParameterCS__Group_1_1__1 ;
     public final void rule__TypeParameterCS__Group_1_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22565:1: ( rule__TypeParameterCS__Group_1_1__0__Impl rule__TypeParameterCS__Group_1_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22566:2: rule__TypeParameterCS__Group_1_1__0__Impl rule__TypeParameterCS__Group_1_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23583:1: ( rule__TypeParameterCS__Group_1_1__0__Impl rule__TypeParameterCS__Group_1_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23584:2: rule__TypeParameterCS__Group_1_1__0__Impl rule__TypeParameterCS__Group_1_1__1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_1__0__Impl_in_rule__TypeParameterCS__Group_1_1__046058);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_1__0__Impl_in_rule__TypeParameterCS__Group_1_1__047928);
             rule__TypeParameterCS__Group_1_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_1__1_in_rule__TypeParameterCS__Group_1_1__046061);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_1__1_in_rule__TypeParameterCS__Group_1_1__047931);
             rule__TypeParameterCS__Group_1_1__1();
 
             state._fsp--;
@@ -66815,22 +69283,22 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22573:1: rule__TypeParameterCS__Group_1_1__0__Impl : ( 'super' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23591:1: rule__TypeParameterCS__Group_1_1__0__Impl : ( 'super' ) ;
     public final void rule__TypeParameterCS__Group_1_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22577:1: ( ( 'super' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22578:1: ( 'super' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23595:1: ( ( 'super' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23596:1: ( 'super' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22578:1: ( 'super' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22579:1: 'super'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23596:1: ( 'super' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23597:1: 'super'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getSuperKeyword_1_1_0()); 
             }
-            match(input,47,FollowSets002.FOLLOW_47_in_rule__TypeParameterCS__Group_1_1__0__Impl46089); if (state.failed) return ;
+            match(input,47,FollowSets002.FOLLOW_47_in_rule__TypeParameterCS__Group_1_1__0__Impl47959); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTypeParameterCSAccess().getSuperKeyword_1_1_0()); 
             }
@@ -66856,16 +69324,16 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22592:1: rule__TypeParameterCS__Group_1_1__1 : rule__TypeParameterCS__Group_1_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23610:1: rule__TypeParameterCS__Group_1_1__1 : rule__TypeParameterCS__Group_1_1__1__Impl ;
     public final void rule__TypeParameterCS__Group_1_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22596:1: ( rule__TypeParameterCS__Group_1_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22597:2: rule__TypeParameterCS__Group_1_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23614:1: ( rule__TypeParameterCS__Group_1_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23615:2: rule__TypeParameterCS__Group_1_1__1__Impl
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_1__1__Impl_in_rule__TypeParameterCS__Group_1_1__146120);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__Group_1_1__1__Impl_in_rule__TypeParameterCS__Group_1_1__147990);
             rule__TypeParameterCS__Group_1_1__1__Impl();
 
             state._fsp--;
@@ -66889,25 +69357,25 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__Group_1_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22603:1: rule__TypeParameterCS__Group_1_1__1__Impl : ( ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23621:1: rule__TypeParameterCS__Group_1_1__1__Impl : ( ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 ) ) ;
     public final void rule__TypeParameterCS__Group_1_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22607:1: ( ( ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22608:1: ( ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23625:1: ( ( ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23626:1: ( ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22608:1: ( ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22609:1: ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23626:1: ( ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23627:1: ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getOwnedSuperAssignment_1_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22610:1: ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22610:2: rule__TypeParameterCS__OwnedSuperAssignment_1_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23628:1: ( rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23628:2: rule__TypeParameterCS__OwnedSuperAssignment_1_1_1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__OwnedSuperAssignment_1_1_1_in_rule__TypeParameterCS__Group_1_1__1__Impl46147);
+            pushFollow(FollowSets002.FOLLOW_rule__TypeParameterCS__OwnedSuperAssignment_1_1_1_in_rule__TypeParameterCS__Group_1_1__1__Impl48017);
             rule__TypeParameterCS__OwnedSuperAssignment_1_1_1();
 
             state._fsp--;
@@ -66940,21 +69408,21 @@
 
 
     // $ANTLR start "rule__TypedTypeRefCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22624:1: rule__TypedTypeRefCS__Group__0 : rule__TypedTypeRefCS__Group__0__Impl rule__TypedTypeRefCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23642:1: rule__TypedTypeRefCS__Group__0 : rule__TypedTypeRefCS__Group__0__Impl rule__TypedTypeRefCS__Group__1 ;
     public final void rule__TypedTypeRefCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22628:1: ( rule__TypedTypeRefCS__Group__0__Impl rule__TypedTypeRefCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22629:2: rule__TypedTypeRefCS__Group__0__Impl rule__TypedTypeRefCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23646:1: ( rule__TypedTypeRefCS__Group__0__Impl rule__TypedTypeRefCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23647:2: rule__TypedTypeRefCS__Group__0__Impl rule__TypedTypeRefCS__Group__1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__Group__0__Impl_in_rule__TypedTypeRefCS__Group__046181);
+            pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__Group__0__Impl_in_rule__TypedTypeRefCS__Group__048051);
             rule__TypedTypeRefCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__Group__1_in_rule__TypedTypeRefCS__Group__046184);
+            pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__Group__1_in_rule__TypedTypeRefCS__Group__048054);
             rule__TypedTypeRefCS__Group__1();
 
             state._fsp--;
@@ -66978,25 +69446,25 @@
 
 
     // $ANTLR start "rule__TypedTypeRefCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22636:1: rule__TypedTypeRefCS__Group__0__Impl : ( ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23654:1: rule__TypedTypeRefCS__Group__0__Impl : ( ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 ) ) ;
     public final void rule__TypedTypeRefCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22640:1: ( ( ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22641:1: ( ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23658:1: ( ( ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23659:1: ( ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22641:1: ( ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22642:1: ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23659:1: ( ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23660:1: ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypedTypeRefCSAccess().getOwnedPathNameAssignment_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22643:1: ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22643:2: rule__TypedTypeRefCS__OwnedPathNameAssignment_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23661:1: ( rule__TypedTypeRefCS__OwnedPathNameAssignment_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23661:2: rule__TypedTypeRefCS__OwnedPathNameAssignment_0
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__OwnedPathNameAssignment_0_in_rule__TypedTypeRefCS__Group__0__Impl46211);
+            pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__OwnedPathNameAssignment_0_in_rule__TypedTypeRefCS__Group__0__Impl48081);
             rule__TypedTypeRefCS__OwnedPathNameAssignment_0();
 
             state._fsp--;
@@ -67029,16 +69497,16 @@
 
 
     // $ANTLR start "rule__TypedTypeRefCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22653:1: rule__TypedTypeRefCS__Group__1 : rule__TypedTypeRefCS__Group__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23671:1: rule__TypedTypeRefCS__Group__1 : rule__TypedTypeRefCS__Group__1__Impl ;
     public final void rule__TypedTypeRefCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22657:1: ( rule__TypedTypeRefCS__Group__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22658:2: rule__TypedTypeRefCS__Group__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23675:1: ( rule__TypedTypeRefCS__Group__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23676:2: rule__TypedTypeRefCS__Group__1__Impl
             {
-            pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__Group__1__Impl_in_rule__TypedTypeRefCS__Group__146241);
+            pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__Group__1__Impl_in_rule__TypedTypeRefCS__Group__148111);
             rule__TypedTypeRefCS__Group__1__Impl();
 
             state._fsp--;
@@ -67062,33 +69530,33 @@
 
 
     // $ANTLR start "rule__TypedTypeRefCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22664:1: rule__TypedTypeRefCS__Group__1__Impl : ( ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23682:1: rule__TypedTypeRefCS__Group__1__Impl : ( ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )? ) ;
     public final void rule__TypedTypeRefCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22668:1: ( ( ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22669:1: ( ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23686:1: ( ( ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23687:1: ( ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22669:1: ( ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22670:1: ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23687:1: ( ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23688:1: ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypedTypeRefCSAccess().getOwnedBindingAssignment_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22671:1: ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )?
-            int alt226=2;
-            int LA226_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23689:1: ( rule__TypedTypeRefCS__OwnedBindingAssignment_1 )?
+            int alt254=2;
+            int LA254_0 = input.LA(1);
 
-            if ( (LA226_0==67||LA226_0==95) ) {
-                alt226=1;
+            if ( (LA254_0==76||LA254_0==104) ) {
+                alt254=1;
             }
-            switch (alt226) {
+            switch (alt254) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22671:2: rule__TypedTypeRefCS__OwnedBindingAssignment_1
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23689:2: rule__TypedTypeRefCS__OwnedBindingAssignment_1
                     {
-                    pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__OwnedBindingAssignment_1_in_rule__TypedTypeRefCS__Group__1__Impl46268);
+                    pushFollow(FollowSets002.FOLLOW_rule__TypedTypeRefCS__OwnedBindingAssignment_1_in_rule__TypedTypeRefCS__Group__1__Impl48138);
                     rule__TypedTypeRefCS__OwnedBindingAssignment_1();
 
                     state._fsp--;
@@ -67124,21 +69592,21 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22685:1: rule__WildcardTypeRefCS__Group__0 : rule__WildcardTypeRefCS__Group__0__Impl rule__WildcardTypeRefCS__Group__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23703:1: rule__WildcardTypeRefCS__Group__0 : rule__WildcardTypeRefCS__Group__0__Impl rule__WildcardTypeRefCS__Group__1 ;
     public final void rule__WildcardTypeRefCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22689:1: ( rule__WildcardTypeRefCS__Group__0__Impl rule__WildcardTypeRefCS__Group__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22690:2: rule__WildcardTypeRefCS__Group__0__Impl rule__WildcardTypeRefCS__Group__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23707:1: ( rule__WildcardTypeRefCS__Group__0__Impl rule__WildcardTypeRefCS__Group__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23708:2: rule__WildcardTypeRefCS__Group__0__Impl rule__WildcardTypeRefCS__Group__1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__0__Impl_in_rule__WildcardTypeRefCS__Group__046303);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__0__Impl_in_rule__WildcardTypeRefCS__Group__048173);
             rule__WildcardTypeRefCS__Group__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__1_in_rule__WildcardTypeRefCS__Group__046306);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__1_in_rule__WildcardTypeRefCS__Group__048176);
             rule__WildcardTypeRefCS__Group__1();
 
             state._fsp--;
@@ -67162,23 +69630,23 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22697:1: rule__WildcardTypeRefCS__Group__0__Impl : ( () ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23715:1: rule__WildcardTypeRefCS__Group__0__Impl : ( () ) ;
     public final void rule__WildcardTypeRefCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22701:1: ( ( () ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22702:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23719:1: ( ( () ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23720:1: ( () )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22702:1: ( () )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22703:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23720:1: ( () )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23721:1: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWildcardTypeRefCSAccess().getWildcardTypeRefCSAction_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22704:1: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22706:1: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23722:1: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23724:1: 
             {
             }
 
@@ -67203,21 +69671,21 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22716:1: rule__WildcardTypeRefCS__Group__1 : rule__WildcardTypeRefCS__Group__1__Impl rule__WildcardTypeRefCS__Group__2 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23734:1: rule__WildcardTypeRefCS__Group__1 : rule__WildcardTypeRefCS__Group__1__Impl rule__WildcardTypeRefCS__Group__2 ;
     public final void rule__WildcardTypeRefCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22720:1: ( rule__WildcardTypeRefCS__Group__1__Impl rule__WildcardTypeRefCS__Group__2 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22721:2: rule__WildcardTypeRefCS__Group__1__Impl rule__WildcardTypeRefCS__Group__2
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23738:1: ( rule__WildcardTypeRefCS__Group__1__Impl rule__WildcardTypeRefCS__Group__2 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23739:2: rule__WildcardTypeRefCS__Group__1__Impl rule__WildcardTypeRefCS__Group__2
             {
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__1__Impl_in_rule__WildcardTypeRefCS__Group__146364);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__1__Impl_in_rule__WildcardTypeRefCS__Group__148234);
             rule__WildcardTypeRefCS__Group__1__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__2_in_rule__WildcardTypeRefCS__Group__146367);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__2_in_rule__WildcardTypeRefCS__Group__148237);
             rule__WildcardTypeRefCS__Group__2();
 
             state._fsp--;
@@ -67241,22 +69709,22 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22728:1: rule__WildcardTypeRefCS__Group__1__Impl : ( '?' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23746:1: rule__WildcardTypeRefCS__Group__1__Impl : ( '?' ) ;
     public final void rule__WildcardTypeRefCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22732:1: ( ( '?' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22733:1: ( '?' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23750:1: ( ( '?' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23751:1: ( '?' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22733:1: ( '?' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22734:1: '?'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23751:1: ( '?' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23752:1: '?'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWildcardTypeRefCSAccess().getQuestionMarkKeyword_1()); 
             }
-            match(input,94,FollowSets002.FOLLOW_94_in_rule__WildcardTypeRefCS__Group__1__Impl46395); if (state.failed) return ;
+            match(input,103,FollowSets002.FOLLOW_103_in_rule__WildcardTypeRefCS__Group__1__Impl48265); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getWildcardTypeRefCSAccess().getQuestionMarkKeyword_1()); 
             }
@@ -67282,16 +69750,16 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group__2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22747:1: rule__WildcardTypeRefCS__Group__2 : rule__WildcardTypeRefCS__Group__2__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23765:1: rule__WildcardTypeRefCS__Group__2 : rule__WildcardTypeRefCS__Group__2__Impl ;
     public final void rule__WildcardTypeRefCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22751:1: ( rule__WildcardTypeRefCS__Group__2__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22752:2: rule__WildcardTypeRefCS__Group__2__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23769:1: ( rule__WildcardTypeRefCS__Group__2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23770:2: rule__WildcardTypeRefCS__Group__2__Impl
             {
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__2__Impl_in_rule__WildcardTypeRefCS__Group__246426);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group__2__Impl_in_rule__WildcardTypeRefCS__Group__248296);
             rule__WildcardTypeRefCS__Group__2__Impl();
 
             state._fsp--;
@@ -67315,33 +69783,33 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group__2__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22758:1: rule__WildcardTypeRefCS__Group__2__Impl : ( ( rule__WildcardTypeRefCS__Alternatives_2 )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23776:1: rule__WildcardTypeRefCS__Group__2__Impl : ( ( rule__WildcardTypeRefCS__Alternatives_2 )? ) ;
     public final void rule__WildcardTypeRefCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22762:1: ( ( ( rule__WildcardTypeRefCS__Alternatives_2 )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22763:1: ( ( rule__WildcardTypeRefCS__Alternatives_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23780:1: ( ( ( rule__WildcardTypeRefCS__Alternatives_2 )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23781:1: ( ( rule__WildcardTypeRefCS__Alternatives_2 )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22763:1: ( ( rule__WildcardTypeRefCS__Alternatives_2 )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22764:1: ( rule__WildcardTypeRefCS__Alternatives_2 )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23781:1: ( ( rule__WildcardTypeRefCS__Alternatives_2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23782:1: ( rule__WildcardTypeRefCS__Alternatives_2 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWildcardTypeRefCSAccess().getAlternatives_2()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22765:1: ( rule__WildcardTypeRefCS__Alternatives_2 )?
-            int alt227=2;
-            int LA227_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23783:1: ( rule__WildcardTypeRefCS__Alternatives_2 )?
+            int alt255=2;
+            int LA255_0 = input.LA(1);
 
-            if ( (LA227_0==28||LA227_0==47) ) {
-                alt227=1;
+            if ( (LA255_0==28||LA255_0==47) ) {
+                alt255=1;
             }
-            switch (alt227) {
+            switch (alt255) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22765:2: rule__WildcardTypeRefCS__Alternatives_2
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23783:2: rule__WildcardTypeRefCS__Alternatives_2
                     {
-                    pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Alternatives_2_in_rule__WildcardTypeRefCS__Group__2__Impl46453);
+                    pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Alternatives_2_in_rule__WildcardTypeRefCS__Group__2__Impl48323);
                     rule__WildcardTypeRefCS__Alternatives_2();
 
                     state._fsp--;
@@ -67377,21 +69845,21 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group_2_0__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22781:1: rule__WildcardTypeRefCS__Group_2_0__0 : rule__WildcardTypeRefCS__Group_2_0__0__Impl rule__WildcardTypeRefCS__Group_2_0__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23799:1: rule__WildcardTypeRefCS__Group_2_0__0 : rule__WildcardTypeRefCS__Group_2_0__0__Impl rule__WildcardTypeRefCS__Group_2_0__1 ;
     public final void rule__WildcardTypeRefCS__Group_2_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22785:1: ( rule__WildcardTypeRefCS__Group_2_0__0__Impl rule__WildcardTypeRefCS__Group_2_0__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22786:2: rule__WildcardTypeRefCS__Group_2_0__0__Impl rule__WildcardTypeRefCS__Group_2_0__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23803:1: ( rule__WildcardTypeRefCS__Group_2_0__0__Impl rule__WildcardTypeRefCS__Group_2_0__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23804:2: rule__WildcardTypeRefCS__Group_2_0__0__Impl rule__WildcardTypeRefCS__Group_2_0__1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_0__0__Impl_in_rule__WildcardTypeRefCS__Group_2_0__046490);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_0__0__Impl_in_rule__WildcardTypeRefCS__Group_2_0__048360);
             rule__WildcardTypeRefCS__Group_2_0__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_0__1_in_rule__WildcardTypeRefCS__Group_2_0__046493);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_0__1_in_rule__WildcardTypeRefCS__Group_2_0__048363);
             rule__WildcardTypeRefCS__Group_2_0__1();
 
             state._fsp--;
@@ -67415,22 +69883,22 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group_2_0__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22793:1: rule__WildcardTypeRefCS__Group_2_0__0__Impl : ( 'extends' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23811:1: rule__WildcardTypeRefCS__Group_2_0__0__Impl : ( 'extends' ) ;
     public final void rule__WildcardTypeRefCS__Group_2_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22797:1: ( ( 'extends' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22798:1: ( 'extends' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23815:1: ( ( 'extends' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23816:1: ( 'extends' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22798:1: ( 'extends' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22799:1: 'extends'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23816:1: ( 'extends' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23817:1: 'extends'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWildcardTypeRefCSAccess().getExtendsKeyword_2_0_0()); 
             }
-            match(input,28,FollowSets002.FOLLOW_28_in_rule__WildcardTypeRefCS__Group_2_0__0__Impl46521); if (state.failed) return ;
+            match(input,28,FollowSets002.FOLLOW_28_in_rule__WildcardTypeRefCS__Group_2_0__0__Impl48391); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getWildcardTypeRefCSAccess().getExtendsKeyword_2_0_0()); 
             }
@@ -67456,16 +69924,16 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group_2_0__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22812:1: rule__WildcardTypeRefCS__Group_2_0__1 : rule__WildcardTypeRefCS__Group_2_0__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23830:1: rule__WildcardTypeRefCS__Group_2_0__1 : rule__WildcardTypeRefCS__Group_2_0__1__Impl ;
     public final void rule__WildcardTypeRefCS__Group_2_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22816:1: ( rule__WildcardTypeRefCS__Group_2_0__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22817:2: rule__WildcardTypeRefCS__Group_2_0__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23834:1: ( rule__WildcardTypeRefCS__Group_2_0__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23835:2: rule__WildcardTypeRefCS__Group_2_0__1__Impl
             {
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_0__1__Impl_in_rule__WildcardTypeRefCS__Group_2_0__146552);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_0__1__Impl_in_rule__WildcardTypeRefCS__Group_2_0__148422);
             rule__WildcardTypeRefCS__Group_2_0__1__Impl();
 
             state._fsp--;
@@ -67489,25 +69957,25 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group_2_0__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22823:1: rule__WildcardTypeRefCS__Group_2_0__1__Impl : ( ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23841:1: rule__WildcardTypeRefCS__Group_2_0__1__Impl : ( ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 ) ) ;
     public final void rule__WildcardTypeRefCS__Group_2_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22827:1: ( ( ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22828:1: ( ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23845:1: ( ( ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23846:1: ( ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22828:1: ( ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22829:1: ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23846:1: ( ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23847:1: ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWildcardTypeRefCSAccess().getOwnedExtendsAssignment_2_0_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22830:1: ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22830:2: rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23848:1: ( rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23848:2: rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1_in_rule__WildcardTypeRefCS__Group_2_0__1__Impl46579);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1_in_rule__WildcardTypeRefCS__Group_2_0__1__Impl48449);
             rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1();
 
             state._fsp--;
@@ -67540,21 +70008,21 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group_2_1__0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22844:1: rule__WildcardTypeRefCS__Group_2_1__0 : rule__WildcardTypeRefCS__Group_2_1__0__Impl rule__WildcardTypeRefCS__Group_2_1__1 ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23862:1: rule__WildcardTypeRefCS__Group_2_1__0 : rule__WildcardTypeRefCS__Group_2_1__0__Impl rule__WildcardTypeRefCS__Group_2_1__1 ;
     public final void rule__WildcardTypeRefCS__Group_2_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22848:1: ( rule__WildcardTypeRefCS__Group_2_1__0__Impl rule__WildcardTypeRefCS__Group_2_1__1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22849:2: rule__WildcardTypeRefCS__Group_2_1__0__Impl rule__WildcardTypeRefCS__Group_2_1__1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23866:1: ( rule__WildcardTypeRefCS__Group_2_1__0__Impl rule__WildcardTypeRefCS__Group_2_1__1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23867:2: rule__WildcardTypeRefCS__Group_2_1__0__Impl rule__WildcardTypeRefCS__Group_2_1__1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_1__0__Impl_in_rule__WildcardTypeRefCS__Group_2_1__046613);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_1__0__Impl_in_rule__WildcardTypeRefCS__Group_2_1__048483);
             rule__WildcardTypeRefCS__Group_2_1__0__Impl();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_1__1_in_rule__WildcardTypeRefCS__Group_2_1__046616);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_1__1_in_rule__WildcardTypeRefCS__Group_2_1__048486);
             rule__WildcardTypeRefCS__Group_2_1__1();
 
             state._fsp--;
@@ -67578,22 +70046,22 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group_2_1__0__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22856:1: rule__WildcardTypeRefCS__Group_2_1__0__Impl : ( 'super' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23874:1: rule__WildcardTypeRefCS__Group_2_1__0__Impl : ( 'super' ) ;
     public final void rule__WildcardTypeRefCS__Group_2_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22860:1: ( ( 'super' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22861:1: ( 'super' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23878:1: ( ( 'super' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23879:1: ( 'super' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22861:1: ( 'super' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22862:1: 'super'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23879:1: ( 'super' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23880:1: 'super'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWildcardTypeRefCSAccess().getSuperKeyword_2_1_0()); 
             }
-            match(input,47,FollowSets002.FOLLOW_47_in_rule__WildcardTypeRefCS__Group_2_1__0__Impl46644); if (state.failed) return ;
+            match(input,47,FollowSets002.FOLLOW_47_in_rule__WildcardTypeRefCS__Group_2_1__0__Impl48514); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getWildcardTypeRefCSAccess().getSuperKeyword_2_1_0()); 
             }
@@ -67619,16 +70087,16 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group_2_1__1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22875:1: rule__WildcardTypeRefCS__Group_2_1__1 : rule__WildcardTypeRefCS__Group_2_1__1__Impl ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23893:1: rule__WildcardTypeRefCS__Group_2_1__1 : rule__WildcardTypeRefCS__Group_2_1__1__Impl ;
     public final void rule__WildcardTypeRefCS__Group_2_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22879:1: ( rule__WildcardTypeRefCS__Group_2_1__1__Impl )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22880:2: rule__WildcardTypeRefCS__Group_2_1__1__Impl
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23897:1: ( rule__WildcardTypeRefCS__Group_2_1__1__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23898:2: rule__WildcardTypeRefCS__Group_2_1__1__Impl
             {
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_1__1__Impl_in_rule__WildcardTypeRefCS__Group_2_1__146675);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__Group_2_1__1__Impl_in_rule__WildcardTypeRefCS__Group_2_1__148545);
             rule__WildcardTypeRefCS__Group_2_1__1__Impl();
 
             state._fsp--;
@@ -67652,25 +70120,25 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__Group_2_1__1__Impl"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22886:1: rule__WildcardTypeRefCS__Group_2_1__1__Impl : ( ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23904:1: rule__WildcardTypeRefCS__Group_2_1__1__Impl : ( ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 ) ) ;
     public final void rule__WildcardTypeRefCS__Group_2_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22890:1: ( ( ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22891:1: ( ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23908:1: ( ( ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23909:1: ( ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22891:1: ( ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22892:1: ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23909:1: ( ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23910:1: ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWildcardTypeRefCSAccess().getOwnedSuperAssignment_2_1_1()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22893:1: ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22893:2: rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23911:1: ( rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23911:2: rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1
             {
-            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1_in_rule__WildcardTypeRefCS__Group_2_1__1__Impl46702);
+            pushFollow(FollowSets002.FOLLOW_rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1_in_rule__WildcardTypeRefCS__Group_2_1__1__Impl48572);
             rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1();
 
             state._fsp--;
@@ -67702,23 +70170,3325 @@
     // $ANTLR end "rule__WildcardTypeRefCS__Group_2_1__1__Impl"
 
 
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23926:1: rule__AttributeCS__UnorderedGroup_0 : ( rule__AttributeCS__UnorderedGroup_0__0 )? ;
+    public final void rule__AttributeCS__UnorderedGroup_0() throws RecognitionException {
+
+            	int stackSize = keepStackSize();
+        		getUnorderedGroupHelper().enter(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23931:1: ( ( rule__AttributeCS__UnorderedGroup_0__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23932:2: ( rule__AttributeCS__UnorderedGroup_0__0 )?
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23932:2: ( rule__AttributeCS__UnorderedGroup_0__0 )?
+            int alt256=2;
+            int LA256_0 = input.LA(1);
+
+            if ( LA256_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0) ) {
+                alt256=1;
+            }
+            else if ( LA256_0 ==24 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1) ) {
+                alt256=1;
+            }
+            switch (alt256) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__AttributeCS__UnorderedGroup_0__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_0__0_in_rule__AttributeCS__UnorderedGroup_048607);
+                    rule__AttributeCS__UnorderedGroup_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	getUnorderedGroupHelper().leave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_0"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23942:1: rule__AttributeCS__UnorderedGroup_0__Impl : ( ({...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) ) ) ) ) ;
+    public final void rule__AttributeCS__UnorderedGroup_0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        		boolean selected = false;
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23947:1: ( ( ({...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23948:3: ( ({...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) ) ) ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23948:3: ( ({...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) ) ) ) )
+            int alt257=2;
+            int LA257_0 = input.LA(1);
+
+            if ( LA257_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0) ) {
+                alt257=1;
+            }
+            else if ( LA257_0 ==24 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1) ) {
+                alt257=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 257, 0, input);
+
+                throw nvae;
+            }
+            switch (alt257) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23950:4: ({...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23950:4: ({...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23951:5: {...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_0__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23951:108: ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23952:6: ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23958:6: ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23960:7: ( rule__AttributeCS__IsStaticAssignment_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getIsStaticAssignment_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23961:7: ( rule__AttributeCS__IsStaticAssignment_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23961:8: rule__AttributeCS__IsStaticAssignment_0_0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__IsStaticAssignment_0_0_in_rule__AttributeCS__UnorderedGroup_0__Impl48694);
+                    rule__AttributeCS__IsStaticAssignment_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getIsStaticAssignment_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23967:4: ({...}? => ( ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23967:4: ({...}? => ( ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23968:5: {...}? => ( ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_0__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23968:108: ( ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23969:6: ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23975:6: ( ( rule__AttributeCS__IsDefinitionAssignment_0_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23977:7: ( rule__AttributeCS__IsDefinitionAssignment_0_1 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getIsDefinitionAssignment_0_1()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23978:7: ( rule__AttributeCS__IsDefinitionAssignment_0_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23978:8: rule__AttributeCS__IsDefinitionAssignment_0_1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__IsDefinitionAssignment_0_1_in_rule__AttributeCS__UnorderedGroup_0__Impl48785);
+                    rule__AttributeCS__IsDefinitionAssignment_0_1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getIsDefinitionAssignment_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	if (selected)
+            		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_0__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23993:1: rule__AttributeCS__UnorderedGroup_0__0 : rule__AttributeCS__UnorderedGroup_0__Impl ( rule__AttributeCS__UnorderedGroup_0__1 )? ;
+    public final void rule__AttributeCS__UnorderedGroup_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23997:1: ( rule__AttributeCS__UnorderedGroup_0__Impl ( rule__AttributeCS__UnorderedGroup_0__1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23998:2: rule__AttributeCS__UnorderedGroup_0__Impl ( rule__AttributeCS__UnorderedGroup_0__1 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_0__Impl_in_rule__AttributeCS__UnorderedGroup_0__048844);
+            rule__AttributeCS__UnorderedGroup_0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23999:2: ( rule__AttributeCS__UnorderedGroup_0__1 )?
+            int alt258=2;
+            int LA258_0 = input.LA(1);
+
+            if ( LA258_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0) ) {
+                alt258=1;
+            }
+            else if ( LA258_0 ==24 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1) ) {
+                alt258=1;
+            }
+            switch (alt258) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__AttributeCS__UnorderedGroup_0__1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_0__1_in_rule__AttributeCS__UnorderedGroup_0__048847);
+                    rule__AttributeCS__UnorderedGroup_0__1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_0__0"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24006:1: rule__AttributeCS__UnorderedGroup_0__1 : rule__AttributeCS__UnorderedGroup_0__Impl ;
+    public final void rule__AttributeCS__UnorderedGroup_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24010:1: ( rule__AttributeCS__UnorderedGroup_0__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24011:2: rule__AttributeCS__UnorderedGroup_0__Impl
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_0__Impl_in_rule__AttributeCS__UnorderedGroup_0__148872);
+            rule__AttributeCS__UnorderedGroup_0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_0__1"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24022:1: rule__AttributeCS__UnorderedGroup_5 : rule__AttributeCS__UnorderedGroup_5__0 {...}?;
+    public final void rule__AttributeCS__UnorderedGroup_5() throws RecognitionException {
+
+            	int stackSize = keepStackSize();
+        		getUnorderedGroupHelper().enter(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24027:1: ( rule__AttributeCS__UnorderedGroup_5__0 {...}?)
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24028:2: rule__AttributeCS__UnorderedGroup_5__0 {...}?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__0_in_rule__AttributeCS__UnorderedGroup_548900);
+            rule__AttributeCS__UnorderedGroup_5__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()) ) {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_5", "getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5())");
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	getUnorderedGroupHelper().leave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24039:1: rule__AttributeCS__UnorderedGroup_5__Impl : ( ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_7__0 ) ) ) ) ) ;
+    public final void rule__AttributeCS__UnorderedGroup_5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        		boolean selected = false;
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24044:1: ( ( ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_7__0 ) ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24045:3: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_7__0 ) ) ) ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24045:3: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_7__0 ) ) ) ) )
+            int alt259=8;
+            alt259 = dfa259.predict(input);
+            switch (alt259) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24047:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24047:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24048:5: {...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_5__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24048:108: ( ( ( rule__AttributeCS__Group_5_0__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24049:6: ( ( rule__AttributeCS__Group_5_0__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24055:6: ( ( rule__AttributeCS__Group_5_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24057:7: ( rule__AttributeCS__Group_5_0__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getGroup_5_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24058:7: ( rule__AttributeCS__Group_5_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24058:8: rule__AttributeCS__Group_5_0__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_0__0_in_rule__AttributeCS__UnorderedGroup_5__Impl48989);
+                    rule__AttributeCS__Group_5_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getGroup_5_0()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24064:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24064:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24065:5: {...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_5__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24065:108: ( ( ( rule__AttributeCS__Group_5_1__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24066:6: ( ( rule__AttributeCS__Group_5_1__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24072:6: ( ( rule__AttributeCS__Group_5_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24074:7: ( rule__AttributeCS__Group_5_1__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getGroup_5_1()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24075:7: ( rule__AttributeCS__Group_5_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24075:8: rule__AttributeCS__Group_5_1__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_1__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49080);
+                    rule__AttributeCS__Group_5_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getGroup_5_1()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24081:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24081:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24082:5: {...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_5__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24082:108: ( ( ( rule__AttributeCS__Group_5_2__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24083:6: ( ( rule__AttributeCS__Group_5_2__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24089:6: ( ( rule__AttributeCS__Group_5_2__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24091:7: ( rule__AttributeCS__Group_5_2__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getGroup_5_2()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24092:7: ( rule__AttributeCS__Group_5_2__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24092:8: rule__AttributeCS__Group_5_2__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_2__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49171);
+                    rule__AttributeCS__Group_5_2__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getGroup_5_2()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24098:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24098:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24099:5: {...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_5__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24099:108: ( ( ( rule__AttributeCS__Group_5_3__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24100:6: ( ( rule__AttributeCS__Group_5_3__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24106:6: ( ( rule__AttributeCS__Group_5_3__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24108:7: ( rule__AttributeCS__Group_5_3__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getGroup_5_3()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24109:7: ( rule__AttributeCS__Group_5_3__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24109:8: rule__AttributeCS__Group_5_3__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_3__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49262);
+                    rule__AttributeCS__Group_5_3__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getGroup_5_3()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24115:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24115:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24116:5: {...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_5__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24116:108: ( ( ( rule__AttributeCS__Group_5_4__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24117:6: ( ( rule__AttributeCS__Group_5_4__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24123:6: ( ( rule__AttributeCS__Group_5_4__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24125:7: ( rule__AttributeCS__Group_5_4__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getGroup_5_4()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24126:7: ( rule__AttributeCS__Group_5_4__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24126:8: rule__AttributeCS__Group_5_4__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_4__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49353);
+                    rule__AttributeCS__Group_5_4__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getGroup_5_4()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24132:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24132:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24133:5: {...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_5__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24133:108: ( ( ( rule__AttributeCS__Group_5_5__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24134:6: ( ( rule__AttributeCS__Group_5_5__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24140:6: ( ( rule__AttributeCS__Group_5_5__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24142:7: ( rule__AttributeCS__Group_5_5__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getGroup_5_5()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24143:7: ( rule__AttributeCS__Group_5_5__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24143:8: rule__AttributeCS__Group_5_5__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_5__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49444);
+                    rule__AttributeCS__Group_5_5__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getGroup_5_5()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 7 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24149:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24149:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24150:5: {...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_5__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24150:108: ( ( ( rule__AttributeCS__Group_5_6__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24151:6: ( ( rule__AttributeCS__Group_5_6__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24157:6: ( ( rule__AttributeCS__Group_5_6__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24159:7: ( rule__AttributeCS__Group_5_6__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getGroup_5_6()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24160:7: ( rule__AttributeCS__Group_5_6__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24160:8: rule__AttributeCS__Group_5_6__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_6__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49535);
+                    rule__AttributeCS__Group_5_6__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getGroup_5_6()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 8 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24166:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_7__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24166:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_7__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24167:5: {...}? => ( ( ( rule__AttributeCS__Group_5_7__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__AttributeCS__UnorderedGroup_5__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24167:108: ( ( ( rule__AttributeCS__Group_5_7__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24168:6: ( ( rule__AttributeCS__Group_5_7__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24174:6: ( ( rule__AttributeCS__Group_5_7__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24176:7: ( rule__AttributeCS__Group_5_7__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getAttributeCSAccess().getGroup_5_7()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24177:7: ( rule__AttributeCS__Group_5_7__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24177:8: rule__AttributeCS__Group_5_7__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_7__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49626);
+                    rule__AttributeCS__Group_5_7__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAttributeCSAccess().getGroup_5_7()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	if (selected)
+            		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5__Impl"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24192:1: rule__AttributeCS__UnorderedGroup_5__0 : rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__1 )? ;
+    public final void rule__AttributeCS__UnorderedGroup_5__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24196:1: ( rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24197:2: rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__1 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__049685);
+            rule__AttributeCS__UnorderedGroup_5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24198:2: ( rule__AttributeCS__UnorderedGroup_5__1 )?
+            int alt260=2;
+            alt260 = dfa260.predict(input);
+            switch (alt260) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__AttributeCS__UnorderedGroup_5__1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__1_in_rule__AttributeCS__UnorderedGroup_5__049688);
+                    rule__AttributeCS__UnorderedGroup_5__1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5__0"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24205:1: rule__AttributeCS__UnorderedGroup_5__1 : rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__2 )? ;
+    public final void rule__AttributeCS__UnorderedGroup_5__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24209:1: ( rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24210:2: rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__2 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__149713);
+            rule__AttributeCS__UnorderedGroup_5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24211:2: ( rule__AttributeCS__UnorderedGroup_5__2 )?
+            int alt261=2;
+            alt261 = dfa261.predict(input);
+            switch (alt261) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__AttributeCS__UnorderedGroup_5__2
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__2_in_rule__AttributeCS__UnorderedGroup_5__149716);
+                    rule__AttributeCS__UnorderedGroup_5__2();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5__1"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5__2"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24218:1: rule__AttributeCS__UnorderedGroup_5__2 : rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__3 )? ;
+    public final void rule__AttributeCS__UnorderedGroup_5__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24222:1: ( rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24223:2: rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__3 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__249741);
+            rule__AttributeCS__UnorderedGroup_5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24224:2: ( rule__AttributeCS__UnorderedGroup_5__3 )?
+            int alt262=2;
+            alt262 = dfa262.predict(input);
+            switch (alt262) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__AttributeCS__UnorderedGroup_5__3
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__3_in_rule__AttributeCS__UnorderedGroup_5__249744);
+                    rule__AttributeCS__UnorderedGroup_5__3();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5__2"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5__3"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24231:1: rule__AttributeCS__UnorderedGroup_5__3 : rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__4 )? ;
+    public final void rule__AttributeCS__UnorderedGroup_5__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24235:1: ( rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__4 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24236:2: rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__4 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__349769);
+            rule__AttributeCS__UnorderedGroup_5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24237:2: ( rule__AttributeCS__UnorderedGroup_5__4 )?
+            int alt263=2;
+            alt263 = dfa263.predict(input);
+            switch (alt263) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__AttributeCS__UnorderedGroup_5__4
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__4_in_rule__AttributeCS__UnorderedGroup_5__349772);
+                    rule__AttributeCS__UnorderedGroup_5__4();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5__3"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5__4"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24244:1: rule__AttributeCS__UnorderedGroup_5__4 : rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__5 )? ;
+    public final void rule__AttributeCS__UnorderedGroup_5__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24248:1: ( rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__5 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24249:2: rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__5 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__449797);
+            rule__AttributeCS__UnorderedGroup_5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24250:2: ( rule__AttributeCS__UnorderedGroup_5__5 )?
+            int alt264=2;
+            alt264 = dfa264.predict(input);
+            switch (alt264) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__AttributeCS__UnorderedGroup_5__5
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__5_in_rule__AttributeCS__UnorderedGroup_5__449800);
+                    rule__AttributeCS__UnorderedGroup_5__5();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5__4"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5__5"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24257:1: rule__AttributeCS__UnorderedGroup_5__5 : rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__6 )? ;
+    public final void rule__AttributeCS__UnorderedGroup_5__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24261:1: ( rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__6 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24262:2: rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__6 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__549825);
+            rule__AttributeCS__UnorderedGroup_5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24263:2: ( rule__AttributeCS__UnorderedGroup_5__6 )?
+            int alt265=2;
+            alt265 = dfa265.predict(input);
+            switch (alt265) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__AttributeCS__UnorderedGroup_5__6
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__6_in_rule__AttributeCS__UnorderedGroup_5__549828);
+                    rule__AttributeCS__UnorderedGroup_5__6();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5__5"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5__6"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24270:1: rule__AttributeCS__UnorderedGroup_5__6 : rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__7 )? ;
+    public final void rule__AttributeCS__UnorderedGroup_5__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24274:1: ( rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__7 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24275:2: rule__AttributeCS__UnorderedGroup_5__Impl ( rule__AttributeCS__UnorderedGroup_5__7 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__649853);
+            rule__AttributeCS__UnorderedGroup_5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24276:2: ( rule__AttributeCS__UnorderedGroup_5__7 )?
+            int alt266=2;
+            alt266 = dfa266.predict(input);
+            switch (alt266) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__AttributeCS__UnorderedGroup_5__7
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__7_in_rule__AttributeCS__UnorderedGroup_5__649856);
+                    rule__AttributeCS__UnorderedGroup_5__7();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5__6"
+
+
+    // $ANTLR start "rule__AttributeCS__UnorderedGroup_5__7"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24283:1: rule__AttributeCS__UnorderedGroup_5__7 : rule__AttributeCS__UnorderedGroup_5__Impl ;
+    public final void rule__AttributeCS__UnorderedGroup_5__7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24287:1: ( rule__AttributeCS__UnorderedGroup_5__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24288:2: rule__AttributeCS__UnorderedGroup_5__Impl
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__749881);
+            rule__AttributeCS__UnorderedGroup_5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AttributeCS__UnorderedGroup_5__7"
+
+
+    // $ANTLR start "rule__OperationCS__UnorderedGroup_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24311:1: rule__OperationCS__UnorderedGroup_0 : ( rule__OperationCS__UnorderedGroup_0__0 )? ;
+    public final void rule__OperationCS__UnorderedGroup_0() throws RecognitionException {
+
+            	int stackSize = keepStackSize();
+        		getUnorderedGroupHelper().enter(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24316:1: ( ( rule__OperationCS__UnorderedGroup_0__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24317:2: ( rule__OperationCS__UnorderedGroup_0__0 )?
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24317:2: ( rule__OperationCS__UnorderedGroup_0__0 )?
+            int alt267=2;
+            int LA267_0 = input.LA(1);
+
+            if ( LA267_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0) ) {
+                alt267=1;
+            }
+            else if ( LA267_0 ==24 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1) ) {
+                alt267=1;
+            }
+            switch (alt267) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__OperationCS__UnorderedGroup_0__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_0__0_in_rule__OperationCS__UnorderedGroup_049921);
+                    rule__OperationCS__UnorderedGroup_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	getUnorderedGroupHelper().leave(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__UnorderedGroup_0"
+
+
+    // $ANTLR start "rule__OperationCS__UnorderedGroup_0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24327:1: rule__OperationCS__UnorderedGroup_0__Impl : ( ({...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) ) ) ) ) ;
+    public final void rule__OperationCS__UnorderedGroup_0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        		boolean selected = false;
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24332:1: ( ( ({...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24333:3: ( ({...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) ) ) ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24333:3: ( ({...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) ) ) ) )
+            int alt268=2;
+            int LA268_0 = input.LA(1);
+
+            if ( LA268_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0) ) {
+                alt268=1;
+            }
+            else if ( LA268_0 ==24 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1) ) {
+                alt268=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 268, 0, input);
+
+                throw nvae;
+            }
+            switch (alt268) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24335:4: ({...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24335:4: ({...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24336:5: {...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__OperationCS__UnorderedGroup_0__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24336:108: ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24337:6: ( ( rule__OperationCS__IsStaticAssignment_0_0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24343:6: ( ( rule__OperationCS__IsStaticAssignment_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24345:7: ( rule__OperationCS__IsStaticAssignment_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getOperationCSAccess().getIsStaticAssignment_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24346:7: ( rule__OperationCS__IsStaticAssignment_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24346:8: rule__OperationCS__IsStaticAssignment_0_0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__OperationCS__IsStaticAssignment_0_0_in_rule__OperationCS__UnorderedGroup_0__Impl50008);
+                    rule__OperationCS__IsStaticAssignment_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getOperationCSAccess().getIsStaticAssignment_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24352:4: ({...}? => ( ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24352:4: ({...}? => ( ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24353:5: {...}? => ( ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__OperationCS__UnorderedGroup_0__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24353:108: ( ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24354:6: ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24360:6: ( ( rule__OperationCS__IsDefinitionAssignment_0_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24362:7: ( rule__OperationCS__IsDefinitionAssignment_0_1 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getOperationCSAccess().getIsDefinitionAssignment_0_1()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24363:7: ( rule__OperationCS__IsDefinitionAssignment_0_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24363:8: rule__OperationCS__IsDefinitionAssignment_0_1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__OperationCS__IsDefinitionAssignment_0_1_in_rule__OperationCS__UnorderedGroup_0__Impl50099);
+                    rule__OperationCS__IsDefinitionAssignment_0_1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getOperationCSAccess().getIsDefinitionAssignment_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	if (selected)
+            		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__UnorderedGroup_0__Impl"
+
+
+    // $ANTLR start "rule__OperationCS__UnorderedGroup_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24378:1: rule__OperationCS__UnorderedGroup_0__0 : rule__OperationCS__UnorderedGroup_0__Impl ( rule__OperationCS__UnorderedGroup_0__1 )? ;
+    public final void rule__OperationCS__UnorderedGroup_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24382:1: ( rule__OperationCS__UnorderedGroup_0__Impl ( rule__OperationCS__UnorderedGroup_0__1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24383:2: rule__OperationCS__UnorderedGroup_0__Impl ( rule__OperationCS__UnorderedGroup_0__1 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_0__Impl_in_rule__OperationCS__UnorderedGroup_0__050158);
+            rule__OperationCS__UnorderedGroup_0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24384:2: ( rule__OperationCS__UnorderedGroup_0__1 )?
+            int alt269=2;
+            int LA269_0 = input.LA(1);
+
+            if ( LA269_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0) ) {
+                alt269=1;
+            }
+            else if ( LA269_0 ==24 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1) ) {
+                alt269=1;
+            }
+            switch (alt269) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__OperationCS__UnorderedGroup_0__1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_0__1_in_rule__OperationCS__UnorderedGroup_0__050161);
+                    rule__OperationCS__UnorderedGroup_0__1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__UnorderedGroup_0__0"
+
+
+    // $ANTLR start "rule__OperationCS__UnorderedGroup_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24391:1: rule__OperationCS__UnorderedGroup_0__1 : rule__OperationCS__UnorderedGroup_0__Impl ;
+    public final void rule__OperationCS__UnorderedGroup_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24395:1: ( rule__OperationCS__UnorderedGroup_0__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24396:2: rule__OperationCS__UnorderedGroup_0__Impl
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_0__Impl_in_rule__OperationCS__UnorderedGroup_0__150186);
+            rule__OperationCS__UnorderedGroup_0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__UnorderedGroup_0__1"
+
+
+    // $ANTLR start "rule__OperationCS__UnorderedGroup_9"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24407:1: rule__OperationCS__UnorderedGroup_9 : rule__OperationCS__UnorderedGroup_9__0 {...}?;
+    public final void rule__OperationCS__UnorderedGroup_9() throws RecognitionException {
+
+            	int stackSize = keepStackSize();
+        		getUnorderedGroupHelper().enter(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24412:1: ( rule__OperationCS__UnorderedGroup_9__0 {...}?)
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24413:2: rule__OperationCS__UnorderedGroup_9__0 {...}?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_9__0_in_rule__OperationCS__UnorderedGroup_950214);
+            rule__OperationCS__UnorderedGroup_9__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9()) ) {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                throw new FailedPredicateException(input, "rule__OperationCS__UnorderedGroup_9", "getUnorderedGroupHelper().canLeave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9())");
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	getUnorderedGroupHelper().leave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__UnorderedGroup_9"
+
+
+    // $ANTLR start "rule__OperationCS__UnorderedGroup_9__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24424:1: rule__OperationCS__UnorderedGroup_9__Impl : ( ({...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__Group_9_2__0 ) ) ) ) ) ;
+    public final void rule__OperationCS__UnorderedGroup_9__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        		boolean selected = false;
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24429:1: ( ( ({...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__Group_9_2__0 ) ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24430:3: ( ({...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__Group_9_2__0 ) ) ) ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24430:3: ( ({...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) ) ) | ({...}? => ( ( ( rule__OperationCS__Group_9_2__0 ) ) ) ) )
+            int alt270=3;
+            int LA270_0 = input.LA(1);
+
+            if ( LA270_0 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {
+                alt270=1;
+            }
+            else if ( LA270_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                alt270=2;
+            }
+            else if ( LA270_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                alt270=2;
+            }
+            else if ( (LA270_0==50||LA270_0==109||LA270_0==129) && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                alt270=3;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 270, 0, input);
+
+                throw nvae;
+            }
+            switch (alt270) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24432:4: ({...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24432:4: ({...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24433:5: {...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__OperationCS__UnorderedGroup_9__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24433:108: ( ( ( rule__OperationCS__Group_9_0__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24434:6: ( ( rule__OperationCS__Group_9_0__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24440:6: ( ( rule__OperationCS__Group_9_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24442:7: ( rule__OperationCS__Group_9_0__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getOperationCSAccess().getGroup_9_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24443:7: ( rule__OperationCS__Group_9_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24443:8: rule__OperationCS__Group_9_0__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__OperationCS__Group_9_0__0_in_rule__OperationCS__UnorderedGroup_9__Impl50303);
+                    rule__OperationCS__Group_9_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getOperationCSAccess().getGroup_9_0()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24449:4: ({...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24449:4: ({...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24450:5: {...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__OperationCS__UnorderedGroup_9__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24450:108: ( ( ( rule__OperationCS__Group_9_1__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24451:6: ( ( rule__OperationCS__Group_9_1__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24457:6: ( ( rule__OperationCS__Group_9_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24459:7: ( rule__OperationCS__Group_9_1__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getOperationCSAccess().getGroup_9_1()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24460:7: ( rule__OperationCS__Group_9_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24460:8: rule__OperationCS__Group_9_1__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__OperationCS__Group_9_1__0_in_rule__OperationCS__UnorderedGroup_9__Impl50394);
+                    rule__OperationCS__Group_9_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getOperationCSAccess().getGroup_9_1()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24466:4: ({...}? => ( ( ( rule__OperationCS__Group_9_2__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24466:4: ({...}? => ( ( ( rule__OperationCS__Group_9_2__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24467:5: {...}? => ( ( ( rule__OperationCS__Group_9_2__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__OperationCS__UnorderedGroup_9__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24467:108: ( ( ( rule__OperationCS__Group_9_2__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24468:6: ( ( rule__OperationCS__Group_9_2__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24474:6: ( ( rule__OperationCS__Group_9_2__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24476:7: ( rule__OperationCS__Group_9_2__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getOperationCSAccess().getGroup_9_2()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24477:7: ( rule__OperationCS__Group_9_2__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24477:8: rule__OperationCS__Group_9_2__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__OperationCS__Group_9_2__0_in_rule__OperationCS__UnorderedGroup_9__Impl50485);
+                    rule__OperationCS__Group_9_2__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getOperationCSAccess().getGroup_9_2()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	if (selected)
+            		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__UnorderedGroup_9__Impl"
+
+
+    // $ANTLR start "rule__OperationCS__UnorderedGroup_9__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24492:1: rule__OperationCS__UnorderedGroup_9__0 : rule__OperationCS__UnorderedGroup_9__Impl ( rule__OperationCS__UnorderedGroup_9__1 )? ;
+    public final void rule__OperationCS__UnorderedGroup_9__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24496:1: ( rule__OperationCS__UnorderedGroup_9__Impl ( rule__OperationCS__UnorderedGroup_9__1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24497:2: rule__OperationCS__UnorderedGroup_9__Impl ( rule__OperationCS__UnorderedGroup_9__1 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_9__Impl_in_rule__OperationCS__UnorderedGroup_9__050544);
+            rule__OperationCS__UnorderedGroup_9__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24498:2: ( rule__OperationCS__UnorderedGroup_9__1 )?
+            int alt271=2;
+            alt271 = dfa271.predict(input);
+            switch (alt271) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__OperationCS__UnorderedGroup_9__1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_9__1_in_rule__OperationCS__UnorderedGroup_9__050547);
+                    rule__OperationCS__UnorderedGroup_9__1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__UnorderedGroup_9__0"
+
+
+    // $ANTLR start "rule__OperationCS__UnorderedGroup_9__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24505:1: rule__OperationCS__UnorderedGroup_9__1 : rule__OperationCS__UnorderedGroup_9__Impl ( rule__OperationCS__UnorderedGroup_9__2 )? ;
+    public final void rule__OperationCS__UnorderedGroup_9__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24509:1: ( rule__OperationCS__UnorderedGroup_9__Impl ( rule__OperationCS__UnorderedGroup_9__2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24510:2: rule__OperationCS__UnorderedGroup_9__Impl ( rule__OperationCS__UnorderedGroup_9__2 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_9__Impl_in_rule__OperationCS__UnorderedGroup_9__150572);
+            rule__OperationCS__UnorderedGroup_9__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24511:2: ( rule__OperationCS__UnorderedGroup_9__2 )?
+            int alt272=2;
+            alt272 = dfa272.predict(input);
+            switch (alt272) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__OperationCS__UnorderedGroup_9__2
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_9__2_in_rule__OperationCS__UnorderedGroup_9__150575);
+                    rule__OperationCS__UnorderedGroup_9__2();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__UnorderedGroup_9__1"
+
+
+    // $ANTLR start "rule__OperationCS__UnorderedGroup_9__2"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24518:1: rule__OperationCS__UnorderedGroup_9__2 : rule__OperationCS__UnorderedGroup_9__Impl ;
+    public final void rule__OperationCS__UnorderedGroup_9__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24522:1: ( rule__OperationCS__UnorderedGroup_9__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24523:2: rule__OperationCS__UnorderedGroup_9__Impl
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_9__Impl_in_rule__OperationCS__UnorderedGroup_9__250600);
+            rule__OperationCS__UnorderedGroup_9__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OperationCS__UnorderedGroup_9__2"
+
+
+    // $ANTLR start "rule__ParameterCS__UnorderedGroup_2"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24536:1: rule__ParameterCS__UnorderedGroup_2 : rule__ParameterCS__UnorderedGroup_2__0 {...}?;
+    public final void rule__ParameterCS__UnorderedGroup_2() throws RecognitionException {
+
+            	int stackSize = keepStackSize();
+        		getUnorderedGroupHelper().enter(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24541:1: ( rule__ParameterCS__UnorderedGroup_2__0 {...}?)
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24542:2: rule__ParameterCS__UnorderedGroup_2__0 {...}?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ParameterCS__UnorderedGroup_2__0_in_rule__ParameterCS__UnorderedGroup_250630);
+            rule__ParameterCS__UnorderedGroup_2__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2()) ) {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                throw new FailedPredicateException(input, "rule__ParameterCS__UnorderedGroup_2", "getUnorderedGroupHelper().canLeave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2())");
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	getUnorderedGroupHelper().leave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__UnorderedGroup_2"
+
+
+    // $ANTLR start "rule__ParameterCS__UnorderedGroup_2__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24553:1: rule__ParameterCS__UnorderedGroup_2__Impl : ( ({...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) ) ) | ({...}? => ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ) ) ) ;
+    public final void rule__ParameterCS__UnorderedGroup_2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        		boolean selected = false;
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24558:1: ( ( ({...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) ) ) | ({...}? => ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24559:3: ( ({...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) ) ) | ({...}? => ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ) ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24559:3: ( ({...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) ) ) | ({...}? => ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ) ) )
+            int alt273=2;
+            int LA273_0 = input.LA(1);
+
+            if ( LA273_0 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {
+                alt273=1;
+            }
+            else if ( (LA273_0==50||LA273_0==109||LA273_0==129) && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {
+                alt273=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 273, 0, input);
+
+                throw nvae;
+            }
+            switch (alt273) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24561:4: ({...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24561:4: ({...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24562:5: {...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ParameterCS__UnorderedGroup_2__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24562:108: ( ( ( rule__ParameterCS__Group_2_0__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24563:6: ( ( rule__ParameterCS__Group_2_0__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24569:6: ( ( rule__ParameterCS__Group_2_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24571:7: ( rule__ParameterCS__Group_2_0__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getParameterCSAccess().getGroup_2_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24572:7: ( rule__ParameterCS__Group_2_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24572:8: rule__ParameterCS__Group_2_0__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ParameterCS__Group_2_0__0_in_rule__ParameterCS__UnorderedGroup_2__Impl50719);
+                    rule__ParameterCS__Group_2_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getParameterCSAccess().getGroup_2_0()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24578:4: ({...}? => ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24578:4: ({...}? => ( ( ( rule__ParameterCS__Group_2_1__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24579:5: {...}? => ( ( ( rule__ParameterCS__Group_2_1__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ParameterCS__UnorderedGroup_2__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24579:108: ( ( ( rule__ParameterCS__Group_2_1__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24580:6: ( ( rule__ParameterCS__Group_2_1__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24586:6: ( ( rule__ParameterCS__Group_2_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24588:7: ( rule__ParameterCS__Group_2_1__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getParameterCSAccess().getGroup_2_1()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24589:7: ( rule__ParameterCS__Group_2_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24589:8: rule__ParameterCS__Group_2_1__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ParameterCS__Group_2_1__0_in_rule__ParameterCS__UnorderedGroup_2__Impl50810);
+                    rule__ParameterCS__Group_2_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getParameterCSAccess().getGroup_2_1()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	if (selected)
+            		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__UnorderedGroup_2__Impl"
+
+
+    // $ANTLR start "rule__ParameterCS__UnorderedGroup_2__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24604:1: rule__ParameterCS__UnorderedGroup_2__0 : rule__ParameterCS__UnorderedGroup_2__Impl ( rule__ParameterCS__UnorderedGroup_2__1 )? ;
+    public final void rule__ParameterCS__UnorderedGroup_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24608:1: ( rule__ParameterCS__UnorderedGroup_2__Impl ( rule__ParameterCS__UnorderedGroup_2__1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24609:2: rule__ParameterCS__UnorderedGroup_2__Impl ( rule__ParameterCS__UnorderedGroup_2__1 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ParameterCS__UnorderedGroup_2__Impl_in_rule__ParameterCS__UnorderedGroup_2__050869);
+            rule__ParameterCS__UnorderedGroup_2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24610:2: ( rule__ParameterCS__UnorderedGroup_2__1 )?
+            int alt274=2;
+            alt274 = dfa274.predict(input);
+            switch (alt274) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ParameterCS__UnorderedGroup_2__1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ParameterCS__UnorderedGroup_2__1_in_rule__ParameterCS__UnorderedGroup_2__050872);
+                    rule__ParameterCS__UnorderedGroup_2__1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__UnorderedGroup_2__0"
+
+
+    // $ANTLR start "rule__ParameterCS__UnorderedGroup_2__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24617:1: rule__ParameterCS__UnorderedGroup_2__1 : rule__ParameterCS__UnorderedGroup_2__Impl ;
+    public final void rule__ParameterCS__UnorderedGroup_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24621:1: ( rule__ParameterCS__UnorderedGroup_2__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24622:2: rule__ParameterCS__UnorderedGroup_2__Impl
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ParameterCS__UnorderedGroup_2__Impl_in_rule__ParameterCS__UnorderedGroup_2__150897);
+            rule__ParameterCS__UnorderedGroup_2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ParameterCS__UnorderedGroup_2__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24633:1: rule__ReferenceCS__UnorderedGroup_0 : ( rule__ReferenceCS__UnorderedGroup_0__0 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_0() throws RecognitionException {
+
+            	int stackSize = keepStackSize();
+        		getUnorderedGroupHelper().enter(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24638:1: ( ( rule__ReferenceCS__UnorderedGroup_0__0 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24639:2: ( rule__ReferenceCS__UnorderedGroup_0__0 )?
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24639:2: ( rule__ReferenceCS__UnorderedGroup_0__0 )?
+            int alt275=2;
+            int LA275_0 = input.LA(1);
+
+            if ( LA275_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0) ) {
+                alt275=1;
+            }
+            else if ( LA275_0 ==24 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1) ) {
+                alt275=1;
+            }
+            switch (alt275) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_0__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_0__0_in_rule__ReferenceCS__UnorderedGroup_050925);
+                    rule__ReferenceCS__UnorderedGroup_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	getUnorderedGroupHelper().leave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_0"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_0__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24649:1: rule__ReferenceCS__UnorderedGroup_0__Impl : ( ({...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) ) ) ) ) ;
+    public final void rule__ReferenceCS__UnorderedGroup_0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        		boolean selected = false;
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24654:1: ( ( ({...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24655:3: ( ({...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) ) ) ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24655:3: ( ({...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) ) ) ) )
+            int alt276=2;
+            int LA276_0 = input.LA(1);
+
+            if ( LA276_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0) ) {
+                alt276=1;
+            }
+            else if ( LA276_0 ==24 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1) ) {
+                alt276=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 276, 0, input);
+
+                throw nvae;
+            }
+            switch (alt276) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24657:4: ({...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24657:4: ({...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24658:5: {...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_0__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24658:108: ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24659:6: ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24665:6: ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24667:7: ( rule__ReferenceCS__IsStaticAssignment_0_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsStaticAssignment_0_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24668:7: ( rule__ReferenceCS__IsStaticAssignment_0_0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24668:8: rule__ReferenceCS__IsStaticAssignment_0_0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__IsStaticAssignment_0_0_in_rule__ReferenceCS__UnorderedGroup_0__Impl51012);
+                    rule__ReferenceCS__IsStaticAssignment_0_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsStaticAssignment_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24674:4: ({...}? => ( ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24674:4: ({...}? => ( ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24675:5: {...}? => ( ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_0__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24675:108: ( ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24676:6: ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24682:6: ( ( rule__ReferenceCS__IsDefinitionAssignment_0_1 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24684:7: ( rule__ReferenceCS__IsDefinitionAssignment_0_1 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getIsDefinitionAssignment_0_1()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24685:7: ( rule__ReferenceCS__IsDefinitionAssignment_0_1 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24685:8: rule__ReferenceCS__IsDefinitionAssignment_0_1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__IsDefinitionAssignment_0_1_in_rule__ReferenceCS__UnorderedGroup_0__Impl51103);
+                    rule__ReferenceCS__IsDefinitionAssignment_0_1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getIsDefinitionAssignment_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	if (selected)
+            		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_0__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_0__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24700:1: rule__ReferenceCS__UnorderedGroup_0__0 : rule__ReferenceCS__UnorderedGroup_0__Impl ( rule__ReferenceCS__UnorderedGroup_0__1 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24704:1: ( rule__ReferenceCS__UnorderedGroup_0__Impl ( rule__ReferenceCS__UnorderedGroup_0__1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24705:2: rule__ReferenceCS__UnorderedGroup_0__Impl ( rule__ReferenceCS__UnorderedGroup_0__1 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_0__Impl_in_rule__ReferenceCS__UnorderedGroup_0__051162);
+            rule__ReferenceCS__UnorderedGroup_0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24706:2: ( rule__ReferenceCS__UnorderedGroup_0__1 )?
+            int alt277=2;
+            int LA277_0 = input.LA(1);
+
+            if ( LA277_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0) ) {
+                alt277=1;
+            }
+            else if ( LA277_0 ==24 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1) ) {
+                alt277=1;
+            }
+            switch (alt277) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_0__1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_0__1_in_rule__ReferenceCS__UnorderedGroup_0__051165);
+                    rule__ReferenceCS__UnorderedGroup_0__1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_0__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_0__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24713:1: rule__ReferenceCS__UnorderedGroup_0__1 : rule__ReferenceCS__UnorderedGroup_0__Impl ;
+    public final void rule__ReferenceCS__UnorderedGroup_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24717:1: ( rule__ReferenceCS__UnorderedGroup_0__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24718:2: rule__ReferenceCS__UnorderedGroup_0__Impl
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_0__Impl_in_rule__ReferenceCS__UnorderedGroup_0__151190);
+            rule__ReferenceCS__UnorderedGroup_0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_0__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24729:1: rule__ReferenceCS__UnorderedGroup_6 : rule__ReferenceCS__UnorderedGroup_6__0 {...}?;
+    public final void rule__ReferenceCS__UnorderedGroup_6() throws RecognitionException {
+
+            	int stackSize = keepStackSize();
+        		getUnorderedGroupHelper().enter(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24734:1: ( rule__ReferenceCS__UnorderedGroup_6__0 {...}?)
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24735:2: rule__ReferenceCS__UnorderedGroup_6__0 {...}?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__0_in_rule__ReferenceCS__UnorderedGroup_651218);
+            rule__ReferenceCS__UnorderedGroup_6__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6", "getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6())");
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	getUnorderedGroupHelper().leave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__Impl"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24746:1: rule__ReferenceCS__UnorderedGroup_6__Impl : ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_8__0 ) ) ) ) ) ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        		boolean selected = false;
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24751:1: ( ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_8__0 ) ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24752:3: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_8__0 ) ) ) ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24752:3: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_8__0 ) ) ) ) )
+            int alt278=9;
+            alt278 = dfa278.predict(input);
+            switch (alt278) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24754:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24754:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24755:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24755:108: ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24756:6: ( ( rule__ReferenceCS__Group_6_0__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24762:6: ( ( rule__ReferenceCS__Group_6_0__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24764:7: ( rule__ReferenceCS__Group_6_0__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getGroup_6_0()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24765:7: ( rule__ReferenceCS__Group_6_0__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24765:8: rule__ReferenceCS__Group_6_0__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_0__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51307);
+                    rule__ReferenceCS__Group_6_0__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getGroup_6_0()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24771:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24771:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24772:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24772:108: ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24773:6: ( ( rule__ReferenceCS__Group_6_1__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24779:6: ( ( rule__ReferenceCS__Group_6_1__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24781:7: ( rule__ReferenceCS__Group_6_1__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getGroup_6_1()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24782:7: ( rule__ReferenceCS__Group_6_1__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24782:8: rule__ReferenceCS__Group_6_1__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_1__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51398);
+                    rule__ReferenceCS__Group_6_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getGroup_6_1()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24788:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24788:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24789:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24789:108: ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24790:6: ( ( rule__ReferenceCS__Group_6_2__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24796:6: ( ( rule__ReferenceCS__Group_6_2__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24798:7: ( rule__ReferenceCS__Group_6_2__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getGroup_6_2()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24799:7: ( rule__ReferenceCS__Group_6_2__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24799:8: rule__ReferenceCS__Group_6_2__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_2__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51489);
+                    rule__ReferenceCS__Group_6_2__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getGroup_6_2()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24805:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24805:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24806:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24806:108: ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24807:6: ( ( rule__ReferenceCS__Group_6_3__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24813:6: ( ( rule__ReferenceCS__Group_6_3__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24815:7: ( rule__ReferenceCS__Group_6_3__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getGroup_6_3()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24816:7: ( rule__ReferenceCS__Group_6_3__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24816:8: rule__ReferenceCS__Group_6_3__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_3__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51580);
+                    rule__ReferenceCS__Group_6_3__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getGroup_6_3()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24822:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24822:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24823:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24823:108: ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24824:6: ( ( rule__ReferenceCS__Group_6_4__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24830:6: ( ( rule__ReferenceCS__Group_6_4__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24832:7: ( rule__ReferenceCS__Group_6_4__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getGroup_6_4()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24833:7: ( rule__ReferenceCS__Group_6_4__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24833:8: rule__ReferenceCS__Group_6_4__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_4__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51671);
+                    rule__ReferenceCS__Group_6_4__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getGroup_6_4()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24839:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24839:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24840:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24840:108: ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24841:6: ( ( rule__ReferenceCS__Group_6_5__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24847:6: ( ( rule__ReferenceCS__Group_6_5__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24849:7: ( rule__ReferenceCS__Group_6_5__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getGroup_6_5()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24850:7: ( rule__ReferenceCS__Group_6_5__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24850:8: rule__ReferenceCS__Group_6_5__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_5__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51762);
+                    rule__ReferenceCS__Group_6_5__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getGroup_6_5()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 7 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24856:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24856:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24857:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24857:108: ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24858:6: ( ( rule__ReferenceCS__Group_6_6__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24864:6: ( ( rule__ReferenceCS__Group_6_6__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24866:7: ( rule__ReferenceCS__Group_6_6__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getGroup_6_6()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24867:7: ( rule__ReferenceCS__Group_6_6__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24867:8: rule__ReferenceCS__Group_6_6__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_6__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51853);
+                    rule__ReferenceCS__Group_6_6__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getGroup_6_6()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 8 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24873:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24873:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24874:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24874:108: ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24875:6: ( ( rule__ReferenceCS__Group_6_7__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24881:6: ( ( rule__ReferenceCS__Group_6_7__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24883:7: ( rule__ReferenceCS__Group_6_7__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getGroup_6_7()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24884:7: ( rule__ReferenceCS__Group_6_7__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24884:8: rule__ReferenceCS__Group_6_7__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_7__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51944);
+                    rule__ReferenceCS__Group_6_7__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getGroup_6_7()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 9 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24890:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_8__0 ) ) ) )
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24890:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_8__0 ) ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24891:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_8__0 ) ) )
+                    {
+                    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {
+                        if (state.backtracking>0) {state.failed=true; return ;}
+                        throw new FailedPredicateException(input, "rule__ReferenceCS__UnorderedGroup_6__Impl", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8)");
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24891:108: ( ( ( rule__ReferenceCS__Group_6_8__0 ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24892:6: ( ( rule__ReferenceCS__Group_6_8__0 ) )
+                    {
+                    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8);
+                    selected = true;
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24898:6: ( ( rule__ReferenceCS__Group_6_8__0 ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24900:7: ( rule__ReferenceCS__Group_6_8__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getReferenceCSAccess().getGroup_6_8()); 
+                    }
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24901:7: ( rule__ReferenceCS__Group_6_8__0 )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24901:8: rule__ReferenceCS__Group_6_8__0
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_8__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl52035);
+                    rule__ReferenceCS__Group_6_8__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getReferenceCSAccess().getGroup_6_8()); 
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	if (selected)
+            		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__Impl"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24916:1: rule__ReferenceCS__UnorderedGroup_6__0 : rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__1 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24920:1: ( rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__1 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24921:2: rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__1 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__052094);
+            rule__ReferenceCS__UnorderedGroup_6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24922:2: ( rule__ReferenceCS__UnorderedGroup_6__1 )?
+            int alt279=2;
+            alt279 = dfa279.predict(input);
+            switch (alt279) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_6__1
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__1_in_rule__ReferenceCS__UnorderedGroup_6__052097);
+                    rule__ReferenceCS__UnorderedGroup_6__1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__0"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24929:1: rule__ReferenceCS__UnorderedGroup_6__1 : rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__2 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24933:1: ( rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__2 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24934:2: rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__2 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__152122);
+            rule__ReferenceCS__UnorderedGroup_6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24935:2: ( rule__ReferenceCS__UnorderedGroup_6__2 )?
+            int alt280=2;
+            alt280 = dfa280.predict(input);
+            switch (alt280) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_6__2
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__2_in_rule__ReferenceCS__UnorderedGroup_6__152125);
+                    rule__ReferenceCS__UnorderedGroup_6__2();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__1"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__2"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24942:1: rule__ReferenceCS__UnorderedGroup_6__2 : rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__3 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24946:1: ( rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__3 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24947:2: rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__3 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__252150);
+            rule__ReferenceCS__UnorderedGroup_6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24948:2: ( rule__ReferenceCS__UnorderedGroup_6__3 )?
+            int alt281=2;
+            alt281 = dfa281.predict(input);
+            switch (alt281) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_6__3
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__3_in_rule__ReferenceCS__UnorderedGroup_6__252153);
+                    rule__ReferenceCS__UnorderedGroup_6__3();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__2"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__3"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24955:1: rule__ReferenceCS__UnorderedGroup_6__3 : rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__4 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24959:1: ( rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__4 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24960:2: rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__4 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__352178);
+            rule__ReferenceCS__UnorderedGroup_6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24961:2: ( rule__ReferenceCS__UnorderedGroup_6__4 )?
+            int alt282=2;
+            alt282 = dfa282.predict(input);
+            switch (alt282) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_6__4
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__4_in_rule__ReferenceCS__UnorderedGroup_6__352181);
+                    rule__ReferenceCS__UnorderedGroup_6__4();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__3"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__4"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24968:1: rule__ReferenceCS__UnorderedGroup_6__4 : rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__5 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24972:1: ( rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__5 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24973:2: rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__5 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__452206);
+            rule__ReferenceCS__UnorderedGroup_6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24974:2: ( rule__ReferenceCS__UnorderedGroup_6__5 )?
+            int alt283=2;
+            alt283 = dfa283.predict(input);
+            switch (alt283) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_6__5
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__5_in_rule__ReferenceCS__UnorderedGroup_6__452209);
+                    rule__ReferenceCS__UnorderedGroup_6__5();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__4"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__5"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24981:1: rule__ReferenceCS__UnorderedGroup_6__5 : rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__6 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24985:1: ( rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__6 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24986:2: rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__6 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__552234);
+            rule__ReferenceCS__UnorderedGroup_6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24987:2: ( rule__ReferenceCS__UnorderedGroup_6__6 )?
+            int alt284=2;
+            alt284 = dfa284.predict(input);
+            switch (alt284) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_6__6
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__6_in_rule__ReferenceCS__UnorderedGroup_6__552237);
+                    rule__ReferenceCS__UnorderedGroup_6__6();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__5"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__6"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24994:1: rule__ReferenceCS__UnorderedGroup_6__6 : rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__7 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24998:1: ( rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__7 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24999:2: rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__7 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__652262);
+            rule__ReferenceCS__UnorderedGroup_6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25000:2: ( rule__ReferenceCS__UnorderedGroup_6__7 )?
+            int alt285=2;
+            alt285 = dfa285.predict(input);
+            switch (alt285) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_6__7
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__7_in_rule__ReferenceCS__UnorderedGroup_6__652265);
+                    rule__ReferenceCS__UnorderedGroup_6__7();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__6"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__7"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25007:1: rule__ReferenceCS__UnorderedGroup_6__7 : rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__8 )? ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25011:1: ( rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__8 )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25012:2: rule__ReferenceCS__UnorderedGroup_6__Impl ( rule__ReferenceCS__UnorderedGroup_6__8 )?
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__752290);
+            rule__ReferenceCS__UnorderedGroup_6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25013:2: ( rule__ReferenceCS__UnorderedGroup_6__8 )?
+            int alt286=2;
+            alt286 = dfa286.predict(input);
+            switch (alt286) {
+                case 1 :
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:0:0: rule__ReferenceCS__UnorderedGroup_6__8
+                    {
+                    pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__8_in_rule__ReferenceCS__UnorderedGroup_6__752293);
+                    rule__ReferenceCS__UnorderedGroup_6__8();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__7"
+
+
+    // $ANTLR start "rule__ReferenceCS__UnorderedGroup_6__8"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25020:1: rule__ReferenceCS__UnorderedGroup_6__8 : rule__ReferenceCS__UnorderedGroup_6__Impl ;
+    public final void rule__ReferenceCS__UnorderedGroup_6__8() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25024:1: ( rule__ReferenceCS__UnorderedGroup_6__Impl )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25025:2: rule__ReferenceCS__UnorderedGroup_6__Impl
+            {
+            pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__852318);
+            rule__ReferenceCS__UnorderedGroup_6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ReferenceCS__UnorderedGroup_6__8"
+
+
     // $ANTLR start "rule__TopLevelCS__OwnedLibrariesAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22908:1: rule__TopLevelCS__OwnedLibrariesAssignment_2 : ( ruleLibraryCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25050:1: rule__TopLevelCS__OwnedLibrariesAssignment_2 : ( ruleLibraryCS ) ;
     public final void rule__TopLevelCS__OwnedLibrariesAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22912:1: ( ( ruleLibraryCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22913:1: ( ruleLibraryCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25054:1: ( ( ruleLibraryCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25055:1: ( ruleLibraryCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22913:1: ( ruleLibraryCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22914:1: ruleLibraryCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25055:1: ( ruleLibraryCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25056:1: ruleLibraryCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getOwnedLibrariesLibraryCSParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleLibraryCS_in_rule__TopLevelCS__OwnedLibrariesAssignment_246741);
+            pushFollow(FollowSets002.FOLLOW_ruleLibraryCS_in_rule__TopLevelCS__OwnedLibrariesAssignment_252364);
             ruleLibraryCS();
 
             state._fsp--;
@@ -67748,22 +73518,22 @@
 
 
     // $ANTLR start "rule__TopLevelCS__OwnedImportsAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22923:1: rule__TopLevelCS__OwnedImportsAssignment_3 : ( ruleImportCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25065:1: rule__TopLevelCS__OwnedImportsAssignment_3 : ( ruleImportCS ) ;
     public final void rule__TopLevelCS__OwnedImportsAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22927:1: ( ( ruleImportCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22928:1: ( ruleImportCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25069:1: ( ( ruleImportCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25070:1: ( ruleImportCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22928:1: ( ruleImportCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22929:1: ruleImportCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25070:1: ( ruleImportCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25071:1: ruleImportCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getOwnedImportsImportCSParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleImportCS_in_rule__TopLevelCS__OwnedImportsAssignment_346772);
+            pushFollow(FollowSets002.FOLLOW_ruleImportCS_in_rule__TopLevelCS__OwnedImportsAssignment_352395);
             ruleImportCS();
 
             state._fsp--;
@@ -67793,22 +73563,22 @@
 
 
     // $ANTLR start "rule__TopLevelCS__OwnedPackagesAssignment_4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22938:1: rule__TopLevelCS__OwnedPackagesAssignment_4 : ( rulePackageCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25080:1: rule__TopLevelCS__OwnedPackagesAssignment_4 : ( rulePackageCS ) ;
     public final void rule__TopLevelCS__OwnedPackagesAssignment_4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22942:1: ( ( rulePackageCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22943:1: ( rulePackageCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25084:1: ( ( rulePackageCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25085:1: ( rulePackageCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22943:1: ( rulePackageCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22944:1: rulePackageCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25085:1: ( rulePackageCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25086:1: rulePackageCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTopLevelCSAccess().getOwnedPackagesPackageCSParserRuleCall_4_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePackageCS_in_rule__TopLevelCS__OwnedPackagesAssignment_446803);
+            pushFollow(FollowSets002.FOLLOW_rulePackageCS_in_rule__TopLevelCS__OwnedPackagesAssignment_452426);
             rulePackageCS();
 
             state._fsp--;
@@ -67838,28 +73608,28 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__IsCallableAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22953:1: rule__InvariantConstraintCS__IsCallableAssignment_0 : ( ( 'callable' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25095:1: rule__InvariantConstraintCS__IsCallableAssignment_0 : ( ( 'callable' ) ) ;
     public final void rule__InvariantConstraintCS__IsCallableAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22957:1: ( ( ( 'callable' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22958:1: ( ( 'callable' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25099:1: ( ( ( 'callable' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25100:1: ( ( 'callable' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22958:1: ( ( 'callable' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22959:1: ( 'callable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25100:1: ( ( 'callable' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25101:1: ( 'callable' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getIsCallableCallableKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22960:1: ( 'callable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22961:1: 'callable'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25102:1: ( 'callable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25103:1: 'callable'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getIsCallableCallableKeyword_0_0()); 
             }
-            match(input,20,FollowSets002.FOLLOW_20_in_rule__InvariantConstraintCS__IsCallableAssignment_046839); if (state.failed) return ;
+            match(input,20,FollowSets002.FOLLOW_20_in_rule__InvariantConstraintCS__IsCallableAssignment_052462); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvariantConstraintCSAccess().getIsCallableCallableKeyword_0_0()); 
             }
@@ -67891,28 +73661,28 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__StereotypeAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22976:1: rule__InvariantConstraintCS__StereotypeAssignment_1 : ( ( 'invariant' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25118:1: rule__InvariantConstraintCS__StereotypeAssignment_1 : ( ( 'invariant' ) ) ;
     public final void rule__InvariantConstraintCS__StereotypeAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22980:1: ( ( ( 'invariant' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22981:1: ( ( 'invariant' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25122:1: ( ( ( 'invariant' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25123:1: ( ( 'invariant' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22981:1: ( ( 'invariant' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22982:1: ( 'invariant' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25123:1: ( ( 'invariant' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25124:1: ( 'invariant' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getStereotypeInvariantKeyword_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22983:1: ( 'invariant' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22984:1: 'invariant'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25125:1: ( 'invariant' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25126:1: 'invariant'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getStereotypeInvariantKeyword_1_0()); 
             }
-            match(input,57,FollowSets002.FOLLOW_57_in_rule__InvariantConstraintCS__StereotypeAssignment_146883); if (state.failed) return ;
+            match(input,66,FollowSets002.FOLLOW_66_in_rule__InvariantConstraintCS__StereotypeAssignment_152506); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvariantConstraintCSAccess().getStereotypeInvariantKeyword_1_0()); 
             }
@@ -67944,22 +73714,22 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__NameAssignment_2_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:22999:1: rule__InvariantConstraintCS__NameAssignment_2_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25141:1: rule__InvariantConstraintCS__NameAssignment_2_0 : ( ruleUnrestrictedName ) ;
     public final void rule__InvariantConstraintCS__NameAssignment_2_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23003:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23004:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25145:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25146:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23004:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23005:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25146:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25147:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getNameUnrestrictedNameParserRuleCall_2_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__InvariantConstraintCS__NameAssignment_2_046922);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__InvariantConstraintCS__NameAssignment_2_052545);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -67989,22 +73759,22 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23014:1: rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25156:1: rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1 : ( ruleSpecificationCS ) ;
     public final void rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23018:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23019:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25160:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25161:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23019:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23020:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25161:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25162:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getOwnedMessageSpecificationSpecificationCSParserRuleCall_2_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_146953);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_152576);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -68034,22 +73804,22 @@
 
 
     // $ANTLR start "rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23029:1: rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25171:1: rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1 : ( ruleSpecificationCS ) ;
     public final void rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23033:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23034:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25175:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25176:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23034:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23035:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25176:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25177:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantConstraintCSAccess().getOwnedSpecificationSpecificationCSParserRuleCall_3_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_146984);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_152607);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -68079,28 +73849,28 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__StereotypeAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23044:1: rule__PostconditionConstraintCS__StereotypeAssignment_0 : ( ( 'postcondition' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25186:1: rule__PostconditionConstraintCS__StereotypeAssignment_0 : ( ( 'postcondition' ) ) ;
     public final void rule__PostconditionConstraintCS__StereotypeAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23048:1: ( ( ( 'postcondition' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23049:1: ( ( 'postcondition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25190:1: ( ( ( 'postcondition' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25191:1: ( ( 'postcondition' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23049:1: ( ( 'postcondition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23050:1: ( 'postcondition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25191:1: ( ( 'postcondition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25192:1: ( 'postcondition' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getStereotypePostconditionKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23051:1: ( 'postcondition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23052:1: 'postcondition'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25193:1: ( 'postcondition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25194:1: 'postcondition'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getStereotypePostconditionKeyword_0_0()); 
             }
-            match(input,39,FollowSets002.FOLLOW_39_in_rule__PostconditionConstraintCS__StereotypeAssignment_047020); if (state.failed) return ;
+            match(input,39,FollowSets002.FOLLOW_39_in_rule__PostconditionConstraintCS__StereotypeAssignment_052643); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPostconditionConstraintCSAccess().getStereotypePostconditionKeyword_0_0()); 
             }
@@ -68132,22 +73902,22 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__NameAssignment_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23067:1: rule__PostconditionConstraintCS__NameAssignment_1_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25209:1: rule__PostconditionConstraintCS__NameAssignment_1_0 : ( ruleUnrestrictedName ) ;
     public final void rule__PostconditionConstraintCS__NameAssignment_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23071:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23072:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25213:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25214:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23072:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23073:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25214:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25215:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getNameUnrestrictedNameParserRuleCall_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PostconditionConstraintCS__NameAssignment_1_047059);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PostconditionConstraintCS__NameAssignment_1_052682);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -68177,22 +73947,22 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23082:1: rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25224:1: rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 : ( ruleSpecificationCS ) ;
     public final void rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23086:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23087:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25228:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25229:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23087:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23088:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25229:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25230:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getOwnedMessageSpecificationSpecificationCSParserRuleCall_1_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_147090);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_152713);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -68222,22 +73992,22 @@
 
 
     // $ANTLR start "rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23097:1: rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25239:1: rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3 : ( ruleSpecificationCS ) ;
     public final void rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23101:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23102:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25243:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25244:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23102:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23103:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25244:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25245:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPostconditionConstraintCSAccess().getOwnedSpecificationSpecificationCSParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__PostconditionConstraintCS__OwnedSpecificationAssignment_347121);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__PostconditionConstraintCS__OwnedSpecificationAssignment_352744);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -68267,28 +74037,28 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__StereotypeAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23112:1: rule__PreconditionConstraintCS__StereotypeAssignment_0 : ( ( 'precondition' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25254:1: rule__PreconditionConstraintCS__StereotypeAssignment_0 : ( ( 'precondition' ) ) ;
     public final void rule__PreconditionConstraintCS__StereotypeAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23116:1: ( ( ( 'precondition' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23117:1: ( ( 'precondition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25258:1: ( ( ( 'precondition' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25259:1: ( ( 'precondition' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23117:1: ( ( 'precondition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23118:1: ( 'precondition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25259:1: ( ( 'precondition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25260:1: ( 'precondition' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getStereotypePreconditionKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23119:1: ( 'precondition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23120:1: 'precondition'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25261:1: ( 'precondition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25262:1: 'precondition'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getStereotypePreconditionKeyword_0_0()); 
             }
-            match(input,40,FollowSets002.FOLLOW_40_in_rule__PreconditionConstraintCS__StereotypeAssignment_047157); if (state.failed) return ;
+            match(input,40,FollowSets002.FOLLOW_40_in_rule__PreconditionConstraintCS__StereotypeAssignment_052780); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPreconditionConstraintCSAccess().getStereotypePreconditionKeyword_0_0()); 
             }
@@ -68320,22 +74090,22 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__NameAssignment_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23135:1: rule__PreconditionConstraintCS__NameAssignment_1_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25277:1: rule__PreconditionConstraintCS__NameAssignment_1_0 : ( ruleUnrestrictedName ) ;
     public final void rule__PreconditionConstraintCS__NameAssignment_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23139:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23140:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25281:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25282:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23140:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23141:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25282:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25283:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getNameUnrestrictedNameParserRuleCall_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PreconditionConstraintCS__NameAssignment_1_047196);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PreconditionConstraintCS__NameAssignment_1_052819);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -68365,22 +74135,22 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23150:1: rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25292:1: rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1 : ( ruleSpecificationCS ) ;
     public final void rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23154:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23155:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25296:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25297:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23155:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23156:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25297:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25298:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getOwnedMessageSpecificationSpecificationCSParserRuleCall_1_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_147227);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_152850);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -68410,22 +74180,22 @@
 
 
     // $ANTLR start "rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23165:1: rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25307:1: rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3 : ( ruleSpecificationCS ) ;
     public final void rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23169:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23170:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25311:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25312:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23170:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23171:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25312:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25313:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPreconditionConstraintCSAccess().getOwnedSpecificationSpecificationCSParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__PreconditionConstraintCS__OwnedSpecificationAssignment_347258);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__PreconditionConstraintCS__OwnedSpecificationAssignment_352881);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -68455,25 +74225,25 @@
 
 
     // $ANTLR start "rule__AnnotationCS__NameAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23180:1: rule__AnnotationCS__NameAssignment_2 : ( ( rule__AnnotationCS__NameAlternatives_2_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25322:1: rule__AnnotationCS__NameAssignment_2 : ( ( rule__AnnotationCS__NameAlternatives_2_0 ) ) ;
     public final void rule__AnnotationCS__NameAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23184:1: ( ( ( rule__AnnotationCS__NameAlternatives_2_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23185:1: ( ( rule__AnnotationCS__NameAlternatives_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25326:1: ( ( ( rule__AnnotationCS__NameAlternatives_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25327:1: ( ( rule__AnnotationCS__NameAlternatives_2_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23185:1: ( ( rule__AnnotationCS__NameAlternatives_2_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23186:1: ( rule__AnnotationCS__NameAlternatives_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25327:1: ( ( rule__AnnotationCS__NameAlternatives_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25328:1: ( rule__AnnotationCS__NameAlternatives_2_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getNameAlternatives_2_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23187:1: ( rule__AnnotationCS__NameAlternatives_2_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23187:2: rule__AnnotationCS__NameAlternatives_2_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25329:1: ( rule__AnnotationCS__NameAlternatives_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25329:2: rule__AnnotationCS__NameAlternatives_2_0
             {
-            pushFollow(FollowSets002.FOLLOW_rule__AnnotationCS__NameAlternatives_2_0_in_rule__AnnotationCS__NameAssignment_247289);
+            pushFollow(FollowSets002.FOLLOW_rule__AnnotationCS__NameAlternatives_2_0_in_rule__AnnotationCS__NameAssignment_252912);
             rule__AnnotationCS__NameAlternatives_2_0();
 
             state._fsp--;
@@ -68506,22 +74276,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__OwnedDetailsAssignment_3_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23196:1: rule__AnnotationCS__OwnedDetailsAssignment_3_1 : ( ruleDetailCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25338:1: rule__AnnotationCS__OwnedDetailsAssignment_3_1 : ( ruleDetailCS ) ;
     public final void rule__AnnotationCS__OwnedDetailsAssignment_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23200:1: ( ( ruleDetailCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23201:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25342:1: ( ( ruleDetailCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25343:1: ( ruleDetailCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23201:1: ( ruleDetailCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23202:1: ruleDetailCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25343:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25344:1: ruleDetailCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getOwnedDetailsDetailCSParserRuleCall_3_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__AnnotationCS__OwnedDetailsAssignment_3_147322);
+            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__AnnotationCS__OwnedDetailsAssignment_3_152945);
             ruleDetailCS();
 
             state._fsp--;
@@ -68551,22 +74321,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__OwnedDetailsAssignment_3_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23211:1: rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 : ( ruleDetailCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25353:1: rule__AnnotationCS__OwnedDetailsAssignment_3_2_1 : ( ruleDetailCS ) ;
     public final void rule__AnnotationCS__OwnedDetailsAssignment_3_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23215:1: ( ( ruleDetailCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23216:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25357:1: ( ( ruleDetailCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25358:1: ( ruleDetailCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23216:1: ( ruleDetailCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23217:1: ruleDetailCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25358:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25359:1: ruleDetailCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getOwnedDetailsDetailCSParserRuleCall_3_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__AnnotationCS__OwnedDetailsAssignment_3_2_147353);
+            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__AnnotationCS__OwnedDetailsAssignment_3_2_152976);
             ruleDetailCS();
 
             state._fsp--;
@@ -68596,22 +74366,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23226:1: rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_0 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25368:1: rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_0 : ( ruleAnnotationElementCS ) ;
     public final void rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23230:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23231:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25372:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25373:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23231:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23232:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25373:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25374:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_4_0_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_047384);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_053007);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -68641,22 +74411,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__OwnedContentsAssignment_4_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23241:1: rule__AnnotationCS__OwnedContentsAssignment_4_0_1_1 : ( ruleModelElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25383:1: rule__AnnotationCS__OwnedContentsAssignment_4_0_1_1 : ( ruleModelElementCS ) ;
     public final void rule__AnnotationCS__OwnedContentsAssignment_4_0_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23245:1: ( ( ruleModelElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23246:1: ( ruleModelElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25387:1: ( ( ruleModelElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25388:1: ( ruleModelElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23246:1: ( ruleModelElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23247:1: ruleModelElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25388:1: ( ruleModelElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25389:1: ruleModelElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getOwnedContentsModelElementCSParserRuleCall_4_0_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleModelElementCS_in_rule__AnnotationCS__OwnedContentsAssignment_4_0_1_147415);
+            pushFollow(FollowSets002.FOLLOW_ruleModelElementCS_in_rule__AnnotationCS__OwnedContentsAssignment_4_0_1_153038);
             ruleModelElementCS();
 
             state._fsp--;
@@ -68686,22 +74456,22 @@
 
 
     // $ANTLR start "rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23256:1: rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_2 : ( ruleModelElementRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25398:1: rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_2 : ( ruleModelElementRefCS ) ;
     public final void rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23260:1: ( ( ruleModelElementRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23261:1: ( ruleModelElementRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25402:1: ( ( ruleModelElementRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25403:1: ( ruleModelElementRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23261:1: ( ruleModelElementRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23262:1: ruleModelElementRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25403:1: ( ruleModelElementRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25404:1: ruleModelElementRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnnotationCSAccess().getOwnedReferencesModelElementRefCSParserRuleCall_4_0_1_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleModelElementRefCS_in_rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_247446);
+            pushFollow(FollowSets002.FOLLOW_ruleModelElementRefCS_in_rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_253069);
             ruleModelElementRefCS();
 
             state._fsp--;
@@ -68730,37 +74500,37 @@
     // $ANTLR end "rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_2"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_0_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23271:1: rule__AttributeCS__QualifiersAssignment_0_0_0 : ( ( 'static' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_0_0_0() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsStaticAssignment_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25413:1: rule__AttributeCS__IsStaticAssignment_0_0 : ( ( 'static' ) ) ;
+    public final void rule__AttributeCS__IsStaticAssignment_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23275:1: ( ( ( 'static' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23276:1: ( ( 'static' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25417:1: ( ( ( 'static' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25418:1: ( ( 'static' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23276:1: ( ( 'static' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23277:1: ( 'static' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25418:1: ( ( 'static' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25419:1: ( 'static' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23278:1: ( 'static' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23279:1: 'static'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25420:1: ( 'static' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25421:1: 'static'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
-            match(input,46,FollowSets002.FOLLOW_46_in_rule__AttributeCS__QualifiersAssignment_0_0_047482); if (state.failed) return ;
+            match(input,46,FollowSets002.FOLLOW_46_in_rule__AttributeCS__IsStaticAssignment_0_053105); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
 
             }
@@ -68780,40 +74550,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_0_0_0"
+    // $ANTLR end "rule__AttributeCS__IsStaticAssignment_0_0"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_0_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23294:1: rule__AttributeCS__QualifiersAssignment_0_0_1 : ( ( 'definition' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_0_0_1() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsDefinitionAssignment_0_1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25436:1: rule__AttributeCS__IsDefinitionAssignment_0_1 : ( ( 'definition' ) ) ;
+    public final void rule__AttributeCS__IsDefinitionAssignment_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23298:1: ( ( ( 'definition' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23299:1: ( ( 'definition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25440:1: ( ( ( 'definition' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25441:1: ( ( 'definition' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23299:1: ( ( 'definition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23300:1: ( 'definition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25441:1: ( ( 'definition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25442:1: ( 'definition' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23301:1: ( 'definition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23302:1: 'definition'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25443:1: ( 'definition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25444:1: 'definition'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
-            match(input,24,FollowSets002.FOLLOW_24_in_rule__AttributeCS__QualifiersAssignment_0_0_147526); if (state.failed) return ;
+            match(input,24,FollowSets002.FOLLOW_24_in_rule__AttributeCS__IsDefinitionAssignment_0_153149); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
 
             }
@@ -68833,132 +74603,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_0_0_1"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23317:1: rule__AttributeCS__QualifiersAssignment_0_1_0 : ( ( 'definition' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_0_1_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23321:1: ( ( ( 'definition' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23322:1: ( ( 'definition' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23322:1: ( ( 'definition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23323:1: ( 'definition' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23324:1: ( 'definition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23325:1: 'definition'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-            match(input,24,FollowSets002.FOLLOW_24_in_rule__AttributeCS__QualifiersAssignment_0_1_047570); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_0_1_0"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23340:1: rule__AttributeCS__QualifiersAssignment_0_1_1 : ( ( 'static' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_0_1_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23344:1: ( ( ( 'static' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23345:1: ( ( 'static' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23345:1: ( ( 'static' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23346:1: ( 'static' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23347:1: ( 'static' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23348:1: 'static'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-            match(input,46,FollowSets002.FOLLOW_46_in_rule__AttributeCS__QualifiersAssignment_0_1_147614); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_0_1_1"
+    // $ANTLR end "rule__AttributeCS__IsDefinitionAssignment_0_1"
 
 
     // $ANTLR start "rule__AttributeCS__NameAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23363:1: rule__AttributeCS__NameAssignment_2 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25459:1: rule__AttributeCS__NameAssignment_2 : ( ruleUnrestrictedName ) ;
     public final void rule__AttributeCS__NameAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23367:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23368:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25463:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25464:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23368:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23369:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25464:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25465:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__NameAssignment_247653);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__NameAssignment_253188);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -68988,22 +74652,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__OwnedTypeAssignment_3_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23378:1: rule__AttributeCS__OwnedTypeAssignment_3_1 : ( ruleTypedMultiplicityRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25474:1: rule__AttributeCS__OwnedTypeAssignment_3_1 : ( ruleTypedMultiplicityRefCS ) ;
     public final void rule__AttributeCS__OwnedTypeAssignment_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23382:1: ( ( ruleTypedMultiplicityRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23383:1: ( ruleTypedMultiplicityRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25478:1: ( ( ruleTypedMultiplicityRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25479:1: ( ruleTypedMultiplicityRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23383:1: ( ruleTypedMultiplicityRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23384:1: ruleTypedMultiplicityRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25479:1: ( ruleTypedMultiplicityRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25480:1: ruleTypedMultiplicityRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_3_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedMultiplicityRefCS_in_rule__AttributeCS__OwnedTypeAssignment_3_147684);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedMultiplicityRefCS_in_rule__AttributeCS__OwnedTypeAssignment_3_153219);
             ruleTypedMultiplicityRefCS();
 
             state._fsp--;
@@ -69033,22 +74697,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__DefaultAssignment_4_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23393:1: rule__AttributeCS__DefaultAssignment_4_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25489:1: rule__AttributeCS__DefaultAssignment_4_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
     public final void rule__AttributeCS__DefaultAssignment_4_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23397:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23398:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25493:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25494:1: ( RULE_SINGLE_QUOTED_STRING )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23398:1: ( RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23399:1: RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25494:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25495:1: RULE_SINGLE_QUOTED_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0()); 
             }
-            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__AttributeCS__DefaultAssignment_4_147715); if (state.failed) return ;
+            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__AttributeCS__DefaultAssignment_4_153250); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getAttributeCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0()); 
             }
@@ -69073,37 +74737,37 @@
     // $ANTLR end "rule__AttributeCS__DefaultAssignment_4_1"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23408:1: rule__AttributeCS__QualifiersAssignment_5_1_0_0 : ( ( 'derived' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_0() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25504:1: rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0 : ( ( 'derived' ) ) ;
+    public final void rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23412:1: ( ( ( 'derived' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23413:1: ( ( 'derived' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25508:1: ( ( ( 'derived' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25509:1: ( ( 'derived' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23413:1: ( ( 'derived' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23414:1: ( 'derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25509:1: ( ( 'derived' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25510:1: ( 'derived' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23415:1: ( 'derived' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23416:1: 'derived'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25511:1: ( 'derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25512:1: 'derived'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0()); 
             }
-            match(input,26,FollowSets002.FOLLOW_26_in_rule__AttributeCS__QualifiersAssignment_5_1_0_047751); if (state.failed) return ;
+            match(input,26,FollowSets002.FOLLOW_26_in_rule__AttributeCS__IsDerivedAssignment_5_0_1_0_053286); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0()); 
             }
 
             }
@@ -69123,40 +74787,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_0"
+    // $ANTLR end "rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23431:1: rule__AttributeCS__QualifiersAssignment_5_1_0_1 : ( ( '!derived' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_1() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsIdAssignment_5_1_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25527:1: rule__AttributeCS__IsIdAssignment_5_1_0_0 : ( ( 'id' ) ) ;
+    public final void rule__AttributeCS__IsIdAssignment_5_1_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23435:1: ( ( ( '!derived' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23436:1: ( ( '!derived' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25531:1: ( ( ( 'id' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25532:1: ( ( 'id' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23436:1: ( ( '!derived' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23437:1: ( '!derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25532:1: ( ( 'id' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25533:1: ( 'id' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23438:1: ( '!derived' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23439:1: '!derived'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25534:1: ( 'id' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25535:1: 'id'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0()); 
             }
-            match(input,120,FollowSets002.FOLLOW_120_in_rule__AttributeCS__QualifiersAssignment_5_1_0_147795); if (state.failed) return ;
+            match(input,29,FollowSets002.FOLLOW_29_in_rule__AttributeCS__IsIdAssignment_5_1_0_053330); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0()); 
             }
 
             }
@@ -69176,40 +74840,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_1"
+    // $ANTLR end "rule__AttributeCS__IsIdAssignment_5_1_0_0"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23454:1: rule__AttributeCS__QualifiersAssignment_5_1_0_2 : ( ( 'id' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_2() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsOrderedAssignment_5_2_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25550:1: rule__AttributeCS__IsOrderedAssignment_5_2_0_0 : ( ( 'ordered' ) ) ;
+    public final void rule__AttributeCS__IsOrderedAssignment_5_2_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23458:1: ( ( ( 'id' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23459:1: ( ( 'id' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25554:1: ( ( ( 'ordered' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25555:1: ( ( 'ordered' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23459:1: ( ( 'id' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23460:1: ( 'id' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25555:1: ( ( 'ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25556:1: ( 'ordered' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23461:1: ( 'id' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23462:1: 'id'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25557:1: ( 'ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25558:1: 'ordered'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0()); 
             }
-            match(input,29,FollowSets002.FOLLOW_29_in_rule__AttributeCS__QualifiersAssignment_5_1_0_247839); if (state.failed) return ;
+            match(input,37,FollowSets002.FOLLOW_37_in_rule__AttributeCS__IsOrderedAssignment_5_2_0_053374); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0()); 
             }
 
             }
@@ -69229,40 +74893,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_2"
+    // $ANTLR end "rule__AttributeCS__IsOrderedAssignment_5_2_0_0"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23477:1: rule__AttributeCS__QualifiersAssignment_5_1_0_3 : ( ( '!id' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_3() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsReadonlyAssignment_5_3_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25573:1: rule__AttributeCS__IsReadonlyAssignment_5_3_0_0 : ( ( 'readonly' ) ) ;
+    public final void rule__AttributeCS__IsReadonlyAssignment_5_3_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23481:1: ( ( ( '!id' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23482:1: ( ( '!id' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25577:1: ( ( ( 'readonly' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25578:1: ( ( 'readonly' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23482:1: ( ( '!id' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23483:1: ( '!id' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25578:1: ( ( 'readonly' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25579:1: ( 'readonly' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23484:1: ( '!id' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23485:1: '!id'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25580:1: ( 'readonly' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25581:1: 'readonly'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0()); 
             }
-            match(input,121,FollowSets002.FOLLOW_121_in_rule__AttributeCS__QualifiersAssignment_5_1_0_347883); if (state.failed) return ;
+            match(input,43,FollowSets002.FOLLOW_43_in_rule__AttributeCS__IsReadonlyAssignment_5_3_0_053418); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0()); 
             }
 
             }
@@ -69282,40 +74946,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_3"
+    // $ANTLR end "rule__AttributeCS__IsReadonlyAssignment_5_3_0_0"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23500:1: rule__AttributeCS__QualifiersAssignment_5_1_0_4 : ( ( 'ordered' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_4() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsTransientAssignment_5_4_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25596:1: rule__AttributeCS__IsTransientAssignment_5_4_0_0 : ( ( 'transient' ) ) ;
+    public final void rule__AttributeCS__IsTransientAssignment_5_4_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23504:1: ( ( ( 'ordered' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23505:1: ( ( 'ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25600:1: ( ( ( 'transient' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25601:1: ( ( 'transient' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23505:1: ( ( 'ordered' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23506:1: ( 'ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25601:1: ( ( 'transient' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25602:1: ( 'transient' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23507:1: ( 'ordered' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23508:1: 'ordered'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25603:1: ( 'transient' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25604:1: 'transient'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0()); 
             }
-            match(input,37,FollowSets002.FOLLOW_37_in_rule__AttributeCS__QualifiersAssignment_5_1_0_447927); if (state.failed) return ;
+            match(input,49,FollowSets002.FOLLOW_49_in_rule__AttributeCS__IsTransientAssignment_5_4_0_053462); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0()); 
             }
 
             }
@@ -69335,40 +74999,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_4"
+    // $ANTLR end "rule__AttributeCS__IsTransientAssignment_5_4_0_0"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23523:1: rule__AttributeCS__QualifiersAssignment_5_1_0_5 : ( ( '!ordered' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_5() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25619:1: rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0 : ( ( '!unique' ) ) ;
+    public final void rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23527:1: ( ( ( '!ordered' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23528:1: ( ( '!ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25623:1: ( ( ( '!unique' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25624:1: ( ( '!unique' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23528:1: ( ( '!ordered' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23529:1: ( '!ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25624:1: ( ( '!unique' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25625:1: ( '!unique' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23530:1: ( '!ordered' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23531:1: '!ordered'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25626:1: ( '!unique' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25627:1: '!unique'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0()); 
             }
-            match(input,122,FollowSets002.FOLLOW_122_in_rule__AttributeCS__QualifiersAssignment_5_1_0_547971); if (state.failed) return ;
+            match(input,129,FollowSets002.FOLLOW_129_in_rule__AttributeCS__IsNotUniqueAssignment_5_5_0_053506); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0()); 
             }
 
             }
@@ -69388,40 +75052,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_5"
+    // $ANTLR end "rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23546:1: rule__AttributeCS__QualifiersAssignment_5_1_0_6 : ( ( 'readonly' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_6() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsUnsettableAssignment_5_6_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25642:1: rule__AttributeCS__IsUnsettableAssignment_5_6_0_0 : ( ( 'unsettable' ) ) ;
+    public final void rule__AttributeCS__IsUnsettableAssignment_5_6_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23550:1: ( ( ( 'readonly' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23551:1: ( ( 'readonly' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25646:1: ( ( ( 'unsettable' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25647:1: ( ( 'unsettable' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23551:1: ( ( 'readonly' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23552:1: ( 'readonly' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25647:1: ( ( 'unsettable' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25648:1: ( 'unsettable' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23553:1: ( 'readonly' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23554:1: 'readonly'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25649:1: ( 'unsettable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25650:1: 'unsettable'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0()); 
             }
-            match(input,43,FollowSets002.FOLLOW_43_in_rule__AttributeCS__QualifiersAssignment_5_1_0_648015); if (state.failed) return ;
+            match(input,51,FollowSets002.FOLLOW_51_in_rule__AttributeCS__IsUnsettableAssignment_5_6_0_053550); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0()); 
             }
 
             }
@@ -69441,40 +75105,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_6"
+    // $ANTLR end "rule__AttributeCS__IsUnsettableAssignment_5_6_0_0"
 
 
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_7"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23569:1: rule__AttributeCS__QualifiersAssignment_5_1_0_7 : ( ( '!readonly' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_7() throws RecognitionException {
+    // $ANTLR start "rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25665:1: rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0 : ( ( 'volatile' ) ) ;
+    public final void rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23573:1: ( ( ( '!readonly' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23574:1: ( ( '!readonly' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25669:1: ( ( ( 'volatile' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25670:1: ( ( 'volatile' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23574:1: ( ( '!readonly' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23575:1: ( '!readonly' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25670:1: ( ( 'volatile' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25671:1: ( 'volatile' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23576:1: ( '!readonly' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23577:1: '!readonly'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25672:1: ( 'volatile' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25673:1: 'volatile'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0()); 
+               before(grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0()); 
             }
-            match(input,123,FollowSets002.FOLLOW_123_in_rule__AttributeCS__QualifiersAssignment_5_1_0_748059); if (state.failed) return ;
+            match(input,52,FollowSets002.FOLLOW_52_in_rule__AttributeCS__IsVolatileAssignment_5_7_0_0_053594); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0()); 
+               after(grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0()); 
             }
 
             }
@@ -69494,450 +75158,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_7"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_8"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23592:1: rule__AttributeCS__QualifiersAssignment_5_1_0_8 : ( ( 'transient' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_8() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23596:1: ( ( ( 'transient' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23597:1: ( ( 'transient' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23597:1: ( ( 'transient' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23598:1: ( 'transient' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23599:1: ( 'transient' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23600:1: 'transient'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0()); 
-            }
-            match(input,49,FollowSets002.FOLLOW_49_in_rule__AttributeCS__QualifiersAssignment_5_1_0_848103); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_8"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_9"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23615:1: rule__AttributeCS__QualifiersAssignment_5_1_0_9 : ( ( '!transient' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_9() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23619:1: ( ( ( '!transient' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23620:1: ( ( '!transient' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23620:1: ( ( '!transient' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23621:1: ( '!transient' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23622:1: ( '!transient' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23623:1: '!transient'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0()); 
-            }
-            match(input,124,FollowSets002.FOLLOW_124_in_rule__AttributeCS__QualifiersAssignment_5_1_0_948147); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_9"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_10"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23638:1: rule__AttributeCS__QualifiersAssignment_5_1_0_10 : ( ( 'unique' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_10() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23642:1: ( ( ( 'unique' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23643:1: ( ( 'unique' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23643:1: ( ( 'unique' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23644:1: ( 'unique' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23645:1: ( 'unique' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23646:1: 'unique'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0()); 
-            }
-            match(input,50,FollowSets002.FOLLOW_50_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1048191); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_10"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_11"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23661:1: rule__AttributeCS__QualifiersAssignment_5_1_0_11 : ( ( '!unique' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_11() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23665:1: ( ( ( '!unique' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23666:1: ( ( '!unique' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23666:1: ( ( '!unique' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23667:1: ( '!unique' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23668:1: ( '!unique' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23669:1: '!unique'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0()); 
-            }
-            match(input,125,FollowSets002.FOLLOW_125_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1148235); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_11"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_12"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23684:1: rule__AttributeCS__QualifiersAssignment_5_1_0_12 : ( ( 'unsettable' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_12() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23688:1: ( ( ( 'unsettable' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23689:1: ( ( 'unsettable' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23689:1: ( ( 'unsettable' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23690:1: ( 'unsettable' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23691:1: ( 'unsettable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23692:1: 'unsettable'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0()); 
-            }
-            match(input,51,FollowSets002.FOLLOW_51_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1248279); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_12"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_13"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23707:1: rule__AttributeCS__QualifiersAssignment_5_1_0_13 : ( ( '!unsettable' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_13() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23711:1: ( ( ( '!unsettable' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23712:1: ( ( '!unsettable' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23712:1: ( ( '!unsettable' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23713:1: ( '!unsettable' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23714:1: ( '!unsettable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23715:1: '!unsettable'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0()); 
-            }
-            match(input,126,FollowSets002.FOLLOW_126_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1348323); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_13"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_14"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23730:1: rule__AttributeCS__QualifiersAssignment_5_1_0_14 : ( ( 'volatile' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_14() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23734:1: ( ( ( 'volatile' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23735:1: ( ( 'volatile' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23735:1: ( ( 'volatile' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23736:1: ( 'volatile' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23737:1: ( 'volatile' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23738:1: 'volatile'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0()); 
-            }
-            match(input,52,FollowSets002.FOLLOW_52_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1448367); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_14"
-
-
-    // $ANTLR start "rule__AttributeCS__QualifiersAssignment_5_1_0_15"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23753:1: rule__AttributeCS__QualifiersAssignment_5_1_0_15 : ( ( '!volatile' ) ) ;
-    public final void rule__AttributeCS__QualifiersAssignment_5_1_0_15() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23757:1: ( ( ( '!volatile' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23758:1: ( ( '!volatile' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23758:1: ( ( '!volatile' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23759:1: ( '!volatile' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23760:1: ( '!volatile' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23761:1: '!volatile'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0()); 
-            }
-            match(input,127,FollowSets002.FOLLOW_127_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1548411); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__AttributeCS__QualifiersAssignment_5_1_0_15"
+    // $ANTLR end "rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0"
 
 
     // $ANTLR start "rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23776:1: rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25688:1: rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0 : ( ruleAnnotationElementCS ) ;
     public final void rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23780:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23781:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25692:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25693:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23781:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23782:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25693:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25694:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_6_0_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_048450);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_053633);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -69967,22 +75207,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23791:1: rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25703:1: rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3 : ( ruleSpecificationCS ) ;
     public final void rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23795:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23796:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25707:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25708:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23796:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23797:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25708:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25709:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_6_0_1_1_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_348481);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_353664);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -70012,22 +75252,22 @@
 
 
     // $ANTLR start "rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23806:1: rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25718:1: rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3 : ( ruleSpecificationCS ) ;
     public final void rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23810:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23811:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25722:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25723:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23811:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23812:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25723:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25724:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_6_0_1_2_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_348512);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_353695);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -70057,28 +75297,28 @@
 
 
     // $ANTLR start "rule__DataTypeCS__IsPrimitiveAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23821:1: rule__DataTypeCS__IsPrimitiveAssignment_0 : ( ( 'primitive' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25733:1: rule__DataTypeCS__IsPrimitiveAssignment_0 : ( ( 'primitive' ) ) ;
     public final void rule__DataTypeCS__IsPrimitiveAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23825:1: ( ( ( 'primitive' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23826:1: ( ( 'primitive' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25737:1: ( ( ( 'primitive' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25738:1: ( ( 'primitive' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23826:1: ( ( 'primitive' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23827:1: ( 'primitive' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25738:1: ( ( 'primitive' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25739:1: ( 'primitive' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getIsPrimitivePrimitiveKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23828:1: ( 'primitive' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23829:1: 'primitive'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25740:1: ( 'primitive' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25741:1: 'primitive'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getIsPrimitivePrimitiveKeyword_0_0()); 
             }
-            match(input,41,FollowSets002.FOLLOW_41_in_rule__DataTypeCS__IsPrimitiveAssignment_048548); if (state.failed) return ;
+            match(input,41,FollowSets002.FOLLOW_41_in_rule__DataTypeCS__IsPrimitiveAssignment_053731); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDataTypeCSAccess().getIsPrimitivePrimitiveKeyword_0_0()); 
             }
@@ -70110,22 +75350,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__NameAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23844:1: rule__DataTypeCS__NameAssignment_2 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25756:1: rule__DataTypeCS__NameAssignment_2 : ( ruleUnrestrictedName ) ;
     public final void rule__DataTypeCS__NameAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23848:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23849:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25760:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25761:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23849:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23850:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25761:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25762:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__DataTypeCS__NameAssignment_248587);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__DataTypeCS__NameAssignment_253770);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -70155,22 +75395,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__OwnedSignatureAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23859:1: rule__DataTypeCS__OwnedSignatureAssignment_3 : ( ruleTemplateSignatureCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25771:1: rule__DataTypeCS__OwnedSignatureAssignment_3 : ( ruleTemplateSignatureCS ) ;
     public final void rule__DataTypeCS__OwnedSignatureAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23863:1: ( ( ruleTemplateSignatureCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23864:1: ( ruleTemplateSignatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25775:1: ( ( ruleTemplateSignatureCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25776:1: ( ruleTemplateSignatureCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23864:1: ( ruleTemplateSignatureCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23865:1: ruleTemplateSignatureCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25776:1: ( ruleTemplateSignatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25777:1: ruleTemplateSignatureCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getOwnedSignatureTemplateSignatureCSParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTemplateSignatureCS_in_rule__DataTypeCS__OwnedSignatureAssignment_348618);
+            pushFollow(FollowSets002.FOLLOW_ruleTemplateSignatureCS_in_rule__DataTypeCS__OwnedSignatureAssignment_353801);
             ruleTemplateSignatureCS();
 
             state._fsp--;
@@ -70200,22 +75440,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__InstanceClassNameAssignment_4_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23874:1: rule__DataTypeCS__InstanceClassNameAssignment_4_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25786:1: rule__DataTypeCS__InstanceClassNameAssignment_4_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
     public final void rule__DataTypeCS__InstanceClassNameAssignment_4_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23878:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23879:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25790:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25791:1: ( RULE_SINGLE_QUOTED_STRING )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23879:1: ( RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23880:1: RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25791:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25792:1: RULE_SINGLE_QUOTED_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getInstanceClassNameSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0()); 
             }
-            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DataTypeCS__InstanceClassNameAssignment_4_148649); if (state.failed) return ;
+            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DataTypeCS__InstanceClassNameAssignment_4_153832); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDataTypeCSAccess().getInstanceClassNameSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0()); 
             }
@@ -70241,28 +75481,28 @@
 
 
     // $ANTLR start "rule__DataTypeCS__IsSerializableAssignment_5_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23889:1: rule__DataTypeCS__IsSerializableAssignment_5_1_0 : ( ( 'serializable' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25801:1: rule__DataTypeCS__IsSerializableAssignment_5_1_0 : ( ( 'serializable' ) ) ;
     public final void rule__DataTypeCS__IsSerializableAssignment_5_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23893:1: ( ( ( 'serializable' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23894:1: ( ( 'serializable' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25805:1: ( ( ( 'serializable' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25806:1: ( ( 'serializable' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23894:1: ( ( 'serializable' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23895:1: ( 'serializable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25806:1: ( ( 'serializable' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25807:1: ( 'serializable' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getIsSerializableSerializableKeyword_5_1_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23896:1: ( 'serializable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23897:1: 'serializable'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25808:1: ( 'serializable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25809:1: 'serializable'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getIsSerializableSerializableKeyword_5_1_0_0()); 
             }
-            match(input,59,FollowSets002.FOLLOW_59_in_rule__DataTypeCS__IsSerializableAssignment_5_1_048685); if (state.failed) return ;
+            match(input,68,FollowSets002.FOLLOW_68_in_rule__DataTypeCS__IsSerializableAssignment_5_1_053868); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDataTypeCSAccess().getIsSerializableSerializableKeyword_5_1_0_0()); 
             }
@@ -70294,22 +75534,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23912:1: rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25824:1: rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0 : ( ruleAnnotationElementCS ) ;
     public final void rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23916:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23917:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25828:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25829:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23917:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23918:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25829:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25830:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_6_0_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_048724);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_053907);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -70339,22 +75579,22 @@
 
 
     // $ANTLR start "rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23927:1: rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 : ( ruleInvariantConstraintCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25839:1: rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1 : ( ruleInvariantConstraintCS ) ;
     public final void rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23931:1: ( ( ruleInvariantConstraintCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23932:1: ( ruleInvariantConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25843:1: ( ( ruleInvariantConstraintCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25844:1: ( ruleInvariantConstraintCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23932:1: ( ruleInvariantConstraintCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23933:1: ruleInvariantConstraintCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25844:1: ( ruleInvariantConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25845:1: ruleInvariantConstraintCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDataTypeCSAccess().getOwnedConstraintsInvariantConstraintCSParserRuleCall_6_0_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleInvariantConstraintCS_in_rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_148755);
+            pushFollow(FollowSets002.FOLLOW_ruleInvariantConstraintCS_in_rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_153938);
             ruleInvariantConstraintCS();
 
             state._fsp--;
@@ -70384,25 +75624,25 @@
 
 
     // $ANTLR start "rule__DetailCS__NameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23942:1: rule__DetailCS__NameAssignment_0 : ( ( rule__DetailCS__NameAlternatives_0_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25854:1: rule__DetailCS__NameAssignment_0 : ( ( rule__DetailCS__NameAlternatives_0_0 ) ) ;
     public final void rule__DetailCS__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23946:1: ( ( ( rule__DetailCS__NameAlternatives_0_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23947:1: ( ( rule__DetailCS__NameAlternatives_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25858:1: ( ( ( rule__DetailCS__NameAlternatives_0_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25859:1: ( ( rule__DetailCS__NameAlternatives_0_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23947:1: ( ( rule__DetailCS__NameAlternatives_0_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23948:1: ( rule__DetailCS__NameAlternatives_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25859:1: ( ( rule__DetailCS__NameAlternatives_0_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25860:1: ( rule__DetailCS__NameAlternatives_0_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDetailCSAccess().getNameAlternatives_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23949:1: ( rule__DetailCS__NameAlternatives_0_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23949:2: rule__DetailCS__NameAlternatives_0_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25861:1: ( rule__DetailCS__NameAlternatives_0_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25861:2: rule__DetailCS__NameAlternatives_0_0
             {
-            pushFollow(FollowSets002.FOLLOW_rule__DetailCS__NameAlternatives_0_0_in_rule__DetailCS__NameAssignment_048786);
+            pushFollow(FollowSets002.FOLLOW_rule__DetailCS__NameAlternatives_0_0_in_rule__DetailCS__NameAssignment_053969);
             rule__DetailCS__NameAlternatives_0_0();
 
             state._fsp--;
@@ -70435,25 +75675,25 @@
 
 
     // $ANTLR start "rule__DetailCS__ValuesAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23958:1: rule__DetailCS__ValuesAssignment_2 : ( ( rule__DetailCS__ValuesAlternatives_2_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25870:1: rule__DetailCS__ValuesAssignment_2 : ( ( rule__DetailCS__ValuesAlternatives_2_0 ) ) ;
     public final void rule__DetailCS__ValuesAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23962:1: ( ( ( rule__DetailCS__ValuesAlternatives_2_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23963:1: ( ( rule__DetailCS__ValuesAlternatives_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25874:1: ( ( ( rule__DetailCS__ValuesAlternatives_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25875:1: ( ( rule__DetailCS__ValuesAlternatives_2_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23963:1: ( ( rule__DetailCS__ValuesAlternatives_2_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23964:1: ( rule__DetailCS__ValuesAlternatives_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25875:1: ( ( rule__DetailCS__ValuesAlternatives_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25876:1: ( rule__DetailCS__ValuesAlternatives_2_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDetailCSAccess().getValuesAlternatives_2_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23965:1: ( rule__DetailCS__ValuesAlternatives_2_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23965:2: rule__DetailCS__ValuesAlternatives_2_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25877:1: ( rule__DetailCS__ValuesAlternatives_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25877:2: rule__DetailCS__ValuesAlternatives_2_0
             {
-            pushFollow(FollowSets002.FOLLOW_rule__DetailCS__ValuesAlternatives_2_0_in_rule__DetailCS__ValuesAssignment_248819);
+            pushFollow(FollowSets002.FOLLOW_rule__DetailCS__ValuesAlternatives_2_0_in_rule__DetailCS__ValuesAssignment_254002);
             rule__DetailCS__ValuesAlternatives_2_0();
 
             state._fsp--;
@@ -70486,22 +75726,22 @@
 
 
     // $ANTLR start "rule__DocumentationCS__ValueAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23974:1: rule__DocumentationCS__ValueAssignment_2 : ( RULE_SINGLE_QUOTED_STRING ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25886:1: rule__DocumentationCS__ValueAssignment_2 : ( RULE_SINGLE_QUOTED_STRING ) ;
     public final void rule__DocumentationCS__ValueAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23978:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23979:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25890:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25891:1: ( RULE_SINGLE_QUOTED_STRING )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23979:1: ( RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23980:1: RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25891:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25892:1: RULE_SINGLE_QUOTED_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getValueSINGLE_QUOTED_STRINGTerminalRuleCall_2_0()); 
             }
-            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DocumentationCS__ValueAssignment_248852); if (state.failed) return ;
+            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DocumentationCS__ValueAssignment_254035); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getDocumentationCSAccess().getValueSINGLE_QUOTED_STRINGTerminalRuleCall_2_0()); 
             }
@@ -70527,22 +75767,22 @@
 
 
     // $ANTLR start "rule__DocumentationCS__OwnedDetailsAssignment_3_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23989:1: rule__DocumentationCS__OwnedDetailsAssignment_3_1 : ( ruleDetailCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25901:1: rule__DocumentationCS__OwnedDetailsAssignment_3_1 : ( ruleDetailCS ) ;
     public final void rule__DocumentationCS__OwnedDetailsAssignment_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23993:1: ( ( ruleDetailCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23994:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25905:1: ( ( ruleDetailCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25906:1: ( ruleDetailCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23994:1: ( ruleDetailCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23995:1: ruleDetailCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25906:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25907:1: ruleDetailCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getOwnedDetailsDetailCSParserRuleCall_3_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__DocumentationCS__OwnedDetailsAssignment_3_148883);
+            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__DocumentationCS__OwnedDetailsAssignment_3_154066);
             ruleDetailCS();
 
             state._fsp--;
@@ -70572,22 +75812,22 @@
 
 
     // $ANTLR start "rule__DocumentationCS__OwnedDetailsAssignment_3_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24004:1: rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 : ( ruleDetailCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25916:1: rule__DocumentationCS__OwnedDetailsAssignment_3_2_1 : ( ruleDetailCS ) ;
     public final void rule__DocumentationCS__OwnedDetailsAssignment_3_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24008:1: ( ( ruleDetailCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24009:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25920:1: ( ( ruleDetailCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25921:1: ( ruleDetailCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24009:1: ( ruleDetailCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24010:1: ruleDetailCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25921:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25922:1: ruleDetailCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getDocumentationCSAccess().getOwnedDetailsDetailCSParserRuleCall_3_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__DocumentationCS__OwnedDetailsAssignment_3_2_148914);
+            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__DocumentationCS__OwnedDetailsAssignment_3_2_154097);
             ruleDetailCS();
 
             state._fsp--;
@@ -70617,22 +75857,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__NameAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24019:1: rule__EnumerationCS__NameAssignment_1 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25931:1: rule__EnumerationCS__NameAssignment_1 : ( ruleUnrestrictedName ) ;
     public final void rule__EnumerationCS__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24023:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24024:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25935:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25936:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24024:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24025:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25936:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25937:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getNameUnrestrictedNameParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__EnumerationCS__NameAssignment_148945);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__EnumerationCS__NameAssignment_154128);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -70662,22 +75902,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__OwnedSignatureAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24034:1: rule__EnumerationCS__OwnedSignatureAssignment_2 : ( ruleTemplateSignatureCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25946:1: rule__EnumerationCS__OwnedSignatureAssignment_2 : ( ruleTemplateSignatureCS ) ;
     public final void rule__EnumerationCS__OwnedSignatureAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24038:1: ( ( ruleTemplateSignatureCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24039:1: ( ruleTemplateSignatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25950:1: ( ( ruleTemplateSignatureCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25951:1: ( ruleTemplateSignatureCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24039:1: ( ruleTemplateSignatureCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24040:1: ruleTemplateSignatureCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25951:1: ( ruleTemplateSignatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25952:1: ruleTemplateSignatureCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getOwnedSignatureTemplateSignatureCSParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTemplateSignatureCS_in_rule__EnumerationCS__OwnedSignatureAssignment_248976);
+            pushFollow(FollowSets002.FOLLOW_ruleTemplateSignatureCS_in_rule__EnumerationCS__OwnedSignatureAssignment_254159);
             ruleTemplateSignatureCS();
 
             state._fsp--;
@@ -70707,22 +75947,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__InstanceClassNameAssignment_3_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24049:1: rule__EnumerationCS__InstanceClassNameAssignment_3_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25961:1: rule__EnumerationCS__InstanceClassNameAssignment_3_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
     public final void rule__EnumerationCS__InstanceClassNameAssignment_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24053:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24054:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25965:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25966:1: ( RULE_SINGLE_QUOTED_STRING )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24054:1: ( RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24055:1: RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25966:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25967:1: RULE_SINGLE_QUOTED_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getInstanceClassNameSINGLE_QUOTED_STRINGTerminalRuleCall_3_1_0()); 
             }
-            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__EnumerationCS__InstanceClassNameAssignment_3_149007); if (state.failed) return ;
+            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__EnumerationCS__InstanceClassNameAssignment_3_154190); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationCSAccess().getInstanceClassNameSINGLE_QUOTED_STRINGTerminalRuleCall_3_1_0()); 
             }
@@ -70748,28 +75988,28 @@
 
 
     // $ANTLR start "rule__EnumerationCS__IsSerializableAssignment_4_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24064:1: rule__EnumerationCS__IsSerializableAssignment_4_1_0 : ( ( 'serializable' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25976:1: rule__EnumerationCS__IsSerializableAssignment_4_1_0 : ( ( 'serializable' ) ) ;
     public final void rule__EnumerationCS__IsSerializableAssignment_4_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24068:1: ( ( ( 'serializable' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24069:1: ( ( 'serializable' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25980:1: ( ( ( 'serializable' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25981:1: ( ( 'serializable' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24069:1: ( ( 'serializable' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24070:1: ( 'serializable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25981:1: ( ( 'serializable' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25982:1: ( 'serializable' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getIsSerializableSerializableKeyword_4_1_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24071:1: ( 'serializable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24072:1: 'serializable'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25983:1: ( 'serializable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25984:1: 'serializable'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getIsSerializableSerializableKeyword_4_1_0_0()); 
             }
-            match(input,59,FollowSets002.FOLLOW_59_in_rule__EnumerationCS__IsSerializableAssignment_4_1_049043); if (state.failed) return ;
+            match(input,68,FollowSets002.FOLLOW_68_in_rule__EnumerationCS__IsSerializableAssignment_4_1_054226); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getEnumerationCSAccess().getIsSerializableSerializableKeyword_4_1_0_0()); 
             }
@@ -70801,22 +76041,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24087:1: rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25999:1: rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0 : ( ruleAnnotationElementCS ) ;
     public final void rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24091:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24092:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26003:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26004:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24092:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24093:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26004:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26005:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_5_0_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_049082);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_054265);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -70846,22 +76086,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24102:1: rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 : ( ruleEnumerationLiteralCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26014:1: rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1 : ( ruleEnumerationLiteralCS ) ;
     public final void rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24106:1: ( ( ruleEnumerationLiteralCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24107:1: ( ruleEnumerationLiteralCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26018:1: ( ( ruleEnumerationLiteralCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26019:1: ( ruleEnumerationLiteralCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24107:1: ( ruleEnumerationLiteralCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24108:1: ruleEnumerationLiteralCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26019:1: ( ruleEnumerationLiteralCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26020:1: ruleEnumerationLiteralCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getOwnedLiteralsEnumerationLiteralCSParserRuleCall_5_0_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleEnumerationLiteralCS_in_rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_149113);
+            pushFollow(FollowSets002.FOLLOW_ruleEnumerationLiteralCS_in_rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_154296);
             ruleEnumerationLiteralCS();
 
             state._fsp--;
@@ -70891,22 +76131,22 @@
 
 
     // $ANTLR start "rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24117:1: rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 : ( ruleInvariantConstraintCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26029:1: rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2 : ( ruleInvariantConstraintCS ) ;
     public final void rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24121:1: ( ( ruleInvariantConstraintCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24122:1: ( ruleInvariantConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26033:1: ( ( ruleInvariantConstraintCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26034:1: ( ruleInvariantConstraintCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24122:1: ( ruleInvariantConstraintCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24123:1: ruleInvariantConstraintCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26034:1: ( ruleInvariantConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26035:1: ruleInvariantConstraintCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationCSAccess().getOwnedConstraintsInvariantConstraintCSParserRuleCall_5_0_1_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleInvariantConstraintCS_in_rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_249144);
+            pushFollow(FollowSets002.FOLLOW_ruleInvariantConstraintCS_in_rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_254327);
             ruleInvariantConstraintCS();
 
             state._fsp--;
@@ -70936,22 +76176,22 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__NameAssignment_0_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24132:1: rule__EnumerationLiteralCS__NameAssignment_0_0_1 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26044:1: rule__EnumerationLiteralCS__NameAssignment_0_0_1 : ( ruleUnrestrictedName ) ;
     public final void rule__EnumerationLiteralCS__NameAssignment_0_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24136:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24137:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26048:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26049:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24137:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24138:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26049:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26050:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getNameUnrestrictedNameParserRuleCall_0_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__EnumerationLiteralCS__NameAssignment_0_0_149175);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__EnumerationLiteralCS__NameAssignment_0_0_154358);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -70981,22 +76221,22 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__NameAssignment_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24147:1: rule__EnumerationLiteralCS__NameAssignment_0_1 : ( ruleEnumerationLiteralName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26059:1: rule__EnumerationLiteralCS__NameAssignment_0_1 : ( ruleEnumerationLiteralName ) ;
     public final void rule__EnumerationLiteralCS__NameAssignment_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24151:1: ( ( ruleEnumerationLiteralName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24152:1: ( ruleEnumerationLiteralName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26063:1: ( ( ruleEnumerationLiteralName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26064:1: ( ruleEnumerationLiteralName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24152:1: ( ruleEnumerationLiteralName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24153:1: ruleEnumerationLiteralName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26064:1: ( ruleEnumerationLiteralName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26065:1: ruleEnumerationLiteralName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getNameEnumerationLiteralNameParserRuleCall_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleEnumerationLiteralName_in_rule__EnumerationLiteralCS__NameAssignment_0_149206);
+            pushFollow(FollowSets002.FOLLOW_ruleEnumerationLiteralName_in_rule__EnumerationLiteralCS__NameAssignment_0_154389);
             ruleEnumerationLiteralName();
 
             state._fsp--;
@@ -71026,22 +76266,22 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__ValueAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24162:1: rule__EnumerationLiteralCS__ValueAssignment_1_1 : ( ruleSIGNED ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26074:1: rule__EnumerationLiteralCS__ValueAssignment_1_1 : ( ruleSIGNED ) ;
     public final void rule__EnumerationLiteralCS__ValueAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24166:1: ( ( ruleSIGNED ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24167:1: ( ruleSIGNED )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26078:1: ( ( ruleSIGNED ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26079:1: ( ruleSIGNED )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24167:1: ( ruleSIGNED )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24168:1: ruleSIGNED
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26079:1: ( ruleSIGNED )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26080:1: ruleSIGNED
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getValueSIGNEDParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSIGNED_in_rule__EnumerationLiteralCS__ValueAssignment_1_149237);
+            pushFollow(FollowSets002.FOLLOW_ruleSIGNED_in_rule__EnumerationLiteralCS__ValueAssignment_1_154420);
             ruleSIGNED();
 
             state._fsp--;
@@ -71071,22 +76311,22 @@
 
 
     // $ANTLR start "rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24177:1: rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26089:1: rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1 : ( ruleAnnotationElementCS ) ;
     public final void rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24181:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24182:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26093:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26094:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24182:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24183:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26094:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26095:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEnumerationLiteralCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_2_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_149268);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_154451);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -71116,22 +76356,22 @@
 
 
     // $ANTLR start "rule__ImportCS__NameAssignment_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24192:1: rule__ImportCS__NameAssignment_1_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26104:1: rule__ImportCS__NameAssignment_1_0 : ( ruleUnrestrictedName ) ;
     public final void rule__ImportCS__NameAssignment_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24196:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24197:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26108:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26109:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24197:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24198:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26109:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26110:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getNameUnrestrictedNameParserRuleCall_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ImportCS__NameAssignment_1_049299);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ImportCS__NameAssignment_1_054482);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -71161,22 +76401,22 @@
 
 
     // $ANTLR start "rule__ImportCS__OwnedPathNameAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24207:1: rule__ImportCS__OwnedPathNameAssignment_2 : ( ruleURIPathNameCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26119:1: rule__ImportCS__OwnedPathNameAssignment_2 : ( ruleURIPathNameCS ) ;
     public final void rule__ImportCS__OwnedPathNameAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24211:1: ( ( ruleURIPathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24212:1: ( ruleURIPathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26123:1: ( ( ruleURIPathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26124:1: ( ruleURIPathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24212:1: ( ruleURIPathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24213:1: ruleURIPathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26124:1: ( ruleURIPathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26125:1: ruleURIPathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getOwnedPathNameURIPathNameCSParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleURIPathNameCS_in_rule__ImportCS__OwnedPathNameAssignment_249330);
+            pushFollow(FollowSets002.FOLLOW_ruleURIPathNameCS_in_rule__ImportCS__OwnedPathNameAssignment_254513);
             ruleURIPathNameCS();
 
             state._fsp--;
@@ -71206,28 +76446,28 @@
 
 
     // $ANTLR start "rule__ImportCS__IsAllAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24222:1: rule__ImportCS__IsAllAssignment_3 : ( ( '::*' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26134:1: rule__ImportCS__IsAllAssignment_3 : ( ( '::*' ) ) ;
     public final void rule__ImportCS__IsAllAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24226:1: ( ( ( '::*' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24227:1: ( ( '::*' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26138:1: ( ( ( '::*' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26139:1: ( ( '::*' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24227:1: ( ( '::*' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24228:1: ( '::*' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26139:1: ( ( '::*' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26140:1: ( '::*' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getIsAllColonColonAsteriskKeyword_3_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24229:1: ( '::*' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24230:1: '::*'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26141:1: ( '::*' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26142:1: '::*'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getImportCSAccess().getIsAllColonColonAsteriskKeyword_3_0()); 
             }
-            match(input,128,FollowSets002.FOLLOW_128_in_rule__ImportCS__IsAllAssignment_349366); if (state.failed) return ;
+            match(input,130,FollowSets002.FOLLOW_130_in_rule__ImportCS__IsAllAssignment_354549); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getImportCSAccess().getIsAllColonColonAsteriskKeyword_3_0()); 
             }
@@ -71259,22 +76499,22 @@
 
 
     // $ANTLR start "rule__LibraryCS__NameAssignment_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24245:1: rule__LibraryCS__NameAssignment_1_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26157:1: rule__LibraryCS__NameAssignment_1_0 : ( ruleUnrestrictedName ) ;
     public final void rule__LibraryCS__NameAssignment_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24249:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24250:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26161:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26162:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24250:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24251:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26162:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26163:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLibraryCSAccess().getNameUnrestrictedNameParserRuleCall_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__LibraryCS__NameAssignment_1_049405);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__LibraryCS__NameAssignment_1_054588);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -71304,28 +76544,28 @@
 
 
     // $ANTLR start "rule__LibraryCS__ReferredPackageAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24260:1: rule__LibraryCS__ReferredPackageAssignment_2 : ( ( ruleURI ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26172:1: rule__LibraryCS__ReferredPackageAssignment_2 : ( ( ruleURI ) ) ;
     public final void rule__LibraryCS__ReferredPackageAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24264:1: ( ( ( ruleURI ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24265:1: ( ( ruleURI ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26176:1: ( ( ( ruleURI ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26177:1: ( ( ruleURI ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24265:1: ( ( ruleURI ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24266:1: ( ruleURI )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26177:1: ( ( ruleURI ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26178:1: ( ruleURI )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLibraryCSAccess().getReferredPackagePackageCrossReference_2_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24267:1: ( ruleURI )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24268:1: ruleURI
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26179:1: ( ruleURI )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26180:1: ruleURI
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLibraryCSAccess().getReferredPackagePackageURIParserRuleCall_2_0_1()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleURI_in_rule__LibraryCS__ReferredPackageAssignment_249440);
+            pushFollow(FollowSets002.FOLLOW_ruleURI_in_rule__LibraryCS__ReferredPackageAssignment_254623);
             ruleURI();
 
             state._fsp--;
@@ -71361,22 +76601,22 @@
 
 
     // $ANTLR start "rule__ModelElementRefCS__OwnedPathNameAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24279:1: rule__ModelElementRefCS__OwnedPathNameAssignment_1 : ( rulePathNameCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26191:1: rule__ModelElementRefCS__OwnedPathNameAssignment_1 : ( rulePathNameCS ) ;
     public final void rule__ModelElementRefCS__OwnedPathNameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24283:1: ( ( rulePathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24284:1: ( rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26195:1: ( ( rulePathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26196:1: ( rulePathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24284:1: ( rulePathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24285:1: rulePathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26196:1: ( rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26197:1: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getModelElementRefCSAccess().getOwnedPathNamePathNameCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePathNameCS_in_rule__ModelElementRefCS__OwnedPathNameAssignment_149475);
+            pushFollow(FollowSets002.FOLLOW_rulePathNameCS_in_rule__ModelElementRefCS__OwnedPathNameAssignment_154658);
             rulePathNameCS();
 
             state._fsp--;
@@ -71405,37 +76645,37 @@
     // $ANTLR end "rule__ModelElementRefCS__OwnedPathNameAssignment_1"
 
 
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_0_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24294:1: rule__OperationCS__QualifiersAssignment_0_0_0 : ( ( 'static' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_0_0_0() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__IsStaticAssignment_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26206:1: rule__OperationCS__IsStaticAssignment_0_0 : ( ( 'static' ) ) ;
+    public final void rule__OperationCS__IsStaticAssignment_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24298:1: ( ( ( 'static' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24299:1: ( ( 'static' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26210:1: ( ( ( 'static' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26211:1: ( ( 'static' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24299:1: ( ( 'static' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24300:1: ( 'static' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26211:1: ( ( 'static' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26212:1: ( 'static' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24301:1: ( 'static' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24302:1: 'static'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26213:1: ( 'static' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26214:1: 'static'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
-            match(input,46,FollowSets002.FOLLOW_46_in_rule__OperationCS__QualifiersAssignment_0_0_049511); if (state.failed) return ;
+            match(input,46,FollowSets002.FOLLOW_46_in_rule__OperationCS__IsStaticAssignment_0_054694); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
 
             }
@@ -71455,40 +76695,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_0_0_0"
+    // $ANTLR end "rule__OperationCS__IsStaticAssignment_0_0"
 
 
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_0_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24317:1: rule__OperationCS__QualifiersAssignment_0_0_1 : ( ( 'definition' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_0_0_1() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__IsDefinitionAssignment_0_1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26229:1: rule__OperationCS__IsDefinitionAssignment_0_1 : ( ( 'definition' ) ) ;
+    public final void rule__OperationCS__IsDefinitionAssignment_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24321:1: ( ( ( 'definition' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24322:1: ( ( 'definition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26233:1: ( ( ( 'definition' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26234:1: ( ( 'definition' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24322:1: ( ( 'definition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24323:1: ( 'definition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26234:1: ( ( 'definition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26235:1: ( 'definition' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24324:1: ( 'definition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24325:1: 'definition'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26236:1: ( 'definition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26237:1: 'definition'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
-            match(input,24,FollowSets002.FOLLOW_24_in_rule__OperationCS__QualifiersAssignment_0_0_149555); if (state.failed) return ;
+            match(input,24,FollowSets002.FOLLOW_24_in_rule__OperationCS__IsDefinitionAssignment_0_154738); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
 
             }
@@ -71508,132 +76748,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_0_0_1"
-
-
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24340:1: rule__OperationCS__QualifiersAssignment_0_1_0 : ( ( 'definition' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_0_1_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24344:1: ( ( ( 'definition' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24345:1: ( ( 'definition' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24345:1: ( ( 'definition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24346:1: ( 'definition' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24347:1: ( 'definition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24348:1: 'definition'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-            match(input,24,FollowSets002.FOLLOW_24_in_rule__OperationCS__QualifiersAssignment_0_1_049599); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_0_1_0"
-
-
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24363:1: rule__OperationCS__QualifiersAssignment_0_1_1 : ( ( 'static' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_0_1_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24367:1: ( ( ( 'static' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24368:1: ( ( 'static' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24368:1: ( ( 'static' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24369:1: ( 'static' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24370:1: ( 'static' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24371:1: 'static'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-            match(input,46,FollowSets002.FOLLOW_46_in_rule__OperationCS__QualifiersAssignment_0_1_149643); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_0_1_1"
+    // $ANTLR end "rule__OperationCS__IsDefinitionAssignment_0_1"
 
 
     // $ANTLR start "rule__OperationCS__OwnedSignatureAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24386:1: rule__OperationCS__OwnedSignatureAssignment_2 : ( ruleTemplateSignatureCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26252:1: rule__OperationCS__OwnedSignatureAssignment_2 : ( ruleTemplateSignatureCS ) ;
     public final void rule__OperationCS__OwnedSignatureAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24390:1: ( ( ruleTemplateSignatureCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24391:1: ( ruleTemplateSignatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26256:1: ( ( ruleTemplateSignatureCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26257:1: ( ruleTemplateSignatureCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24391:1: ( ruleTemplateSignatureCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24392:1: ruleTemplateSignatureCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26257:1: ( ruleTemplateSignatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26258:1: ruleTemplateSignatureCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedSignatureTemplateSignatureCSParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTemplateSignatureCS_in_rule__OperationCS__OwnedSignatureAssignment_249682);
+            pushFollow(FollowSets002.FOLLOW_ruleTemplateSignatureCS_in_rule__OperationCS__OwnedSignatureAssignment_254777);
             ruleTemplateSignatureCS();
 
             state._fsp--;
@@ -71663,22 +76797,22 @@
 
 
     // $ANTLR start "rule__OperationCS__NameAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24401:1: rule__OperationCS__NameAssignment_3 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26267:1: rule__OperationCS__NameAssignment_3 : ( ruleUnrestrictedName ) ;
     public final void rule__OperationCS__NameAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24405:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24406:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26271:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26272:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24406:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24407:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26272:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26273:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getNameUnrestrictedNameParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__OperationCS__NameAssignment_349713);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__OperationCS__NameAssignment_354808);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -71708,22 +76842,22 @@
 
 
     // $ANTLR start "rule__OperationCS__OwnedParametersAssignment_5_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24416:1: rule__OperationCS__OwnedParametersAssignment_5_0 : ( ruleParameterCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26282:1: rule__OperationCS__OwnedParametersAssignment_5_0 : ( ruleParameterCS ) ;
     public final void rule__OperationCS__OwnedParametersAssignment_5_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24420:1: ( ( ruleParameterCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24421:1: ( ruleParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26286:1: ( ( ruleParameterCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26287:1: ( ruleParameterCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24421:1: ( ruleParameterCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24422:1: ruleParameterCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26287:1: ( ruleParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26288:1: ruleParameterCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedParametersParameterCSParserRuleCall_5_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleParameterCS_in_rule__OperationCS__OwnedParametersAssignment_5_049744);
+            pushFollow(FollowSets002.FOLLOW_ruleParameterCS_in_rule__OperationCS__OwnedParametersAssignment_5_054839);
             ruleParameterCS();
 
             state._fsp--;
@@ -71753,22 +76887,22 @@
 
 
     // $ANTLR start "rule__OperationCS__OwnedParametersAssignment_5_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24431:1: rule__OperationCS__OwnedParametersAssignment_5_1_1 : ( ruleParameterCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26297:1: rule__OperationCS__OwnedParametersAssignment_5_1_1 : ( ruleParameterCS ) ;
     public final void rule__OperationCS__OwnedParametersAssignment_5_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24435:1: ( ( ruleParameterCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24436:1: ( ruleParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26301:1: ( ( ruleParameterCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26302:1: ( ruleParameterCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24436:1: ( ruleParameterCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24437:1: ruleParameterCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26302:1: ( ruleParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26303:1: ruleParameterCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedParametersParameterCSParserRuleCall_5_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleParameterCS_in_rule__OperationCS__OwnedParametersAssignment_5_1_149775);
+            pushFollow(FollowSets002.FOLLOW_ruleParameterCS_in_rule__OperationCS__OwnedParametersAssignment_5_1_154870);
             ruleParameterCS();
 
             state._fsp--;
@@ -71798,22 +76932,22 @@
 
 
     // $ANTLR start "rule__OperationCS__OwnedTypeAssignment_7_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24446:1: rule__OperationCS__OwnedTypeAssignment_7_1 : ( ruleTypedMultiplicityRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26312:1: rule__OperationCS__OwnedTypeAssignment_7_1 : ( ruleTypedMultiplicityRefCS ) ;
     public final void rule__OperationCS__OwnedTypeAssignment_7_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24450:1: ( ( ruleTypedMultiplicityRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24451:1: ( ruleTypedMultiplicityRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26316:1: ( ( ruleTypedMultiplicityRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26317:1: ( ruleTypedMultiplicityRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24451:1: ( ruleTypedMultiplicityRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24452:1: ruleTypedMultiplicityRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26317:1: ( ruleTypedMultiplicityRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26318:1: ruleTypedMultiplicityRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_7_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedMultiplicityRefCS_in_rule__OperationCS__OwnedTypeAssignment_7_149806);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedMultiplicityRefCS_in_rule__OperationCS__OwnedTypeAssignment_7_154901);
             ruleTypedMultiplicityRefCS();
 
             state._fsp--;
@@ -71843,22 +76977,22 @@
 
 
     // $ANTLR start "rule__OperationCS__OwnedExceptionsAssignment_8_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24461:1: rule__OperationCS__OwnedExceptionsAssignment_8_1 : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26327:1: rule__OperationCS__OwnedExceptionsAssignment_8_1 : ( ruleTypedRefCS ) ;
     public final void rule__OperationCS__OwnedExceptionsAssignment_8_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24465:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24466:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26331:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26332:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24466:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24467:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26332:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26333:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedExceptionsTypedRefCSParserRuleCall_8_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__OperationCS__OwnedExceptionsAssignment_8_149837);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__OperationCS__OwnedExceptionsAssignment_8_154932);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -71888,22 +77022,22 @@
 
 
     // $ANTLR start "rule__OperationCS__OwnedExceptionsAssignment_8_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24476:1: rule__OperationCS__OwnedExceptionsAssignment_8_2_1 : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26342:1: rule__OperationCS__OwnedExceptionsAssignment_8_2_1 : ( ruleTypedRefCS ) ;
     public final void rule__OperationCS__OwnedExceptionsAssignment_8_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24480:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24481:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26346:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26347:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24481:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24482:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26347:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26348:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedExceptionsTypedRefCSParserRuleCall_8_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__OperationCS__OwnedExceptionsAssignment_8_2_149868);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__OperationCS__OwnedExceptionsAssignment_8_2_154963);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -71932,37 +77066,37 @@
     // $ANTLR end "rule__OperationCS__OwnedExceptionsAssignment_8_2_1"
 
 
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_9_1_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24491:1: rule__OperationCS__QualifiersAssignment_9_1_0_0 : ( ( 'derived' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_9_1_0_0() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__IsDerivedAssignment_9_0_1_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26357:1: rule__OperationCS__IsDerivedAssignment_9_0_1_0_0 : ( ( 'derived' ) ) ;
+    public final void rule__OperationCS__IsDerivedAssignment_9_0_1_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24495:1: ( ( ( 'derived' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24496:1: ( ( 'derived' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26361:1: ( ( ( 'derived' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26362:1: ( ( 'derived' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24496:1: ( ( 'derived' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24497:1: ( 'derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26362:1: ( ( 'derived' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26363:1: ( 'derived' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24498:1: ( 'derived' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24499:1: 'derived'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26364:1: ( 'derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26365:1: 'derived'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0()); 
             }
-            match(input,26,FollowSets002.FOLLOW_26_in_rule__OperationCS__QualifiersAssignment_9_1_0_049904); if (state.failed) return ;
+            match(input,26,FollowSets002.FOLLOW_26_in_rule__OperationCS__IsDerivedAssignment_9_0_1_0_054999); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0()); 
             }
 
             }
@@ -71982,40 +77116,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_9_1_0_0"
+    // $ANTLR end "rule__OperationCS__IsDerivedAssignment_9_0_1_0_0"
 
 
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_9_1_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24514:1: rule__OperationCS__QualifiersAssignment_9_1_0_1 : ( ( '!derived' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_9_1_0_1() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__IsOrderedAssignment_9_1_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26380:1: rule__OperationCS__IsOrderedAssignment_9_1_0_0 : ( ( 'ordered' ) ) ;
+    public final void rule__OperationCS__IsOrderedAssignment_9_1_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24518:1: ( ( ( '!derived' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24519:1: ( ( '!derived' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26384:1: ( ( ( 'ordered' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26385:1: ( ( 'ordered' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24519:1: ( ( '!derived' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24520:1: ( '!derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26385:1: ( ( 'ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26386:1: ( 'ordered' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24521:1: ( '!derived' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24522:1: '!derived'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26387:1: ( 'ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26388:1: 'ordered'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0()); 
             }
-            match(input,120,FollowSets002.FOLLOW_120_in_rule__OperationCS__QualifiersAssignment_9_1_0_149948); if (state.failed) return ;
+            match(input,37,FollowSets002.FOLLOW_37_in_rule__OperationCS__IsOrderedAssignment_9_1_0_055043); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0()); 
             }
 
             }
@@ -72035,40 +77169,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_9_1_0_1"
+    // $ANTLR end "rule__OperationCS__IsOrderedAssignment_9_1_0_0"
 
 
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_9_1_0_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24537:1: rule__OperationCS__QualifiersAssignment_9_1_0_2 : ( ( 'ordered' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_9_1_0_2() throws RecognitionException {
+    // $ANTLR start "rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26403:1: rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0 : ( ( '!unique' ) ) ;
+    public final void rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24541:1: ( ( ( 'ordered' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24542:1: ( ( 'ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26407:1: ( ( ( '!unique' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26408:1: ( ( '!unique' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24542:1: ( ( 'ordered' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24543:1: ( 'ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26408:1: ( ( '!unique' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26409:1: ( '!unique' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24544:1: ( 'ordered' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24545:1: 'ordered'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26410:1: ( '!unique' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26411:1: '!unique'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0()); 
+               before(grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0()); 
             }
-            match(input,37,FollowSets002.FOLLOW_37_in_rule__OperationCS__QualifiersAssignment_9_1_0_249992); if (state.failed) return ;
+            match(input,129,FollowSets002.FOLLOW_129_in_rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_055087); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0()); 
+               after(grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0()); 
             }
 
             }
@@ -72088,185 +77222,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_9_1_0_2"
-
-
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_9_1_0_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24560:1: rule__OperationCS__QualifiersAssignment_9_1_0_3 : ( ( '!ordered' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_9_1_0_3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24564:1: ( ( ( '!ordered' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24565:1: ( ( '!ordered' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24565:1: ( ( '!ordered' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24566:1: ( '!ordered' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24567:1: ( '!ordered' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24568:1: '!ordered'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0()); 
-            }
-            match(input,122,FollowSets002.FOLLOW_122_in_rule__OperationCS__QualifiersAssignment_9_1_0_350036); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_9_1_0_3"
-
-
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_9_1_0_4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24583:1: rule__OperationCS__QualifiersAssignment_9_1_0_4 : ( ( 'unique' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_9_1_0_4() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24587:1: ( ( ( 'unique' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24588:1: ( ( 'unique' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24588:1: ( ( 'unique' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24589:1: ( 'unique' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24590:1: ( 'unique' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24591:1: 'unique'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0()); 
-            }
-            match(input,50,FollowSets002.FOLLOW_50_in_rule__OperationCS__QualifiersAssignment_9_1_0_450080); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_9_1_0_4"
-
-
-    // $ANTLR start "rule__OperationCS__QualifiersAssignment_9_1_0_5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24606:1: rule__OperationCS__QualifiersAssignment_9_1_0_5 : ( ( '!unique' ) ) ;
-    public final void rule__OperationCS__QualifiersAssignment_9_1_0_5() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24610:1: ( ( ( '!unique' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24611:1: ( ( '!unique' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24611:1: ( ( '!unique' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24612:1: ( '!unique' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24613:1: ( '!unique' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24614:1: '!unique'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0()); 
-            }
-            match(input,125,FollowSets002.FOLLOW_125_in_rule__OperationCS__QualifiersAssignment_9_1_0_550124); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationCS__QualifiersAssignment_9_1_0_5"
+    // $ANTLR end "rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0"
 
 
     // $ANTLR start "rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24629:1: rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26426:1: rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0 : ( ruleAnnotationElementCS ) ;
     public final void rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24633:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24634:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26430:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26431:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24634:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24635:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26431:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26432:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_10_0_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_050163);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_055126);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -72296,22 +77271,22 @@
 
 
     // $ANTLR start "rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24644:1: rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 : ( rulePreconditionConstraintCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26441:1: rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1 : ( rulePreconditionConstraintCS ) ;
     public final void rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24648:1: ( ( rulePreconditionConstraintCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24649:1: ( rulePreconditionConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26445:1: ( ( rulePreconditionConstraintCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26446:1: ( rulePreconditionConstraintCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24649:1: ( rulePreconditionConstraintCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24650:1: rulePreconditionConstraintCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26446:1: ( rulePreconditionConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26447:1: rulePreconditionConstraintCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedPreconditionsPreconditionConstraintCSParserRuleCall_10_0_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePreconditionConstraintCS_in_rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_150194);
+            pushFollow(FollowSets002.FOLLOW_rulePreconditionConstraintCS_in_rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_155157);
             rulePreconditionConstraintCS();
 
             state._fsp--;
@@ -72341,22 +77316,22 @@
 
 
     // $ANTLR start "rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24659:1: rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26456:1: rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3 : ( ruleSpecificationCS ) ;
     public final void rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24663:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24664:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26460:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26461:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24664:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24665:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26461:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26462:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedBodyExpressionsSpecificationCSParserRuleCall_10_0_1_2_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_350225);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_355188);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -72386,22 +77361,22 @@
 
 
     // $ANTLR start "rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24674:1: rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 : ( rulePostconditionConstraintCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26471:1: rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3 : ( rulePostconditionConstraintCS ) ;
     public final void rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24678:1: ( ( rulePostconditionConstraintCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24679:1: ( rulePostconditionConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26475:1: ( ( rulePostconditionConstraintCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26476:1: ( rulePostconditionConstraintCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24679:1: ( rulePostconditionConstraintCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24680:1: rulePostconditionConstraintCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26476:1: ( rulePostconditionConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26477:1: rulePostconditionConstraintCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOwnedPostconditionsPostconditionConstraintCSParserRuleCall_10_0_1_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePostconditionConstraintCS_in_rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_350256);
+            pushFollow(FollowSets002.FOLLOW_rulePostconditionConstraintCS_in_rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_355219);
             rulePostconditionConstraintCS();
 
             state._fsp--;
@@ -72431,22 +77406,22 @@
 
 
     // $ANTLR start "rule__PackageCS__NameAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24689:1: rule__PackageCS__NameAssignment_1 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26486:1: rule__PackageCS__NameAssignment_1 : ( ruleUnrestrictedName ) ;
     public final void rule__PackageCS__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24693:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24694:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26490:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26491:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24694:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24695:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26491:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26492:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getNameUnrestrictedNameParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PackageCS__NameAssignment_150287);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PackageCS__NameAssignment_155250);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -72476,22 +77451,22 @@
 
 
     // $ANTLR start "rule__PackageCS__NsPrefixAssignment_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24704:1: rule__PackageCS__NsPrefixAssignment_2_1 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26501:1: rule__PackageCS__NsPrefixAssignment_2_1 : ( ruleUnrestrictedName ) ;
     public final void rule__PackageCS__NsPrefixAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24708:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24709:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26505:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26506:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24709:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24710:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26506:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26507:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getNsPrefixUnrestrictedNameParserRuleCall_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PackageCS__NsPrefixAssignment_2_150318);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PackageCS__NsPrefixAssignment_2_155281);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -72521,22 +77496,22 @@
 
 
     // $ANTLR start "rule__PackageCS__NsURIAssignment_3_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24719:1: rule__PackageCS__NsURIAssignment_3_1 : ( ruleURI ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26516:1: rule__PackageCS__NsURIAssignment_3_1 : ( ruleURI ) ;
     public final void rule__PackageCS__NsURIAssignment_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24723:1: ( ( ruleURI ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24724:1: ( ruleURI )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26520:1: ( ( ruleURI ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26521:1: ( ruleURI )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24724:1: ( ruleURI )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24725:1: ruleURI
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26521:1: ( ruleURI )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26522:1: ruleURI
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getNsURIURIParserRuleCall_3_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleURI_in_rule__PackageCS__NsURIAssignment_3_150349);
+            pushFollow(FollowSets002.FOLLOW_ruleURI_in_rule__PackageCS__NsURIAssignment_3_155312);
             ruleURI();
 
             state._fsp--;
@@ -72566,22 +77541,22 @@
 
 
     // $ANTLR start "rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24734:1: rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26531:1: rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0 : ( ruleAnnotationElementCS ) ;
     public final void rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24738:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24739:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26535:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26536:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24739:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24740:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26536:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26537:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_4_0_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_050380);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_055343);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -72611,22 +77586,22 @@
 
 
     // $ANTLR start "rule__PackageCS__OwnedPackagesAssignment_4_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24749:1: rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 : ( rulePackageCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26546:1: rule__PackageCS__OwnedPackagesAssignment_4_0_1_1 : ( rulePackageCS ) ;
     public final void rule__PackageCS__OwnedPackagesAssignment_4_0_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24753:1: ( ( rulePackageCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24754:1: ( rulePackageCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26550:1: ( ( rulePackageCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26551:1: ( rulePackageCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24754:1: ( rulePackageCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24755:1: rulePackageCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26551:1: ( rulePackageCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26552:1: rulePackageCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getOwnedPackagesPackageCSParserRuleCall_4_0_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePackageCS_in_rule__PackageCS__OwnedPackagesAssignment_4_0_1_150411);
+            pushFollow(FollowSets002.FOLLOW_rulePackageCS_in_rule__PackageCS__OwnedPackagesAssignment_4_0_1_155374);
             rulePackageCS();
 
             state._fsp--;
@@ -72656,22 +77631,22 @@
 
 
     // $ANTLR start "rule__PackageCS__OwnedClassesAssignment_4_0_1_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24764:1: rule__PackageCS__OwnedClassesAssignment_4_0_1_2 : ( ruleClassCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26561:1: rule__PackageCS__OwnedClassesAssignment_4_0_1_2 : ( ruleClassCS ) ;
     public final void rule__PackageCS__OwnedClassesAssignment_4_0_1_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24768:1: ( ( ruleClassCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24769:1: ( ruleClassCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26565:1: ( ( ruleClassCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26566:1: ( ruleClassCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24769:1: ( ruleClassCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24770:1: ruleClassCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26566:1: ( ruleClassCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26567:1: ruleClassCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getOwnedClassesClassCSParserRuleCall_4_0_1_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleClassCS_in_rule__PackageCS__OwnedClassesAssignment_4_0_1_250442);
+            pushFollow(FollowSets002.FOLLOW_ruleClassCS_in_rule__PackageCS__OwnedClassesAssignment_4_0_1_255405);
             ruleClassCS();
 
             state._fsp--;
@@ -72701,22 +77676,22 @@
 
 
     // $ANTLR start "rule__ParameterCS__NameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24779:1: rule__ParameterCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26576:1: rule__ParameterCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
     public final void rule__ParameterCS__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24783:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24784:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26580:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26581:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24784:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24785:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26581:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26582:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ParameterCS__NameAssignment_050473);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ParameterCS__NameAssignment_055436);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -72746,22 +77721,22 @@
 
 
     // $ANTLR start "rule__ParameterCS__OwnedTypeAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24794:1: rule__ParameterCS__OwnedTypeAssignment_1_1 : ( ruleTypedMultiplicityRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26591:1: rule__ParameterCS__OwnedTypeAssignment_1_1 : ( ruleTypedMultiplicityRefCS ) ;
     public final void rule__ParameterCS__OwnedTypeAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24798:1: ( ( ruleTypedMultiplicityRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24799:1: ( ruleTypedMultiplicityRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26595:1: ( ( ruleTypedMultiplicityRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26596:1: ( ruleTypedMultiplicityRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24799:1: ( ruleTypedMultiplicityRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24800:1: ruleTypedMultiplicityRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26596:1: ( ruleTypedMultiplicityRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26597:1: ruleTypedMultiplicityRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedMultiplicityRefCS_in_rule__ParameterCS__OwnedTypeAssignment_1_150504);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedMultiplicityRefCS_in_rule__ParameterCS__OwnedTypeAssignment_1_155467);
             ruleTypedMultiplicityRefCS();
 
             state._fsp--;
@@ -72790,37 +77765,37 @@
     // $ANTLR end "rule__ParameterCS__OwnedTypeAssignment_1_1"
 
 
-    // $ANTLR start "rule__ParameterCS__QualifiersAssignment_2_1_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24809:1: rule__ParameterCS__QualifiersAssignment_2_1_0_0 : ( ( 'ordered' ) ) ;
-    public final void rule__ParameterCS__QualifiersAssignment_2_1_0_0() throws RecognitionException {
+    // $ANTLR start "rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26606:1: rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0 : ( ( 'ordered' ) ) ;
+    public final void rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24813:1: ( ( ( 'ordered' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24814:1: ( ( 'ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26610:1: ( ( ( 'ordered' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26611:1: ( ( 'ordered' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24814:1: ( ( 'ordered' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24815:1: ( 'ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26611:1: ( ( 'ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26612:1: ( 'ordered' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0()); 
+               before(grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24816:1: ( 'ordered' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24817:1: 'ordered'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26613:1: ( 'ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26614:1: 'ordered'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0()); 
+               before(grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0()); 
             }
-            match(input,37,FollowSets002.FOLLOW_37_in_rule__ParameterCS__QualifiersAssignment_2_1_0_050540); if (state.failed) return ;
+            match(input,37,FollowSets002.FOLLOW_37_in_rule__ParameterCS__IsOrderedAssignment_2_0_1_0_055503); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0()); 
+               after(grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0()); 
+               after(grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0()); 
             }
 
             }
@@ -72840,40 +77815,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ParameterCS__QualifiersAssignment_2_1_0_0"
+    // $ANTLR end "rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0"
 
 
-    // $ANTLR start "rule__ParameterCS__QualifiersAssignment_2_1_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24832:1: rule__ParameterCS__QualifiersAssignment_2_1_0_1 : ( ( '!ordered' ) ) ;
-    public final void rule__ParameterCS__QualifiersAssignment_2_1_0_1() throws RecognitionException {
+    // $ANTLR start "rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26629:1: rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0 : ( ( '!unique' ) ) ;
+    public final void rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24836:1: ( ( ( '!ordered' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24837:1: ( ( '!ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26633:1: ( ( ( '!unique' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26634:1: ( ( '!unique' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24837:1: ( ( '!ordered' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24838:1: ( '!ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26634:1: ( ( '!unique' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26635:1: ( '!unique' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0()); 
+               before(grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24839:1: ( '!ordered' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24840:1: '!ordered'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26636:1: ( '!unique' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26637:1: '!unique'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0()); 
+               before(grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0()); 
             }
-            match(input,122,FollowSets002.FOLLOW_122_in_rule__ParameterCS__QualifiersAssignment_2_1_0_150584); if (state.failed) return ;
+            match(input,129,FollowSets002.FOLLOW_129_in_rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_055547); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0()); 
+               after(grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0()); 
+               after(grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0()); 
             }
 
             }
@@ -72893,132 +77868,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ParameterCS__QualifiersAssignment_2_1_0_1"
-
-
-    // $ANTLR start "rule__ParameterCS__QualifiersAssignment_2_1_0_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24855:1: rule__ParameterCS__QualifiersAssignment_2_1_0_2 : ( ( 'unique' ) ) ;
-    public final void rule__ParameterCS__QualifiersAssignment_2_1_0_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24859:1: ( ( ( 'unique' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24860:1: ( ( 'unique' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24860:1: ( ( 'unique' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24861:1: ( 'unique' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24862:1: ( 'unique' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24863:1: 'unique'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0()); 
-            }
-            match(input,50,FollowSets002.FOLLOW_50_in_rule__ParameterCS__QualifiersAssignment_2_1_0_250628); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ParameterCS__QualifiersAssignment_2_1_0_2"
-
-
-    // $ANTLR start "rule__ParameterCS__QualifiersAssignment_2_1_0_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24878:1: rule__ParameterCS__QualifiersAssignment_2_1_0_3 : ( ( '!unique' ) ) ;
-    public final void rule__ParameterCS__QualifiersAssignment_2_1_0_3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24882:1: ( ( ( '!unique' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24883:1: ( ( '!unique' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24883:1: ( ( '!unique' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24884:1: ( '!unique' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24885:1: ( '!unique' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24886:1: '!unique'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0()); 
-            }
-            match(input,125,FollowSets002.FOLLOW_125_in_rule__ParameterCS__QualifiersAssignment_2_1_0_350672); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ParameterCS__QualifiersAssignment_2_1_0_3"
+    // $ANTLR end "rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0"
 
 
     // $ANTLR start "rule__ParameterCS__OwnedAnnotationsAssignment_3_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24901:1: rule__ParameterCS__OwnedAnnotationsAssignment_3_1 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26652:1: rule__ParameterCS__OwnedAnnotationsAssignment_3_1 : ( ruleAnnotationElementCS ) ;
     public final void rule__ParameterCS__OwnedAnnotationsAssignment_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24905:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24906:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26656:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26657:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24906:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24907:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26657:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26658:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_3_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__ParameterCS__OwnedAnnotationsAssignment_3_150711);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__ParameterCS__OwnedAnnotationsAssignment_3_155586);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -73047,37 +77916,37 @@
     // $ANTLR end "rule__ParameterCS__OwnedAnnotationsAssignment_3_1"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_0_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24916:1: rule__ReferenceCS__QualifiersAssignment_0_0_0 : ( ( 'static' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_0_0_0() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsStaticAssignment_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26667:1: rule__ReferenceCS__IsStaticAssignment_0_0 : ( ( 'static' ) ) ;
+    public final void rule__ReferenceCS__IsStaticAssignment_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24920:1: ( ( ( 'static' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24921:1: ( ( 'static' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26671:1: ( ( ( 'static' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26672:1: ( ( 'static' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24921:1: ( ( 'static' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24922:1: ( 'static' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26672:1: ( ( 'static' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26673:1: ( 'static' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24923:1: ( 'static' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24924:1: 'static'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26674:1: ( 'static' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26675:1: 'static'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
-            match(input,46,FollowSets002.FOLLOW_46_in_rule__ReferenceCS__QualifiersAssignment_0_0_050747); if (state.failed) return ;
+            match(input,46,FollowSets002.FOLLOW_46_in_rule__ReferenceCS__IsStaticAssignment_0_055622); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0()); 
             }
 
             }
@@ -73097,40 +77966,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_0_0_0"
+    // $ANTLR end "rule__ReferenceCS__IsStaticAssignment_0_0"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_0_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24939:1: rule__ReferenceCS__QualifiersAssignment_0_0_1 : ( ( 'definition' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_0_0_1() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsDefinitionAssignment_0_1"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26690:1: rule__ReferenceCS__IsDefinitionAssignment_0_1 : ( ( 'definition' ) ) ;
+    public final void rule__ReferenceCS__IsDefinitionAssignment_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24943:1: ( ( ( 'definition' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24944:1: ( ( 'definition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26694:1: ( ( ( 'definition' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26695:1: ( ( 'definition' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24944:1: ( ( 'definition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24945:1: ( 'definition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26695:1: ( ( 'definition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26696:1: ( 'definition' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24946:1: ( 'definition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24947:1: 'definition'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26697:1: ( 'definition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26698:1: 'definition'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
-            match(input,24,FollowSets002.FOLLOW_24_in_rule__ReferenceCS__QualifiersAssignment_0_0_150791); if (state.failed) return ;
+            match(input,24,FollowSets002.FOLLOW_24_in_rule__ReferenceCS__IsDefinitionAssignment_0_155666); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0()); 
             }
 
             }
@@ -73150,132 +78019,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_0_0_1"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24962:1: rule__ReferenceCS__QualifiersAssignment_0_1_0 : ( ( 'definition' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_0_1_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24966:1: ( ( ( 'definition' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24967:1: ( ( 'definition' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24967:1: ( ( 'definition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24968:1: ( 'definition' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24969:1: ( 'definition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24970:1: 'definition'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-            match(input,24,FollowSets002.FOLLOW_24_in_rule__ReferenceCS__QualifiersAssignment_0_1_050835); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_0_1_0"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24985:1: rule__ReferenceCS__QualifiersAssignment_0_1_1 : ( ( 'static' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_0_1_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24989:1: ( ( ( 'static' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24990:1: ( ( 'static' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24990:1: ( ( 'static' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24991:1: ( 'static' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24992:1: ( 'static' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24993:1: 'static'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-            match(input,46,FollowSets002.FOLLOW_46_in_rule__ReferenceCS__QualifiersAssignment_0_1_150879); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_0_1_1"
+    // $ANTLR end "rule__ReferenceCS__IsDefinitionAssignment_0_1"
 
 
     // $ANTLR start "rule__ReferenceCS__NameAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25008:1: rule__ReferenceCS__NameAssignment_2 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26713:1: rule__ReferenceCS__NameAssignment_2 : ( ruleUnrestrictedName ) ;
     public final void rule__ReferenceCS__NameAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25012:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25013:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26717:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26718:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25013:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25014:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26718:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26719:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__NameAssignment_250918);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__NameAssignment_255705);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -73305,28 +78068,28 @@
 
 
     // $ANTLR start "rule__ReferenceCS__ReferredOppositeAssignment_3_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25023:1: rule__ReferenceCS__ReferredOppositeAssignment_3_1 : ( ( ruleUnrestrictedName ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26728:1: rule__ReferenceCS__ReferredOppositeAssignment_3_1 : ( ( ruleUnrestrictedName ) ) ;
     public final void rule__ReferenceCS__ReferredOppositeAssignment_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25027:1: ( ( ( ruleUnrestrictedName ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25028:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26732:1: ( ( ( ruleUnrestrictedName ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26733:1: ( ( ruleUnrestrictedName ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25028:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25029:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26733:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26734:1: ( ruleUnrestrictedName )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getReferredOppositePropertyCrossReference_3_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25030:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25031:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26735:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26736:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getReferredOppositePropertyUnrestrictedNameParserRuleCall_3_1_0_1()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredOppositeAssignment_3_150953);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredOppositeAssignment_3_155740);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -73362,22 +78125,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__OwnedTypeAssignment_4_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25042:1: rule__ReferenceCS__OwnedTypeAssignment_4_1 : ( ruleTypedMultiplicityRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26747:1: rule__ReferenceCS__OwnedTypeAssignment_4_1 : ( ruleTypedMultiplicityRefCS ) ;
     public final void rule__ReferenceCS__OwnedTypeAssignment_4_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25046:1: ( ( ruleTypedMultiplicityRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25047:1: ( ruleTypedMultiplicityRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26751:1: ( ( ruleTypedMultiplicityRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26752:1: ( ruleTypedMultiplicityRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25047:1: ( ruleTypedMultiplicityRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25048:1: ruleTypedMultiplicityRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26752:1: ( ruleTypedMultiplicityRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26753:1: ruleTypedMultiplicityRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_4_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedMultiplicityRefCS_in_rule__ReferenceCS__OwnedTypeAssignment_4_150988);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedMultiplicityRefCS_in_rule__ReferenceCS__OwnedTypeAssignment_4_155775);
             ruleTypedMultiplicityRefCS();
 
             state._fsp--;
@@ -73407,22 +78170,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__DefaultAssignment_5_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25057:1: rule__ReferenceCS__DefaultAssignment_5_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26762:1: rule__ReferenceCS__DefaultAssignment_5_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
     public final void rule__ReferenceCS__DefaultAssignment_5_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25061:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25062:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26766:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26767:1: ( RULE_SINGLE_QUOTED_STRING )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25062:1: ( RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25063:1: RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26767:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26768:1: RULE_SINGLE_QUOTED_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0()); 
             }
-            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__ReferenceCS__DefaultAssignment_5_151019); if (state.failed) return ;
+            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__ReferenceCS__DefaultAssignment_5_155806); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getReferenceCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0()); 
             }
@@ -73447,37 +78210,37 @@
     // $ANTLR end "rule__ReferenceCS__DefaultAssignment_5_1"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25072:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_0 : ( ( 'composes' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_0() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26777:1: rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0 : ( ( 'composes' ) ) ;
+    public final void rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25076:1: ( ( ( 'composes' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25077:1: ( ( 'composes' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26781:1: ( ( ( 'composes' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26782:1: ( ( 'composes' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25077:1: ( ( 'composes' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25078:1: ( 'composes' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26782:1: ( ( 'composes' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26783:1: ( 'composes' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25079:1: ( 'composes' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25080:1: 'composes'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26784:1: ( 'composes' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26785:1: 'composes'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0()); 
             }
-            match(input,22,FollowSets002.FOLLOW_22_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_051055); if (state.failed) return ;
+            match(input,22,FollowSets002.FOLLOW_22_in_rule__ReferenceCS__IsComposesAssignment_6_0_1_0_055842); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0()); 
             }
 
             }
@@ -73497,40 +78260,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_0"
+    // $ANTLR end "rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25095:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_1 : ( ( '!composes' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_1() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsDerivedAssignment_6_1_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26800:1: rule__ReferenceCS__IsDerivedAssignment_6_1_0_0 : ( ( 'derived' ) ) ;
+    public final void rule__ReferenceCS__IsDerivedAssignment_6_1_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25099:1: ( ( ( '!composes' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25100:1: ( ( '!composes' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26804:1: ( ( ( 'derived' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26805:1: ( ( 'derived' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25100:1: ( ( '!composes' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25101:1: ( '!composes' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26805:1: ( ( 'derived' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26806:1: ( 'derived' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25102:1: ( '!composes' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25103:1: '!composes'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26807:1: ( 'derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26808:1: 'derived'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0()); 
             }
-            match(input,129,FollowSets002.FOLLOW_129_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_151099); if (state.failed) return ;
+            match(input,26,FollowSets002.FOLLOW_26_in_rule__ReferenceCS__IsDerivedAssignment_6_1_0_055886); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0()); 
             }
 
             }
@@ -73550,40 +78313,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_1"
+    // $ANTLR end "rule__ReferenceCS__IsDerivedAssignment_6_1_0_0"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25118:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_2 : ( ( 'derived' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_2() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsOrderedAssignment_6_2_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26823:1: rule__ReferenceCS__IsOrderedAssignment_6_2_0_0 : ( ( 'ordered' ) ) ;
+    public final void rule__ReferenceCS__IsOrderedAssignment_6_2_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25122:1: ( ( ( 'derived' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25123:1: ( ( 'derived' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26827:1: ( ( ( 'ordered' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26828:1: ( ( 'ordered' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25123:1: ( ( 'derived' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25124:1: ( 'derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26828:1: ( ( 'ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26829:1: ( 'ordered' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25125:1: ( 'derived' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25126:1: 'derived'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26830:1: ( 'ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26831:1: 'ordered'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0()); 
             }
-            match(input,26,FollowSets002.FOLLOW_26_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_251143); if (state.failed) return ;
+            match(input,37,FollowSets002.FOLLOW_37_in_rule__ReferenceCS__IsOrderedAssignment_6_2_0_055930); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0()); 
             }
 
             }
@@ -73603,40 +78366,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_2"
+    // $ANTLR end "rule__ReferenceCS__IsOrderedAssignment_6_2_0_0"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25141:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_3 : ( ( '!derived' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_3() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26846:1: rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0 : ( ( 'readonly' ) ) ;
+    public final void rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25145:1: ( ( ( '!derived' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25146:1: ( ( '!derived' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26850:1: ( ( ( 'readonly' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26851:1: ( ( 'readonly' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25146:1: ( ( '!derived' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25147:1: ( '!derived' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26851:1: ( ( 'readonly' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26852:1: ( 'readonly' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25148:1: ( '!derived' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25149:1: '!derived'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26853:1: ( 'readonly' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26854:1: 'readonly'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0()); 
             }
-            match(input,120,FollowSets002.FOLLOW_120_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_351187); if (state.failed) return ;
+            match(input,43,FollowSets002.FOLLOW_43_in_rule__ReferenceCS__IsReadonlyAssignment_6_3_0_055974); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0()); 
             }
 
             }
@@ -73656,40 +78419,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_3"
+    // $ANTLR end "rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25164:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_4 : ( ( 'ordered' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_4() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsResolveAssignment_6_4_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26869:1: rule__ReferenceCS__IsResolveAssignment_6_4_0_0 : ( ( 'resolve' ) ) ;
+    public final void rule__ReferenceCS__IsResolveAssignment_6_4_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25168:1: ( ( ( 'ordered' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25169:1: ( ( 'ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26873:1: ( ( ( 'resolve' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26874:1: ( ( 'resolve' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25169:1: ( ( 'ordered' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25170:1: ( 'ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26874:1: ( ( 'resolve' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26875:1: ( 'resolve' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25171:1: ( 'ordered' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25172:1: 'ordered'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26876:1: ( 'resolve' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26877:1: 'resolve'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0()); 
             }
-            match(input,37,FollowSets002.FOLLOW_37_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_451231); if (state.failed) return ;
+            match(input,45,FollowSets002.FOLLOW_45_in_rule__ReferenceCS__IsResolveAssignment_6_4_0_056018); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0()); 
             }
 
             }
@@ -73709,40 +78472,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_4"
+    // $ANTLR end "rule__ReferenceCS__IsResolveAssignment_6_4_0_0"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_5"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25187:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_5 : ( ( '!ordered' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_5() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsTransientAssignment_6_5_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26892:1: rule__ReferenceCS__IsTransientAssignment_6_5_0_0 : ( ( 'transient' ) ) ;
+    public final void rule__ReferenceCS__IsTransientAssignment_6_5_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25191:1: ( ( ( '!ordered' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25192:1: ( ( '!ordered' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26896:1: ( ( ( 'transient' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26897:1: ( ( 'transient' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25192:1: ( ( '!ordered' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25193:1: ( '!ordered' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26897:1: ( ( 'transient' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26898:1: ( 'transient' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25194:1: ( '!ordered' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25195:1: '!ordered'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26899:1: ( 'transient' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26900:1: 'transient'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0()); 
             }
-            match(input,122,FollowSets002.FOLLOW_122_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_551275); if (state.failed) return ;
+            match(input,49,FollowSets002.FOLLOW_49_in_rule__ReferenceCS__IsTransientAssignment_6_5_0_056062); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0()); 
             }
 
             }
@@ -73762,40 +78525,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_5"
+    // $ANTLR end "rule__ReferenceCS__IsTransientAssignment_6_5_0_0"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25210:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_6 : ( ( 'readonly' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_6() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26915:1: rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0 : ( ( '!unique' ) ) ;
+    public final void rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25214:1: ( ( ( 'readonly' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25215:1: ( ( 'readonly' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26919:1: ( ( ( '!unique' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26920:1: ( ( '!unique' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25215:1: ( ( 'readonly' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25216:1: ( 'readonly' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26920:1: ( ( '!unique' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26921:1: ( '!unique' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25217:1: ( 'readonly' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25218:1: 'readonly'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26922:1: ( '!unique' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26923:1: '!unique'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0()); 
             }
-            match(input,43,FollowSets002.FOLLOW_43_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_651319); if (state.failed) return ;
+            match(input,129,FollowSets002.FOLLOW_129_in_rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_056106); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0()); 
             }
 
             }
@@ -73815,40 +78578,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_6"
+    // $ANTLR end "rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_7"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25233:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_7 : ( ( '!readonly' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_7() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26938:1: rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0 : ( ( 'unsettable' ) ) ;
+    public final void rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25237:1: ( ( ( '!readonly' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25238:1: ( ( '!readonly' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26942:1: ( ( ( 'unsettable' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26943:1: ( ( 'unsettable' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25238:1: ( ( '!readonly' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25239:1: ( '!readonly' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26943:1: ( ( 'unsettable' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26944:1: ( 'unsettable' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25240:1: ( '!readonly' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25241:1: '!readonly'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26945:1: ( 'unsettable' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26946:1: 'unsettable'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0()); 
             }
-            match(input,123,FollowSets002.FOLLOW_123_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_751363); if (state.failed) return ;
+            match(input,51,FollowSets002.FOLLOW_51_in_rule__ReferenceCS__IsUnsettableAssignment_6_7_0_056150); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0()); 
             }
 
             }
@@ -73868,40 +78631,40 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_7"
+    // $ANTLR end "rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0"
 
 
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_8"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25256:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_8 : ( ( 'resolve' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_8() throws RecognitionException {
+    // $ANTLR start "rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0"
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26961:1: rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0 : ( ( 'volatile' ) ) ;
+    public final void rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25260:1: ( ( ( 'resolve' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25261:1: ( ( 'resolve' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26965:1: ( ( ( 'volatile' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26966:1: ( ( 'volatile' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25261:1: ( ( 'resolve' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25262:1: ( 'resolve' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26966:1: ( ( 'volatile' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26967:1: ( 'volatile' )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25263:1: ( 'resolve' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25264:1: 'resolve'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26968:1: ( 'volatile' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26969:1: 'volatile'
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0()); 
+               before(grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0()); 
             }
-            match(input,45,FollowSets002.FOLLOW_45_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_851407); if (state.failed) return ;
+            match(input,52,FollowSets002.FOLLOW_52_in_rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_056194); if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0()); 
             }
 
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0()); 
+               after(grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0()); 
             }
 
             }
@@ -73921,503 +78684,26 @@
         }
         return ;
     }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_8"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_9"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25279:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_9 : ( ( '!resolve' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_9() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25283:1: ( ( ( '!resolve' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25284:1: ( ( '!resolve' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25284:1: ( ( '!resolve' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25285:1: ( '!resolve' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25286:1: ( '!resolve' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25287:1: '!resolve'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0()); 
-            }
-            match(input,130,FollowSets002.FOLLOW_130_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_951451); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_9"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_10"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25302:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_10 : ( ( 'transient' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_10() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25306:1: ( ( ( 'transient' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25307:1: ( ( 'transient' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25307:1: ( ( 'transient' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25308:1: ( 'transient' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25309:1: ( 'transient' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25310:1: 'transient'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0()); 
-            }
-            match(input,49,FollowSets002.FOLLOW_49_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1051495); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_10"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_11"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25325:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_11 : ( ( '!transient' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_11() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25329:1: ( ( ( '!transient' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25330:1: ( ( '!transient' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25330:1: ( ( '!transient' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25331:1: ( '!transient' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25332:1: ( '!transient' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25333:1: '!transient'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0()); 
-            }
-            match(input,124,FollowSets002.FOLLOW_124_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1151539); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_11"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_12"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25348:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_12 : ( ( 'unique' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_12() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25352:1: ( ( ( 'unique' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25353:1: ( ( 'unique' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25353:1: ( ( 'unique' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25354:1: ( 'unique' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25355:1: ( 'unique' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25356:1: 'unique'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0()); 
-            }
-            match(input,50,FollowSets002.FOLLOW_50_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1251583); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_12"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_13"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25371:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_13 : ( ( '!unique' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_13() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25375:1: ( ( ( '!unique' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25376:1: ( ( '!unique' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25376:1: ( ( '!unique' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25377:1: ( '!unique' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25378:1: ( '!unique' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25379:1: '!unique'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0()); 
-            }
-            match(input,125,FollowSets002.FOLLOW_125_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1351627); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_13"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_14"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25394:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_14 : ( ( 'unsettable' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_14() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25398:1: ( ( ( 'unsettable' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25399:1: ( ( 'unsettable' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25399:1: ( ( 'unsettable' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25400:1: ( 'unsettable' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25401:1: ( 'unsettable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25402:1: 'unsettable'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0()); 
-            }
-            match(input,51,FollowSets002.FOLLOW_51_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1451671); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_14"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_15"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25417:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_15 : ( ( '!unsettable' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_15() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25421:1: ( ( ( '!unsettable' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25422:1: ( ( '!unsettable' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25422:1: ( ( '!unsettable' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25423:1: ( '!unsettable' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25424:1: ( '!unsettable' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25425:1: '!unsettable'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0()); 
-            }
-            match(input,126,FollowSets002.FOLLOW_126_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1551715); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_15"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_16"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25440:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_16 : ( ( 'volatile' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_16() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25444:1: ( ( ( 'volatile' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25445:1: ( ( 'volatile' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25445:1: ( ( 'volatile' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25446:1: ( 'volatile' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25447:1: ( 'volatile' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25448:1: 'volatile'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0()); 
-            }
-            match(input,52,FollowSets002.FOLLOW_52_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1651759); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_16"
-
-
-    // $ANTLR start "rule__ReferenceCS__QualifiersAssignment_6_1_0_17"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25463:1: rule__ReferenceCS__QualifiersAssignment_6_1_0_17 : ( ( '!volatile' ) ) ;
-    public final void rule__ReferenceCS__QualifiersAssignment_6_1_0_17() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25467:1: ( ( ( '!volatile' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25468:1: ( ( '!volatile' ) )
-            {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25468:1: ( ( '!volatile' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25469:1: ( '!volatile' )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0()); 
-            }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25470:1: ( '!volatile' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25471:1: '!volatile'
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0()); 
-            }
-            match(input,127,FollowSets002.FOLLOW_127_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1751803); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0()); 
-            }
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ReferenceCS__QualifiersAssignment_6_1_0_17"
+    // $ANTLR end "rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0"
 
 
     // $ANTLR start "rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25486:1: rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26984:1: rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0 : ( ruleAnnotationElementCS ) ;
     public final void rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25490:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25491:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26988:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26989:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25491:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25492:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26989:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26990:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_7_0_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_051842);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_056233);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -74447,28 +78733,28 @@
 
 
     // $ANTLR start "rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25501:1: rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 : ( ( ruleUnrestrictedName ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26999:1: rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1 : ( ( ruleUnrestrictedName ) ) ;
     public final void rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25505:1: ( ( ( ruleUnrestrictedName ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25506:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27003:1: ( ( ( ruleUnrestrictedName ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27004:1: ( ( ruleUnrestrictedName ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25506:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25507:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27004:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27005:1: ( ruleUnrestrictedName )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getReferredKeysPropertyCrossReference_7_0_1_1_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25508:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25509:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27006:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27007:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getReferredKeysPropertyUnrestrictedNameParserRuleCall_7_0_1_1_1_0_1()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_151877);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_156268);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -74504,28 +78790,28 @@
 
 
     // $ANTLR start "rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25520:1: rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 : ( ( ruleUnrestrictedName ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27018:1: rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1 : ( ( ruleUnrestrictedName ) ) ;
     public final void rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25524:1: ( ( ( ruleUnrestrictedName ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25525:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27022:1: ( ( ( ruleUnrestrictedName ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27023:1: ( ( ruleUnrestrictedName ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25525:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25526:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27023:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27024:1: ( ruleUnrestrictedName )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getReferredKeysPropertyCrossReference_7_0_1_1_2_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25527:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25528:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27025:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27026:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getReferredKeysPropertyUnrestrictedNameParserRuleCall_7_0_1_1_2_1_0_1()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_151916);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_156307);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -74561,22 +78847,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25539:1: rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27037:1: rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3 : ( ruleSpecificationCS ) ;
     public final void rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25543:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25544:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27041:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27042:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25544:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25545:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27042:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27043:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_7_0_1_2_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_351951);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_356342);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -74606,22 +78892,22 @@
 
 
     // $ANTLR start "rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25554:1: rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 : ( ruleSpecificationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27052:1: rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3 : ( ruleSpecificationCS ) ;
     public final void rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25558:1: ( ( ruleSpecificationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25559:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27056:1: ( ( ruleSpecificationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27057:1: ( ruleSpecificationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25559:1: ( ruleSpecificationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25560:1: ruleSpecificationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27057:1: ( ruleSpecificationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27058:1: ruleSpecificationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferenceCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_7_0_1_3_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_351982);
+            pushFollow(FollowSets002.FOLLOW_ruleSpecificationCS_in_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_356373);
             ruleSpecificationCS();
 
             state._fsp--;
@@ -74651,22 +78937,22 @@
 
 
     // $ANTLR start "rule__SpecificationCS__OwnedExpressionAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25569:1: rule__SpecificationCS__OwnedExpressionAssignment_0 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27067:1: rule__SpecificationCS__OwnedExpressionAssignment_0 : ( ruleExpCS ) ;
     public final void rule__SpecificationCS__OwnedExpressionAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25573:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25574:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27071:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27072:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25574:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25575:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27072:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27073:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSpecificationCSAccess().getOwnedExpressionExpCSParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__SpecificationCS__OwnedExpressionAssignment_052013);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__SpecificationCS__OwnedExpressionAssignment_056404);
             ruleExpCS();
 
             state._fsp--;
@@ -74696,22 +78982,22 @@
 
 
     // $ANTLR start "rule__SpecificationCS__ExprStringAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25584:1: rule__SpecificationCS__ExprStringAssignment_1 : ( RULE_UNQUOTED_STRING ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27082:1: rule__SpecificationCS__ExprStringAssignment_1 : ( RULE_UNQUOTED_STRING ) ;
     public final void rule__SpecificationCS__ExprStringAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25588:1: ( ( RULE_UNQUOTED_STRING ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25589:1: ( RULE_UNQUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27086:1: ( ( RULE_UNQUOTED_STRING ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27087:1: ( RULE_UNQUOTED_STRING )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25589:1: ( RULE_UNQUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25590:1: RULE_UNQUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27087:1: ( RULE_UNQUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27088:1: RULE_UNQUOTED_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSpecificationCSAccess().getExprStringUNQUOTED_STRINGTerminalRuleCall_1_0()); 
             }
-            match(input,RULE_UNQUOTED_STRING,FollowSets002.FOLLOW_RULE_UNQUOTED_STRING_in_rule__SpecificationCS__ExprStringAssignment_152044); if (state.failed) return ;
+            match(input,RULE_UNQUOTED_STRING,FollowSets002.FOLLOW_RULE_UNQUOTED_STRING_in_rule__SpecificationCS__ExprStringAssignment_156435); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSpecificationCSAccess().getExprStringUNQUOTED_STRINGTerminalRuleCall_1_0()); 
             }
@@ -74737,28 +79023,28 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__IsAbstractAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25599:1: rule__StructuredClassCS__IsAbstractAssignment_0 : ( ( 'abstract' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27097:1: rule__StructuredClassCS__IsAbstractAssignment_0 : ( ( 'abstract' ) ) ;
     public final void rule__StructuredClassCS__IsAbstractAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25603:1: ( ( ( 'abstract' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25604:1: ( ( 'abstract' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27101:1: ( ( ( 'abstract' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27102:1: ( ( 'abstract' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25604:1: ( ( 'abstract' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25605:1: ( 'abstract' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27102:1: ( ( 'abstract' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27103:1: ( 'abstract' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getIsAbstractAbstractKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25606:1: ( 'abstract' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25607:1: 'abstract'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27104:1: ( 'abstract' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27105:1: 'abstract'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getIsAbstractAbstractKeyword_0_0()); 
             }
-            match(input,17,FollowSets002.FOLLOW_17_in_rule__StructuredClassCS__IsAbstractAssignment_052080); if (state.failed) return ;
+            match(input,17,FollowSets002.FOLLOW_17_in_rule__StructuredClassCS__IsAbstractAssignment_056471); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getIsAbstractAbstractKeyword_0_0()); 
             }
@@ -74790,22 +79076,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__NameAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25622:1: rule__StructuredClassCS__NameAssignment_2 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27120:1: rule__StructuredClassCS__NameAssignment_2 : ( ruleUnrestrictedName ) ;
     public final void rule__StructuredClassCS__NameAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25626:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25627:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27124:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27125:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25627:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25628:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27125:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27126:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__StructuredClassCS__NameAssignment_252119);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__StructuredClassCS__NameAssignment_256510);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -74835,22 +79121,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__OwnedSignatureAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25637:1: rule__StructuredClassCS__OwnedSignatureAssignment_3 : ( ruleTemplateSignatureCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27135:1: rule__StructuredClassCS__OwnedSignatureAssignment_3 : ( ruleTemplateSignatureCS ) ;
     public final void rule__StructuredClassCS__OwnedSignatureAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25641:1: ( ( ruleTemplateSignatureCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25642:1: ( ruleTemplateSignatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27139:1: ( ( ruleTemplateSignatureCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27140:1: ( ruleTemplateSignatureCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25642:1: ( ruleTemplateSignatureCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25643:1: ruleTemplateSignatureCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27140:1: ( ruleTemplateSignatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27141:1: ruleTemplateSignatureCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedSignatureTemplateSignatureCSParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTemplateSignatureCS_in_rule__StructuredClassCS__OwnedSignatureAssignment_352150);
+            pushFollow(FollowSets002.FOLLOW_ruleTemplateSignatureCS_in_rule__StructuredClassCS__OwnedSignatureAssignment_356541);
             ruleTemplateSignatureCS();
 
             state._fsp--;
@@ -74880,22 +79166,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25652:1: rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27150:1: rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1 : ( ruleTypedRefCS ) ;
     public final void rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25656:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25657:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27154:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27155:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25657:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25658:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27155:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27156:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedSuperTypesTypedRefCSParserRuleCall_4_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_152181);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_156572);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -74925,22 +79211,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25667:1: rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27165:1: rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1 : ( ruleTypedRefCS ) ;
     public final void rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25671:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25672:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27169:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27170:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25672:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25673:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27170:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27171:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedSuperTypesTypedRefCSParserRuleCall_4_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_152212);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_156603);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -74970,22 +79256,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__InstanceClassNameAssignment_5_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25682:1: rule__StructuredClassCS__InstanceClassNameAssignment_5_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27180:1: rule__StructuredClassCS__InstanceClassNameAssignment_5_1 : ( RULE_SINGLE_QUOTED_STRING ) ;
     public final void rule__StructuredClassCS__InstanceClassNameAssignment_5_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25686:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25687:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27184:1: ( ( RULE_SINGLE_QUOTED_STRING ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27185:1: ( RULE_SINGLE_QUOTED_STRING )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25687:1: ( RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25688:1: RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27185:1: ( RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27186:1: RULE_SINGLE_QUOTED_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getInstanceClassNameSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0()); 
             }
-            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__StructuredClassCS__InstanceClassNameAssignment_5_152243); if (state.failed) return ;
+            match(input,RULE_SINGLE_QUOTED_STRING,FollowSets002.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__StructuredClassCS__InstanceClassNameAssignment_5_156634); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getInstanceClassNameSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0()); 
             }
@@ -75011,28 +79297,28 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__IsInterfaceAssignment_6_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25697:1: rule__StructuredClassCS__IsInterfaceAssignment_6_1 : ( ( 'interface' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27195:1: rule__StructuredClassCS__IsInterfaceAssignment_6_1 : ( ( 'interface' ) ) ;
     public final void rule__StructuredClassCS__IsInterfaceAssignment_6_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25701:1: ( ( ( 'interface' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25702:1: ( ( 'interface' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27199:1: ( ( ( 'interface' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27200:1: ( ( 'interface' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25702:1: ( ( 'interface' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25703:1: ( 'interface' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27200:1: ( ( 'interface' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27201:1: ( 'interface' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getIsInterfaceInterfaceKeyword_6_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25704:1: ( 'interface' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25705:1: 'interface'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27202:1: ( 'interface' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27203:1: 'interface'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getIsInterfaceInterfaceKeyword_6_1_0()); 
             }
-            match(input,32,FollowSets002.FOLLOW_32_in_rule__StructuredClassCS__IsInterfaceAssignment_6_152279); if (state.failed) return ;
+            match(input,32,FollowSets002.FOLLOW_32_in_rule__StructuredClassCS__IsInterfaceAssignment_6_156670); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStructuredClassCSAccess().getIsInterfaceInterfaceKeyword_6_1_0()); 
             }
@@ -75064,22 +79350,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25720:1: rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 : ( ruleAnnotationElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27218:1: rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0 : ( ruleAnnotationElementCS ) ;
     public final void rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25724:1: ( ( ruleAnnotationElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25725:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27222:1: ( ( ruleAnnotationElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27223:1: ( ruleAnnotationElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25725:1: ( ruleAnnotationElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25726:1: ruleAnnotationElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27223:1: ( ruleAnnotationElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27224:1: ruleAnnotationElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_7_0_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_052318);
+            pushFollow(FollowSets002.FOLLOW_ruleAnnotationElementCS_in_rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_056709);
             ruleAnnotationElementCS();
 
             state._fsp--;
@@ -75109,22 +79395,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25735:1: rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 : ( ruleOperationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27233:1: rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1 : ( ruleOperationCS ) ;
     public final void rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25739:1: ( ( ruleOperationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25740:1: ( ruleOperationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27237:1: ( ( ruleOperationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27238:1: ( ruleOperationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25740:1: ( ruleOperationCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25741:1: ruleOperationCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27238:1: ( ruleOperationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27239:1: ruleOperationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedOperationsOperationCSParserRuleCall_7_0_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleOperationCS_in_rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_152349);
+            pushFollow(FollowSets002.FOLLOW_ruleOperationCS_in_rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_156740);
             ruleOperationCS();
 
             state._fsp--;
@@ -75154,22 +79440,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25750:1: rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 : ( ruleStructuralFeatureCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27248:1: rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2 : ( ruleStructuralFeatureCS ) ;
     public final void rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25754:1: ( ( ruleStructuralFeatureCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25755:1: ( ruleStructuralFeatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27252:1: ( ( ruleStructuralFeatureCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27253:1: ( ruleStructuralFeatureCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25755:1: ( ruleStructuralFeatureCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25756:1: ruleStructuralFeatureCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27253:1: ( ruleStructuralFeatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27254:1: ruleStructuralFeatureCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedPropertiesStructuralFeatureCSParserRuleCall_7_0_1_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleStructuralFeatureCS_in_rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_252380);
+            pushFollow(FollowSets002.FOLLOW_ruleStructuralFeatureCS_in_rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_256771);
             ruleStructuralFeatureCS();
 
             state._fsp--;
@@ -75199,22 +79485,22 @@
 
 
     // $ANTLR start "rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25765:1: rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 : ( ruleInvariantConstraintCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27263:1: rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3 : ( ruleInvariantConstraintCS ) ;
     public final void rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25769:1: ( ( ruleInvariantConstraintCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25770:1: ( ruleInvariantConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27267:1: ( ( ruleInvariantConstraintCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27268:1: ( ruleInvariantConstraintCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25770:1: ( ruleInvariantConstraintCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25771:1: ruleInvariantConstraintCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27268:1: ( ruleInvariantConstraintCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27269:1: ruleInvariantConstraintCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStructuredClassCSAccess().getOwnedConstraintsInvariantConstraintCSParserRuleCall_7_0_1_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleInvariantConstraintCS_in_rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_352411);
+            pushFollow(FollowSets002.FOLLOW_ruleInvariantConstraintCS_in_rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_356802);
             ruleInvariantConstraintCS();
 
             state._fsp--;
@@ -75244,22 +79530,22 @@
 
 
     // $ANTLR start "rule__SysMLCS__OwnedDetailsAssignment_2_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25780:1: rule__SysMLCS__OwnedDetailsAssignment_2_0_0 : ( ruleDetailCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27278:1: rule__SysMLCS__OwnedDetailsAssignment_2_0_0 : ( ruleDetailCS ) ;
     public final void rule__SysMLCS__OwnedDetailsAssignment_2_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25784:1: ( ( ruleDetailCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25785:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27282:1: ( ( ruleDetailCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27283:1: ( ruleDetailCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25785:1: ( ruleDetailCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25786:1: ruleDetailCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27283:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27284:1: ruleDetailCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getOwnedDetailsDetailCSParserRuleCall_2_0_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__SysMLCS__OwnedDetailsAssignment_2_0_052442);
+            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__SysMLCS__OwnedDetailsAssignment_2_0_056833);
             ruleDetailCS();
 
             state._fsp--;
@@ -75289,22 +79575,22 @@
 
 
     // $ANTLR start "rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25795:1: rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 : ( ruleDetailCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27293:1: rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0 : ( ruleDetailCS ) ;
     public final void rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25799:1: ( ( ruleDetailCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25800:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27297:1: ( ( ruleDetailCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27298:1: ( ruleDetailCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25800:1: ( ruleDetailCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25801:1: ruleDetailCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27298:1: ( ruleDetailCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27299:1: ruleDetailCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSysMLCSAccess().getOwnedDetailsDetailCSParserRuleCall_2_1_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__SysMLCS__OwnedDetailsAssignment_2_1_1_052473);
+            pushFollow(FollowSets002.FOLLOW_ruleDetailCS_in_rule__SysMLCS__OwnedDetailsAssignment_2_1_1_056864);
             ruleDetailCS();
 
             state._fsp--;
@@ -75334,22 +79620,22 @@
 
 
     // $ANTLR start "rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25810:1: rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 : ( ruleMultiplicityCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27308:1: rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1 : ( ruleMultiplicityCS ) ;
     public final void rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25814:1: ( ( ruleMultiplicityCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25815:1: ( ruleMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27312:1: ( ( ruleMultiplicityCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27313:1: ( ruleMultiplicityCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25815:1: ( ruleMultiplicityCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25816:1: ruleMultiplicityCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27313:1: ( ruleMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27314:1: ruleMultiplicityCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypedMultiplicityRefCSAccess().getOwnedMultiplicityMultiplicityCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleMultiplicityCS_in_rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_152504);
+            pushFollow(FollowSets002.FOLLOW_ruleMultiplicityCS_in_rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_156895);
             ruleMultiplicityCS();
 
             state._fsp--;
@@ -75379,22 +79665,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25825:1: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 : ( ruleTemplateParameterSubstitutionCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27323:1: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1 : ( ruleTemplateParameterSubstitutionCS ) ;
     public final void rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25829:1: ( ( ruleTemplateParameterSubstitutionCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25830:1: ( ruleTemplateParameterSubstitutionCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27327:1: ( ( ruleTemplateParameterSubstitutionCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27328:1: ( ruleTemplateParameterSubstitutionCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25830:1: ( ruleTemplateParameterSubstitutionCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25831:1: ruleTemplateParameterSubstitutionCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27328:1: ( ruleTemplateParameterSubstitutionCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27329:1: ruleTemplateParameterSubstitutionCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsTemplateParameterSubstitutionCSParserRuleCall_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_152535);
+            pushFollow(FollowSets002.FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_156926);
             ruleTemplateParameterSubstitutionCS();
 
             state._fsp--;
@@ -75424,22 +79710,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25840:1: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 : ( ruleTemplateParameterSubstitutionCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27338:1: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1 : ( ruleTemplateParameterSubstitutionCS ) ;
     public final void rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25844:1: ( ( ruleTemplateParameterSubstitutionCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25845:1: ( ruleTemplateParameterSubstitutionCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27342:1: ( ( ruleTemplateParameterSubstitutionCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27343:1: ( ruleTemplateParameterSubstitutionCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25845:1: ( ruleTemplateParameterSubstitutionCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25846:1: ruleTemplateParameterSubstitutionCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27343:1: ( ruleTemplateParameterSubstitutionCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27344:1: ruleTemplateParameterSubstitutionCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsTemplateParameterSubstitutionCSParserRuleCall_0_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_152566);
+            pushFollow(FollowSets002.FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_156957);
             ruleTemplateParameterSubstitutionCS();
 
             state._fsp--;
@@ -75469,22 +79755,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25855:1: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 : ( ruleTemplateParameterSubstitutionCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27353:1: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1 : ( ruleTemplateParameterSubstitutionCS ) ;
     public final void rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25859:1: ( ( ruleTemplateParameterSubstitutionCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25860:1: ( ruleTemplateParameterSubstitutionCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27357:1: ( ( ruleTemplateParameterSubstitutionCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27358:1: ( ruleTemplateParameterSubstitutionCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25860:1: ( ruleTemplateParameterSubstitutionCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25861:1: ruleTemplateParameterSubstitutionCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27358:1: ( ruleTemplateParameterSubstitutionCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27359:1: ruleTemplateParameterSubstitutionCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsTemplateParameterSubstitutionCSParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_152597);
+            pushFollow(FollowSets002.FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_156988);
             ruleTemplateParameterSubstitutionCS();
 
             state._fsp--;
@@ -75514,22 +79800,22 @@
 
 
     // $ANTLR start "rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25870:1: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 : ( ruleTemplateParameterSubstitutionCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27368:1: rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1 : ( ruleTemplateParameterSubstitutionCS ) ;
     public final void rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25874:1: ( ( ruleTemplateParameterSubstitutionCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25875:1: ( ruleTemplateParameterSubstitutionCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27372:1: ( ( ruleTemplateParameterSubstitutionCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27373:1: ( ruleTemplateParameterSubstitutionCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25875:1: ( ruleTemplateParameterSubstitutionCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25876:1: ruleTemplateParameterSubstitutionCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27373:1: ( ruleTemplateParameterSubstitutionCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27374:1: ruleTemplateParameterSubstitutionCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsTemplateParameterSubstitutionCSParserRuleCall_1_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_152628);
+            pushFollow(FollowSets002.FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_157019);
             ruleTemplateParameterSubstitutionCS();
 
             state._fsp--;
@@ -75559,22 +79845,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__OwnedParametersAssignment_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25885:1: rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 : ( ruleTypeParameterCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27383:1: rule__TemplateSignatureCS__OwnedParametersAssignment_0_1 : ( ruleTypeParameterCS ) ;
     public final void rule__TemplateSignatureCS__OwnedParametersAssignment_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25889:1: ( ( ruleTypeParameterCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25890:1: ( ruleTypeParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27387:1: ( ( ruleTypeParameterCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27388:1: ( ruleTypeParameterCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25890:1: ( ruleTypeParameterCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25891:1: ruleTypeParameterCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27388:1: ( ruleTypeParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27389:1: ruleTypeParameterCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersTypeParameterCSParserRuleCall_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_0_152659);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_0_157050);
             ruleTypeParameterCS();
 
             state._fsp--;
@@ -75604,22 +79890,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25900:1: rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 : ( ruleTypeParameterCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27398:1: rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1 : ( ruleTypeParameterCS ) ;
     public final void rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25904:1: ( ( ruleTypeParameterCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25905:1: ( ruleTypeParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27402:1: ( ( ruleTypeParameterCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27403:1: ( ruleTypeParameterCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25905:1: ( ruleTypeParameterCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25906:1: ruleTypeParameterCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27403:1: ( ruleTypeParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27404:1: ruleTypeParameterCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersTypeParameterCSParserRuleCall_0_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_152690);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_157081);
             ruleTypeParameterCS();
 
             state._fsp--;
@@ -75649,22 +79935,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__OwnedParametersAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25915:1: rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 : ( ruleTypeParameterCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27413:1: rule__TemplateSignatureCS__OwnedParametersAssignment_1_1 : ( ruleTypeParameterCS ) ;
     public final void rule__TemplateSignatureCS__OwnedParametersAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25919:1: ( ( ruleTypeParameterCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25920:1: ( ruleTypeParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27417:1: ( ( ruleTypeParameterCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27418:1: ( ruleTypeParameterCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25920:1: ( ruleTypeParameterCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25921:1: ruleTypeParameterCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27418:1: ( ruleTypeParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27419:1: ruleTypeParameterCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersTypeParameterCSParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_1_152721);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_1_157112);
             ruleTypeParameterCS();
 
             state._fsp--;
@@ -75694,22 +79980,22 @@
 
 
     // $ANTLR start "rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25930:1: rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 : ( ruleTypeParameterCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27428:1: rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1 : ( ruleTypeParameterCS ) ;
     public final void rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25934:1: ( ( ruleTypeParameterCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25935:1: ( ruleTypeParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27432:1: ( ( ruleTypeParameterCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27433:1: ( ruleTypeParameterCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25935:1: ( ruleTypeParameterCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25936:1: ruleTypeParameterCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27433:1: ( ruleTypeParameterCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27434:1: ruleTypeParameterCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersTypeParameterCSParserRuleCall_1_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_152752);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_157143);
             ruleTypeParameterCS();
 
             state._fsp--;
@@ -75739,22 +80025,22 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__OwnedPathElementsAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25946:1: rule__URIPathNameCS__OwnedPathElementsAssignment_0 : ( ruleURIFirstPathElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27444:1: rule__URIPathNameCS__OwnedPathElementsAssignment_0 : ( ruleURIFirstPathElementCS ) ;
     public final void rule__URIPathNameCS__OwnedPathElementsAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25950:1: ( ( ruleURIFirstPathElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25951:1: ( ruleURIFirstPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27448:1: ( ( ruleURIFirstPathElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27449:1: ( ruleURIFirstPathElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25951:1: ( ruleURIFirstPathElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25952:1: ruleURIFirstPathElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27449:1: ( ruleURIFirstPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27450:1: ruleURIFirstPathElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIPathNameCSAccess().getOwnedPathElementsURIFirstPathElementCSParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleURIFirstPathElementCS_in_rule__URIPathNameCS__OwnedPathElementsAssignment_052784);
+            pushFollow(FollowSets002.FOLLOW_ruleURIFirstPathElementCS_in_rule__URIPathNameCS__OwnedPathElementsAssignment_057175);
             ruleURIFirstPathElementCS();
 
             state._fsp--;
@@ -75784,22 +80070,22 @@
 
 
     // $ANTLR start "rule__URIPathNameCS__OwnedPathElementsAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25961:1: rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 : ( ruleNextPathElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27459:1: rule__URIPathNameCS__OwnedPathElementsAssignment_1_1 : ( ruleNextPathElementCS ) ;
     public final void rule__URIPathNameCS__OwnedPathElementsAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25965:1: ( ( ruleNextPathElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25966:1: ( ruleNextPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27463:1: ( ( ruleNextPathElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27464:1: ( ruleNextPathElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25966:1: ( ruleNextPathElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25967:1: ruleNextPathElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27464:1: ( ruleNextPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27465:1: ruleNextPathElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIPathNameCSAccess().getOwnedPathElementsNextPathElementCSParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNextPathElementCS_in_rule__URIPathNameCS__OwnedPathElementsAssignment_1_152815);
+            pushFollow(FollowSets002.FOLLOW_ruleNextPathElementCS_in_rule__URIPathNameCS__OwnedPathElementsAssignment_1_157206);
             ruleNextPathElementCS();
 
             state._fsp--;
@@ -75829,28 +80115,28 @@
 
 
     // $ANTLR start "rule__URIFirstPathElementCS__ReferredElementAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25976:1: rule__URIFirstPathElementCS__ReferredElementAssignment_0 : ( ( ruleUnrestrictedName ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27474:1: rule__URIFirstPathElementCS__ReferredElementAssignment_0 : ( ( ruleUnrestrictedName ) ) ;
     public final void rule__URIFirstPathElementCS__ReferredElementAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25980:1: ( ( ( ruleUnrestrictedName ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25981:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27478:1: ( ( ( ruleUnrestrictedName ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27479:1: ( ( ruleUnrestrictedName ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25981:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25982:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27479:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27480:1: ( ruleUnrestrictedName )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIFirstPathElementCSAccess().getReferredElementNamedElementCrossReference_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25983:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25984:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27481:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27482:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIFirstPathElementCSAccess().getReferredElementNamedElementUnrestrictedNameParserRuleCall_0_0_1()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__URIFirstPathElementCS__ReferredElementAssignment_052850);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__URIFirstPathElementCS__ReferredElementAssignment_057241);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -75886,28 +80172,28 @@
 
 
     // $ANTLR start "rule__URIFirstPathElementCS__ReferredElementAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25995:1: rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 : ( ( ruleURI ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27493:1: rule__URIFirstPathElementCS__ReferredElementAssignment_1_1 : ( ( ruleURI ) ) ;
     public final void rule__URIFirstPathElementCS__ReferredElementAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25999:1: ( ( ( ruleURI ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26000:1: ( ( ruleURI ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27497:1: ( ( ( ruleURI ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27498:1: ( ( ruleURI ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26000:1: ( ( ruleURI ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26001:1: ( ruleURI )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27498:1: ( ( ruleURI ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27499:1: ( ruleURI )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIFirstPathElementCSAccess().getReferredElementNamespaceCrossReference_1_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26002:1: ( ruleURI )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26003:1: ruleURI
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27500:1: ( ruleURI )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27501:1: ruleURI
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getURIFirstPathElementCSAccess().getReferredElementNamespaceURIParserRuleCall_1_1_0_1()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleURI_in_rule__URIFirstPathElementCS__ReferredElementAssignment_1_152889);
+            pushFollow(FollowSets002.FOLLOW_ruleURI_in_rule__URIFirstPathElementCS__ReferredElementAssignment_1_157280);
             ruleURI();
 
             state._fsp--;
@@ -75943,22 +80229,22 @@
 
 
     // $ANTLR start "rule__PrimitiveTypeCS__NameAssignment"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26014:1: rule__PrimitiveTypeCS__NameAssignment : ( rulePrimitiveTypeIdentifier ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27512:1: rule__PrimitiveTypeCS__NameAssignment : ( rulePrimitiveTypeIdentifier ) ;
     public final void rule__PrimitiveTypeCS__NameAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26018:1: ( ( rulePrimitiveTypeIdentifier ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26019:1: ( rulePrimitiveTypeIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27516:1: ( ( rulePrimitiveTypeIdentifier ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27517:1: ( rulePrimitiveTypeIdentifier )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26019:1: ( rulePrimitiveTypeIdentifier )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26020:1: rulePrimitiveTypeIdentifier
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27517:1: ( rulePrimitiveTypeIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27518:1: rulePrimitiveTypeIdentifier
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrimitiveTypeCSAccess().getNamePrimitiveTypeIdentifierParserRuleCall_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePrimitiveTypeIdentifier_in_rule__PrimitiveTypeCS__NameAssignment52924);
+            pushFollow(FollowSets002.FOLLOW_rulePrimitiveTypeIdentifier_in_rule__PrimitiveTypeCS__NameAssignment57315);
             rulePrimitiveTypeIdentifier();
 
             state._fsp--;
@@ -75988,22 +80274,22 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__NameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26029:1: rule__CollectionTypeCS__NameAssignment_0 : ( ruleCollectionTypeIdentifier ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27527:1: rule__CollectionTypeCS__NameAssignment_0 : ( ruleCollectionTypeIdentifier ) ;
     public final void rule__CollectionTypeCS__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26033:1: ( ( ruleCollectionTypeIdentifier ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26034:1: ( ruleCollectionTypeIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27531:1: ( ( ruleCollectionTypeIdentifier ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27532:1: ( ruleCollectionTypeIdentifier )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26034:1: ( ruleCollectionTypeIdentifier )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26035:1: ruleCollectionTypeIdentifier
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27532:1: ( ruleCollectionTypeIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27533:1: ruleCollectionTypeIdentifier
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionTypeCSAccess().getNameCollectionTypeIdentifierParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleCollectionTypeIdentifier_in_rule__CollectionTypeCS__NameAssignment_052955);
+            pushFollow(FollowSets002.FOLLOW_ruleCollectionTypeIdentifier_in_rule__CollectionTypeCS__NameAssignment_057346);
             ruleCollectionTypeIdentifier();
 
             state._fsp--;
@@ -76033,22 +80319,22 @@
 
 
     // $ANTLR start "rule__CollectionTypeCS__OwnedTypeAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26044:1: rule__CollectionTypeCS__OwnedTypeAssignment_1_1 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27542:1: rule__CollectionTypeCS__OwnedTypeAssignment_1_1 : ( ruleTypeExpCS ) ;
     public final void rule__CollectionTypeCS__OwnedTypeAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26048:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26049:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27546:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27547:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26049:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26050:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27547:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27548:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionTypeCSAccess().getOwnedTypeTypeExpCSParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__CollectionTypeCS__OwnedTypeAssignment_1_152986);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__CollectionTypeCS__OwnedTypeAssignment_1_157377);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -76078,28 +80364,28 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__NameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26059:1: rule__TupleTypeCS__NameAssignment_0 : ( ( 'Tuple' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27557:1: rule__TupleTypeCS__NameAssignment_0 : ( ( 'Tuple' ) ) ;
     public final void rule__TupleTypeCS__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26063:1: ( ( ( 'Tuple' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26064:1: ( ( 'Tuple' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27561:1: ( ( ( 'Tuple' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27562:1: ( ( 'Tuple' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26064:1: ( ( 'Tuple' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26065:1: ( 'Tuple' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27562:1: ( ( 'Tuple' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27563:1: ( 'Tuple' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getNameTupleKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26066:1: ( 'Tuple' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26067:1: 'Tuple'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27564:1: ( 'Tuple' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27565:1: 'Tuple'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getNameTupleKeyword_0_0()); 
             }
-            match(input,80,FollowSets002.FOLLOW_80_in_rule__TupleTypeCS__NameAssignment_053022); if (state.failed) return ;
+            match(input,89,FollowSets002.FOLLOW_89_in_rule__TupleTypeCS__NameAssignment_057413); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getTupleTypeCSAccess().getNameTupleKeyword_0_0()); 
             }
@@ -76131,22 +80417,22 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__OwnedPartsAssignment_1_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26082:1: rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 : ( ruleTuplePartCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27580:1: rule__TupleTypeCS__OwnedPartsAssignment_1_1_0 : ( ruleTuplePartCS ) ;
     public final void rule__TupleTypeCS__OwnedPartsAssignment_1_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26086:1: ( ( ruleTuplePartCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26087:1: ( ruleTuplePartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27584:1: ( ( ruleTuplePartCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27585:1: ( ruleTuplePartCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26087:1: ( ruleTuplePartCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26088:1: ruleTuplePartCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27585:1: ( ruleTuplePartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27586:1: ruleTuplePartCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getOwnedPartsTuplePartCSParserRuleCall_1_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTuplePartCS_in_rule__TupleTypeCS__OwnedPartsAssignment_1_1_053061);
+            pushFollow(FollowSets002.FOLLOW_ruleTuplePartCS_in_rule__TupleTypeCS__OwnedPartsAssignment_1_1_057452);
             ruleTuplePartCS();
 
             state._fsp--;
@@ -76176,22 +80462,22 @@
 
 
     // $ANTLR start "rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26097:1: rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 : ( ruleTuplePartCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27595:1: rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1 : ( ruleTuplePartCS ) ;
     public final void rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26101:1: ( ( ruleTuplePartCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26102:1: ( ruleTuplePartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27599:1: ( ( ruleTuplePartCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27600:1: ( ruleTuplePartCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26102:1: ( ruleTuplePartCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26103:1: ruleTuplePartCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27600:1: ( ruleTuplePartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27601:1: ruleTuplePartCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleTypeCSAccess().getOwnedPartsTuplePartCSParserRuleCall_1_1_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTuplePartCS_in_rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_153092);
+            pushFollow(FollowSets002.FOLLOW_ruleTuplePartCS_in_rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_157483);
             ruleTuplePartCS();
 
             state._fsp--;
@@ -76221,22 +80507,22 @@
 
 
     // $ANTLR start "rule__TuplePartCS__NameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26112:1: rule__TuplePartCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27610:1: rule__TuplePartCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
     public final void rule__TuplePartCS__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26116:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26117:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27614:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27615:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26117:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26118:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27615:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27616:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTuplePartCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__TuplePartCS__NameAssignment_053123);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__TuplePartCS__NameAssignment_057514);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -76266,22 +80552,22 @@
 
 
     // $ANTLR start "rule__TuplePartCS__OwnedTypeAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26127:1: rule__TuplePartCS__OwnedTypeAssignment_2 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27625:1: rule__TuplePartCS__OwnedTypeAssignment_2 : ( ruleTypeExpCS ) ;
     public final void rule__TuplePartCS__OwnedTypeAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26131:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26132:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27629:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27630:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26132:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26133:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27630:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27631:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTuplePartCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__TuplePartCS__OwnedTypeAssignment_253154);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__TuplePartCS__OwnedTypeAssignment_257545);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -76311,22 +80597,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__OwnedTypeAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26142:1: rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 : ( ruleCollectionTypeCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27640:1: rule__CollectionLiteralExpCS__OwnedTypeAssignment_0 : ( ruleCollectionTypeCS ) ;
     public final void rule__CollectionLiteralExpCS__OwnedTypeAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26146:1: ( ( ruleCollectionTypeCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26147:1: ( ruleCollectionTypeCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27644:1: ( ( ruleCollectionTypeCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27645:1: ( ruleCollectionTypeCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26147:1: ( ruleCollectionTypeCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26148:1: ruleCollectionTypeCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27645:1: ( ruleCollectionTypeCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27646:1: ruleCollectionTypeCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getOwnedTypeCollectionTypeCSParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleCollectionTypeCS_in_rule__CollectionLiteralExpCS__OwnedTypeAssignment_053185);
+            pushFollow(FollowSets002.FOLLOW_ruleCollectionTypeCS_in_rule__CollectionLiteralExpCS__OwnedTypeAssignment_057576);
             ruleCollectionTypeCS();
 
             state._fsp--;
@@ -76356,22 +80642,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26157:1: rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 : ( ruleCollectionLiteralPartCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27655:1: rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0 : ( ruleCollectionLiteralPartCS ) ;
     public final void rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26161:1: ( ( ruleCollectionLiteralPartCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26162:1: ( ruleCollectionLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27659:1: ( ( ruleCollectionLiteralPartCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27660:1: ( ruleCollectionLiteralPartCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26162:1: ( ruleCollectionLiteralPartCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26163:1: ruleCollectionLiteralPartCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27660:1: ( ruleCollectionLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27661:1: ruleCollectionLiteralPartCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getOwnedPartsCollectionLiteralPartCSParserRuleCall_2_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleCollectionLiteralPartCS_in_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_053216);
+            pushFollow(FollowSets002.FOLLOW_ruleCollectionLiteralPartCS_in_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_057607);
             ruleCollectionLiteralPartCS();
 
             state._fsp--;
@@ -76401,22 +80687,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26172:1: rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 : ( ruleCollectionLiteralPartCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27670:1: rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1 : ( ruleCollectionLiteralPartCS ) ;
     public final void rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26176:1: ( ( ruleCollectionLiteralPartCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26177:1: ( ruleCollectionLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27674:1: ( ( ruleCollectionLiteralPartCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27675:1: ( ruleCollectionLiteralPartCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26177:1: ( ruleCollectionLiteralPartCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26178:1: ruleCollectionLiteralPartCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27675:1: ( ruleCollectionLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27676:1: ruleCollectionLiteralPartCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralExpCSAccess().getOwnedPartsCollectionLiteralPartCSParserRuleCall_2_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleCollectionLiteralPartCS_in_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_153247);
+            pushFollow(FollowSets002.FOLLOW_ruleCollectionLiteralPartCS_in_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_157638);
             ruleCollectionLiteralPartCS();
 
             state._fsp--;
@@ -76446,22 +80732,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26187:1: rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27685:1: rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0 : ( ruleExpCS ) ;
     public final void rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26191:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26192:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27689:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27690:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26192:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26193:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27690:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27691:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralPartCSAccess().getOwnedExpressionExpCSParserRuleCall_0_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_053278);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_057669);
             ruleExpCS();
 
             state._fsp--;
@@ -76491,22 +80777,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26202:1: rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27700:1: rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1 : ( ruleExpCS ) ;
     public final void rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26206:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26207:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27704:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27705:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26207:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26208:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27705:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27706:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralPartCSAccess().getOwnedLastExpressionExpCSParserRuleCall_0_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_153309);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_157700);
             ruleExpCS();
 
             state._fsp--;
@@ -76536,22 +80822,22 @@
 
 
     // $ANTLR start "rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26217:1: rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 : ( rulePatternExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27715:1: rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 : ( rulePatternExpCS ) ;
     public final void rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26221:1: ( ( rulePatternExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26222:1: ( rulePatternExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27719:1: ( ( rulePatternExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27720:1: ( rulePatternExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26222:1: ( rulePatternExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26223:1: rulePatternExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27720:1: ( rulePatternExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27721:1: rulePatternExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionLiteralPartCSAccess().getOwnedExpressionPatternExpCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePatternExpCS_in_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_153340);
+            pushFollow(FollowSets002.FOLLOW_rulePatternExpCS_in_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_157731);
             rulePatternExpCS();
 
             state._fsp--;
@@ -76581,22 +80867,22 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__OwnedTypeAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26232:1: rule__CollectionPatternCS__OwnedTypeAssignment_0 : ( ruleCollectionTypeCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27730:1: rule__CollectionPatternCS__OwnedTypeAssignment_0 : ( ruleCollectionTypeCS ) ;
     public final void rule__CollectionPatternCS__OwnedTypeAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26236:1: ( ( ruleCollectionTypeCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26237:1: ( ruleCollectionTypeCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27734:1: ( ( ruleCollectionTypeCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27735:1: ( ruleCollectionTypeCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26237:1: ( ruleCollectionTypeCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26238:1: ruleCollectionTypeCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27735:1: ( ruleCollectionTypeCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27736:1: ruleCollectionTypeCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getOwnedTypeCollectionTypeCSParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleCollectionTypeCS_in_rule__CollectionPatternCS__OwnedTypeAssignment_053371);
+            pushFollow(FollowSets002.FOLLOW_ruleCollectionTypeCS_in_rule__CollectionPatternCS__OwnedTypeAssignment_057762);
             ruleCollectionTypeCS();
 
             state._fsp--;
@@ -76626,22 +80912,22 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__OwnedPartsAssignment_2_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26247:1: rule__CollectionPatternCS__OwnedPartsAssignment_2_0 : ( rulePatternExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27745:1: rule__CollectionPatternCS__OwnedPartsAssignment_2_0 : ( rulePatternExpCS ) ;
     public final void rule__CollectionPatternCS__OwnedPartsAssignment_2_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26251:1: ( ( rulePatternExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26252:1: ( rulePatternExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27749:1: ( ( rulePatternExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27750:1: ( rulePatternExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26252:1: ( rulePatternExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26253:1: rulePatternExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27750:1: ( rulePatternExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27751:1: rulePatternExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getOwnedPartsPatternExpCSParserRuleCall_2_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePatternExpCS_in_rule__CollectionPatternCS__OwnedPartsAssignment_2_053402);
+            pushFollow(FollowSets002.FOLLOW_rulePatternExpCS_in_rule__CollectionPatternCS__OwnedPartsAssignment_2_057793);
             rulePatternExpCS();
 
             state._fsp--;
@@ -76671,22 +80957,22 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26262:1: rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 : ( rulePatternExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27760:1: rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1 : ( rulePatternExpCS ) ;
     public final void rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26266:1: ( ( rulePatternExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26267:1: ( rulePatternExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27764:1: ( ( rulePatternExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27765:1: ( rulePatternExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26267:1: ( rulePatternExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26268:1: rulePatternExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27765:1: ( rulePatternExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27766:1: rulePatternExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getOwnedPartsPatternExpCSParserRuleCall_2_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePatternExpCS_in_rule__CollectionPatternCS__OwnedPartsAssignment_2_1_153433);
+            pushFollow(FollowSets002.FOLLOW_rulePatternExpCS_in_rule__CollectionPatternCS__OwnedPartsAssignment_2_1_157824);
             rulePatternExpCS();
 
             state._fsp--;
@@ -76716,22 +81002,22 @@
 
 
     // $ANTLR start "rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26277:1: rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 : ( ruleIdentifier ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27775:1: rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1 : ( ruleIdentifier ) ;
     public final void rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26281:1: ( ( ruleIdentifier ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26282:1: ( ruleIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27779:1: ( ( ruleIdentifier ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27780:1: ( ruleIdentifier )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26282:1: ( ruleIdentifier )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26283:1: ruleIdentifier
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27780:1: ( ruleIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27781:1: ruleIdentifier
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCollectionPatternCSAccess().getRestVariableNameIdentifierParserRuleCall_2_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleIdentifier_in_rule__CollectionPatternCS__RestVariableNameAssignment_2_2_153464);
+            pushFollow(FollowSets002.FOLLOW_ruleIdentifier_in_rule__CollectionPatternCS__RestVariableNameAssignment_2_2_157855);
             ruleIdentifier();
 
             state._fsp--;
@@ -76761,28 +81047,28 @@
 
 
     // $ANTLR start "rule__ConstructorPartCS__ReferredPropertyAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26292:1: rule__ConstructorPartCS__ReferredPropertyAssignment_0 : ( ( ruleUnrestrictedName ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27790:1: rule__ConstructorPartCS__ReferredPropertyAssignment_0 : ( ( ruleUnrestrictedName ) ) ;
     public final void rule__ConstructorPartCS__ReferredPropertyAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26296:1: ( ( ( ruleUnrestrictedName ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26297:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27794:1: ( ( ( ruleUnrestrictedName ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27795:1: ( ( ruleUnrestrictedName ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26297:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26298:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27795:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27796:1: ( ruleUnrestrictedName )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstructorPartCSAccess().getReferredPropertyPropertyCrossReference_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26299:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26300:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27797:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27798:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstructorPartCSAccess().getReferredPropertyPropertyUnrestrictedNameParserRuleCall_0_0_1()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ConstructorPartCS__ReferredPropertyAssignment_053499);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__ConstructorPartCS__ReferredPropertyAssignment_057890);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -76818,25 +81104,25 @@
 
 
     // $ANTLR start "rule__ConstructorPartCS__OwnedInitExpressionAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26311:1: rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 : ( ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27809:1: rule__ConstructorPartCS__OwnedInitExpressionAssignment_2 : ( ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 ) ) ;
     public final void rule__ConstructorPartCS__OwnedInitExpressionAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26315:1: ( ( ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26316:1: ( ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27813:1: ( ( ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27814:1: ( ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26316:1: ( ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26317:1: ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27814:1: ( ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27815:1: ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstructorPartCSAccess().getOwnedInitExpressionAlternatives_2_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26318:1: ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26318:2: rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27816:1: ( rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27816:2: rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0
             {
-            pushFollow(FollowSets002.FOLLOW_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0_in_rule__ConstructorPartCS__OwnedInitExpressionAssignment_253534);
+            pushFollow(FollowSets002.FOLLOW_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0_in_rule__ConstructorPartCS__OwnedInitExpressionAssignment_257925);
             rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0();
 
             state._fsp--;
@@ -76869,22 +81155,22 @@
 
 
     // $ANTLR start "rule__PatternExpCS__PatternVariableNameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26327:1: rule__PatternExpCS__PatternVariableNameAssignment_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27825:1: rule__PatternExpCS__PatternVariableNameAssignment_0 : ( ruleUnrestrictedName ) ;
     public final void rule__PatternExpCS__PatternVariableNameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26331:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26332:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27829:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27830:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26332:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26333:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27830:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27831:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPatternExpCSAccess().getPatternVariableNameUnrestrictedNameParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PatternExpCS__PatternVariableNameAssignment_053567);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__PatternExpCS__PatternVariableNameAssignment_057958);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -76914,22 +81200,22 @@
 
 
     // $ANTLR start "rule__PatternExpCS__OwnedPatternTypeAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26342:1: rule__PatternExpCS__OwnedPatternTypeAssignment_2 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27840:1: rule__PatternExpCS__OwnedPatternTypeAssignment_2 : ( ruleTypeExpCS ) ;
     public final void rule__PatternExpCS__OwnedPatternTypeAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26346:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26347:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27844:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27845:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26347:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26348:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27845:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27846:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPatternExpCSAccess().getOwnedPatternTypeTypeExpCSParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__PatternExpCS__OwnedPatternTypeAssignment_253598);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__PatternExpCS__OwnedPatternTypeAssignment_257989);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -76959,22 +81245,22 @@
 
 
     // $ANTLR start "rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26357:1: rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27855:1: rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2 : ( ruleExpCS ) ;
     public final void rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26361:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26362:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27859:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27860:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26362:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26363:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27860:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27861:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLambdaLiteralExpCSAccess().getOwnedExpressionCSExpCSParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_253629);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_258020);
             ruleExpCS();
 
             state._fsp--;
@@ -77004,22 +81290,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__OwnedPartsAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26372:1: rule__TupleLiteralExpCS__OwnedPartsAssignment_2 : ( ruleTupleLiteralPartCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27870:1: rule__TupleLiteralExpCS__OwnedPartsAssignment_2 : ( ruleTupleLiteralPartCS ) ;
     public final void rule__TupleLiteralExpCS__OwnedPartsAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26376:1: ( ( ruleTupleLiteralPartCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26377:1: ( ruleTupleLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27874:1: ( ( ruleTupleLiteralPartCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27875:1: ( ruleTupleLiteralPartCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26377:1: ( ruleTupleLiteralPartCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26378:1: ruleTupleLiteralPartCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27875:1: ( ruleTupleLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27876:1: ruleTupleLiteralPartCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralExpCSAccess().getOwnedPartsTupleLiteralPartCSParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTupleLiteralPartCS_in_rule__TupleLiteralExpCS__OwnedPartsAssignment_253660);
+            pushFollow(FollowSets002.FOLLOW_ruleTupleLiteralPartCS_in_rule__TupleLiteralExpCS__OwnedPartsAssignment_258051);
             ruleTupleLiteralPartCS();
 
             state._fsp--;
@@ -77049,22 +81335,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26387:1: rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 : ( ruleTupleLiteralPartCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27885:1: rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1 : ( ruleTupleLiteralPartCS ) ;
     public final void rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26391:1: ( ( ruleTupleLiteralPartCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26392:1: ( ruleTupleLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27889:1: ( ( ruleTupleLiteralPartCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27890:1: ( ruleTupleLiteralPartCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26392:1: ( ruleTupleLiteralPartCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26393:1: ruleTupleLiteralPartCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27890:1: ( ruleTupleLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27891:1: ruleTupleLiteralPartCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralExpCSAccess().getOwnedPartsTupleLiteralPartCSParserRuleCall_3_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTupleLiteralPartCS_in_rule__TupleLiteralExpCS__OwnedPartsAssignment_3_153691);
+            pushFollow(FollowSets002.FOLLOW_ruleTupleLiteralPartCS_in_rule__TupleLiteralExpCS__OwnedPartsAssignment_3_158082);
             ruleTupleLiteralPartCS();
 
             state._fsp--;
@@ -77094,22 +81380,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__NameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26402:1: rule__TupleLiteralPartCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27900:1: rule__TupleLiteralPartCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
     public final void rule__TupleLiteralPartCS__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26406:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26407:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27904:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27905:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26407:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26408:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27905:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27906:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralPartCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__TupleLiteralPartCS__NameAssignment_053722);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__TupleLiteralPartCS__NameAssignment_058113);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -77139,22 +81425,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26417:1: rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27915:1: rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1 : ( ruleTypeExpCS ) ;
     public final void rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26421:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26422:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27919:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27920:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26422:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26423:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27920:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27921:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralPartCSAccess().getOwnedTypeTypeExpCSParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__TupleLiteralPartCS__OwnedTypeAssignment_1_153753);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__TupleLiteralPartCS__OwnedTypeAssignment_1_158144);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -77184,22 +81470,22 @@
 
 
     // $ANTLR start "rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26432:1: rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27930:1: rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3 : ( ruleExpCS ) ;
     public final void rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26436:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26437:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27934:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27935:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26437:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26438:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27935:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27936:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTupleLiteralPartCSAccess().getOwnedInitExpressionExpCSParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_353784);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_358175);
             ruleExpCS();
 
             state._fsp--;
@@ -77229,22 +81515,22 @@
 
 
     // $ANTLR start "rule__NumberLiteralExpCS__SymbolAssignment"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26447:1: rule__NumberLiteralExpCS__SymbolAssignment : ( ruleNUMBER_LITERAL ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27945:1: rule__NumberLiteralExpCS__SymbolAssignment : ( ruleNUMBER_LITERAL ) ;
     public final void rule__NumberLiteralExpCS__SymbolAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26451:1: ( ( ruleNUMBER_LITERAL ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26452:1: ( ruleNUMBER_LITERAL )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27949:1: ( ( ruleNUMBER_LITERAL ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27950:1: ( ruleNUMBER_LITERAL )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26452:1: ( ruleNUMBER_LITERAL )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26453:1: ruleNUMBER_LITERAL
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27950:1: ( ruleNUMBER_LITERAL )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27951:1: ruleNUMBER_LITERAL
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNumberLiteralExpCSAccess().getSymbolNUMBER_LITERALParserRuleCall_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNUMBER_LITERAL_in_rule__NumberLiteralExpCS__SymbolAssignment53815);
+            pushFollow(FollowSets002.FOLLOW_ruleNUMBER_LITERAL_in_rule__NumberLiteralExpCS__SymbolAssignment58206);
             ruleNUMBER_LITERAL();
 
             state._fsp--;
@@ -77274,22 +81560,22 @@
 
 
     // $ANTLR start "rule__StringLiteralExpCS__SegmentsAssignment"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26462:1: rule__StringLiteralExpCS__SegmentsAssignment : ( ruleStringLiteral ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27960:1: rule__StringLiteralExpCS__SegmentsAssignment : ( ruleStringLiteral ) ;
     public final void rule__StringLiteralExpCS__SegmentsAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26466:1: ( ( ruleStringLiteral ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26467:1: ( ruleStringLiteral )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27964:1: ( ( ruleStringLiteral ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27965:1: ( ruleStringLiteral )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26467:1: ( ruleStringLiteral )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26468:1: ruleStringLiteral
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27965:1: ( ruleStringLiteral )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27966:1: ruleStringLiteral
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStringLiteralExpCSAccess().getSegmentsStringLiteralParserRuleCall_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleStringLiteral_in_rule__StringLiteralExpCS__SegmentsAssignment53846);
+            pushFollow(FollowSets002.FOLLOW_ruleStringLiteral_in_rule__StringLiteralExpCS__SegmentsAssignment58237);
             ruleStringLiteral();
 
             state._fsp--;
@@ -77319,28 +81605,28 @@
 
 
     // $ANTLR start "rule__BooleanLiteralExpCS__SymbolAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26477:1: rule__BooleanLiteralExpCS__SymbolAssignment_0 : ( ( 'true' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27975:1: rule__BooleanLiteralExpCS__SymbolAssignment_0 : ( ( 'true' ) ) ;
     public final void rule__BooleanLiteralExpCS__SymbolAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26481:1: ( ( ( 'true' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26482:1: ( ( 'true' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27979:1: ( ( ( 'true' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27980:1: ( ( 'true' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26482:1: ( ( 'true' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26483:1: ( 'true' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27980:1: ( ( 'true' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27981:1: ( 'true' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSAccess().getSymbolTrueKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26484:1: ( 'true' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26485:1: 'true'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27982:1: ( 'true' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27983:1: 'true'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSAccess().getSymbolTrueKeyword_0_0()); 
             }
-            match(input,131,FollowSets002.FOLLOW_131_in_rule__BooleanLiteralExpCS__SymbolAssignment_053882); if (state.failed) return ;
+            match(input,131,FollowSets002.FOLLOW_131_in_rule__BooleanLiteralExpCS__SymbolAssignment_058273); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getBooleanLiteralExpCSAccess().getSymbolTrueKeyword_0_0()); 
             }
@@ -77372,28 +81658,28 @@
 
 
     // $ANTLR start "rule__BooleanLiteralExpCS__SymbolAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26500:1: rule__BooleanLiteralExpCS__SymbolAssignment_1 : ( ( 'false' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27998:1: rule__BooleanLiteralExpCS__SymbolAssignment_1 : ( ( 'false' ) ) ;
     public final void rule__BooleanLiteralExpCS__SymbolAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26504:1: ( ( ( 'false' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26505:1: ( ( 'false' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28002:1: ( ( ( 'false' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28003:1: ( ( 'false' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26505:1: ( ( 'false' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26506:1: ( 'false' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28003:1: ( ( 'false' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28004:1: ( 'false' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSAccess().getSymbolFalseKeyword_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26507:1: ( 'false' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26508:1: 'false'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28005:1: ( 'false' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28006:1: 'false'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSAccess().getSymbolFalseKeyword_1_0()); 
             }
-            match(input,132,FollowSets002.FOLLOW_132_in_rule__BooleanLiteralExpCS__SymbolAssignment_153926); if (state.failed) return ;
+            match(input,132,FollowSets002.FOLLOW_132_in_rule__BooleanLiteralExpCS__SymbolAssignment_158317); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getBooleanLiteralExpCSAccess().getSymbolFalseKeyword_1_0()); 
             }
@@ -77425,22 +81711,22 @@
 
 
     // $ANTLR start "rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26523:1: rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 : ( ruleMultiplicityCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28021:1: rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1 : ( ruleMultiplicityCS ) ;
     public final void rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26527:1: ( ( ruleMultiplicityCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26528:1: ( ruleMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28025:1: ( ( ruleMultiplicityCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28026:1: ( ruleMultiplicityCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26528:1: ( ruleMultiplicityCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26529:1: ruleMultiplicityCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28026:1: ( ruleMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28027:1: ruleMultiplicityCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeLiteralWithMultiplicityCSAccess().getOwnedMultiplicityMultiplicityCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleMultiplicityCS_in_rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_153965);
+            pushFollow(FollowSets002.FOLLOW_ruleMultiplicityCS_in_rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_158356);
             ruleMultiplicityCS();
 
             state._fsp--;
@@ -77470,22 +81756,22 @@
 
 
     // $ANTLR start "rule__TypeLiteralExpCS__OwnedTypeAssignment"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26538:1: rule__TypeLiteralExpCS__OwnedTypeAssignment : ( ruleTypeLiteralWithMultiplicityCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28036:1: rule__TypeLiteralExpCS__OwnedTypeAssignment : ( ruleTypeLiteralWithMultiplicityCS ) ;
     public final void rule__TypeLiteralExpCS__OwnedTypeAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26542:1: ( ( ruleTypeLiteralWithMultiplicityCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26543:1: ( ruleTypeLiteralWithMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28040:1: ( ( ruleTypeLiteralWithMultiplicityCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28041:1: ( ruleTypeLiteralWithMultiplicityCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26543:1: ( ruleTypeLiteralWithMultiplicityCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26544:1: ruleTypeLiteralWithMultiplicityCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28041:1: ( ruleTypeLiteralWithMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28042:1: ruleTypeLiteralWithMultiplicityCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeLiteralExpCSAccess().getOwnedTypeTypeLiteralWithMultiplicityCSParserRuleCall_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_rule__TypeLiteralExpCS__OwnedTypeAssignment53996);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_rule__TypeLiteralExpCS__OwnedTypeAssignment58387);
             ruleTypeLiteralWithMultiplicityCS();
 
             state._fsp--;
@@ -77515,22 +81801,22 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__OwnedPathNameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26553:1: rule__TypeNameExpCS__OwnedPathNameAssignment_0 : ( rulePathNameCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28051:1: rule__TypeNameExpCS__OwnedPathNameAssignment_0 : ( rulePathNameCS ) ;
     public final void rule__TypeNameExpCS__OwnedPathNameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26557:1: ( ( rulePathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26558:1: ( rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28055:1: ( ( rulePathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28056:1: ( rulePathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26558:1: ( rulePathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26559:1: rulePathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28056:1: ( rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28057:1: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getOwnedPathNamePathNameCSParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePathNameCS_in_rule__TypeNameExpCS__OwnedPathNameAssignment_054027);
+            pushFollow(FollowSets002.FOLLOW_rulePathNameCS_in_rule__TypeNameExpCS__OwnedPathNameAssignment_058418);
             rulePathNameCS();
 
             state._fsp--;
@@ -77560,22 +81846,22 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26568:1: rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 : ( ruleCurlyBracketedClauseCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28066:1: rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0 : ( ruleCurlyBracketedClauseCS ) ;
     public final void rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26572:1: ( ( ruleCurlyBracketedClauseCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26573:1: ( ruleCurlyBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28070:1: ( ( ruleCurlyBracketedClauseCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28071:1: ( ruleCurlyBracketedClauseCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26573:1: ( ruleCurlyBracketedClauseCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26574:1: ruleCurlyBracketedClauseCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28071:1: ( ruleCurlyBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28072:1: ruleCurlyBracketedClauseCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getOwnedCurlyBracketedClauseCurlyBracketedClauseCSParserRuleCall_1_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleCurlyBracketedClauseCS_in_rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_054058);
+            pushFollow(FollowSets002.FOLLOW_ruleCurlyBracketedClauseCS_in_rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_058449);
             ruleCurlyBracketedClauseCS();
 
             state._fsp--;
@@ -77605,22 +81891,22 @@
 
 
     // $ANTLR start "rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26583:1: rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28081:1: rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1 : ( ruleExpCS ) ;
     public final void rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26587:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26588:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28085:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28086:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26588:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26589:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28086:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28087:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeNameExpCSAccess().getOwnedPatternGuardExpCSParserRuleCall_1_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_154089);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_158480);
             ruleExpCS();
 
             state._fsp--;
@@ -77650,22 +81936,22 @@
 
 
     // $ANTLR start "rule__TypeExpCS__OwnedMultiplicityAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26598:1: rule__TypeExpCS__OwnedMultiplicityAssignment_1 : ( ruleMultiplicityCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28096:1: rule__TypeExpCS__OwnedMultiplicityAssignment_1 : ( ruleMultiplicityCS ) ;
     public final void rule__TypeExpCS__OwnedMultiplicityAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26602:1: ( ( ruleMultiplicityCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26603:1: ( ruleMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28100:1: ( ( ruleMultiplicityCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28101:1: ( ruleMultiplicityCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26603:1: ( ruleMultiplicityCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26604:1: ruleMultiplicityCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28101:1: ( ruleMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28102:1: ruleMultiplicityCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeExpCSAccess().getOwnedMultiplicityMultiplicityCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleMultiplicityCS_in_rule__TypeExpCS__OwnedMultiplicityAssignment_154120);
+            pushFollow(FollowSets002.FOLLOW_ruleMultiplicityCS_in_rule__TypeExpCS__OwnedMultiplicityAssignment_158511);
             ruleMultiplicityCS();
 
             state._fsp--;
@@ -77695,22 +81981,22 @@
 
 
     // $ANTLR start "rule__ExpCS__NameAssignment_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26613:1: rule__ExpCS__NameAssignment_0_1_1 : ( ruleBinaryOperatorName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28111:1: rule__ExpCS__NameAssignment_0_1_1 : ( ruleBinaryOperatorName ) ;
     public final void rule__ExpCS__NameAssignment_0_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26617:1: ( ( ruleBinaryOperatorName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26618:1: ( ruleBinaryOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28115:1: ( ( ruleBinaryOperatorName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28116:1: ( ruleBinaryOperatorName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26618:1: ( ruleBinaryOperatorName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26619:1: ruleBinaryOperatorName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28116:1: ( ruleBinaryOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28117:1: ruleBinaryOperatorName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getExpCSAccess().getNameBinaryOperatorNameParserRuleCall_0_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleBinaryOperatorName_in_rule__ExpCS__NameAssignment_0_1_154151);
+            pushFollow(FollowSets002.FOLLOW_ruleBinaryOperatorName_in_rule__ExpCS__NameAssignment_0_1_158542);
             ruleBinaryOperatorName();
 
             state._fsp--;
@@ -77740,22 +82026,22 @@
 
 
     // $ANTLR start "rule__ExpCS__OwnedRightAssignment_0_1_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26628:1: rule__ExpCS__OwnedRightAssignment_0_1_2 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28126:1: rule__ExpCS__OwnedRightAssignment_0_1_2 : ( ruleExpCS ) ;
     public final void rule__ExpCS__OwnedRightAssignment_0_1_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26632:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26633:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28130:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28131:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26633:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26634:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28131:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28132:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getExpCSAccess().getOwnedRightExpCSParserRuleCall_0_1_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__ExpCS__OwnedRightAssignment_0_1_254182);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__ExpCS__OwnedRightAssignment_0_1_258573);
             ruleExpCS();
 
             state._fsp--;
@@ -77785,22 +82071,22 @@
 
 
     // $ANTLR start "rule__PrefixedLetExpCS__NameAssignment_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26643:1: rule__PrefixedLetExpCS__NameAssignment_0_1 : ( ruleUnaryOperatorName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28141:1: rule__PrefixedLetExpCS__NameAssignment_0_1 : ( ruleUnaryOperatorName ) ;
     public final void rule__PrefixedLetExpCS__NameAssignment_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26647:1: ( ( ruleUnaryOperatorName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26648:1: ( ruleUnaryOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28145:1: ( ( ruleUnaryOperatorName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28146:1: ( ruleUnaryOperatorName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26648:1: ( ruleUnaryOperatorName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26649:1: ruleUnaryOperatorName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28146:1: ( ruleUnaryOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28147:1: ruleUnaryOperatorName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedLetExpCSAccess().getNameUnaryOperatorNameParserRuleCall_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnaryOperatorName_in_rule__PrefixedLetExpCS__NameAssignment_0_154213);
+            pushFollow(FollowSets002.FOLLOW_ruleUnaryOperatorName_in_rule__PrefixedLetExpCS__NameAssignment_0_158604);
             ruleUnaryOperatorName();
 
             state._fsp--;
@@ -77830,22 +82116,22 @@
 
 
     // $ANTLR start "rule__PrefixedLetExpCS__OwnedRightAssignment_0_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26658:1: rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 : ( rulePrefixedLetExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28156:1: rule__PrefixedLetExpCS__OwnedRightAssignment_0_2 : ( rulePrefixedLetExpCS ) ;
     public final void rule__PrefixedLetExpCS__OwnedRightAssignment_0_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26662:1: ( ( rulePrefixedLetExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26663:1: ( rulePrefixedLetExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28160:1: ( ( rulePrefixedLetExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28161:1: ( rulePrefixedLetExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26663:1: ( rulePrefixedLetExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26664:1: rulePrefixedLetExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28161:1: ( rulePrefixedLetExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28162:1: rulePrefixedLetExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedLetExpCSAccess().getOwnedRightPrefixedLetExpCSParserRuleCall_0_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePrefixedLetExpCS_in_rule__PrefixedLetExpCS__OwnedRightAssignment_0_254244);
+            pushFollow(FollowSets002.FOLLOW_rulePrefixedLetExpCS_in_rule__PrefixedLetExpCS__OwnedRightAssignment_0_258635);
             rulePrefixedLetExpCS();
 
             state._fsp--;
@@ -77875,22 +82161,22 @@
 
 
     // $ANTLR start "rule__PrefixedPrimaryExpCS__NameAssignment_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26673:1: rule__PrefixedPrimaryExpCS__NameAssignment_0_1 : ( ruleUnaryOperatorName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28171:1: rule__PrefixedPrimaryExpCS__NameAssignment_0_1 : ( ruleUnaryOperatorName ) ;
     public final void rule__PrefixedPrimaryExpCS__NameAssignment_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26677:1: ( ( ruleUnaryOperatorName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26678:1: ( ruleUnaryOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28175:1: ( ( ruleUnaryOperatorName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28176:1: ( ruleUnaryOperatorName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26678:1: ( ruleUnaryOperatorName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26679:1: ruleUnaryOperatorName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28176:1: ( ruleUnaryOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28177:1: ruleUnaryOperatorName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedPrimaryExpCSAccess().getNameUnaryOperatorNameParserRuleCall_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnaryOperatorName_in_rule__PrefixedPrimaryExpCS__NameAssignment_0_154275);
+            pushFollow(FollowSets002.FOLLOW_ruleUnaryOperatorName_in_rule__PrefixedPrimaryExpCS__NameAssignment_0_158666);
             ruleUnaryOperatorName();
 
             state._fsp--;
@@ -77920,22 +82206,22 @@
 
 
     // $ANTLR start "rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26688:1: rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 : ( rulePrefixedPrimaryExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28186:1: rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2 : ( rulePrefixedPrimaryExpCS ) ;
     public final void rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26692:1: ( ( rulePrefixedPrimaryExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26693:1: ( rulePrefixedPrimaryExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28190:1: ( ( rulePrefixedPrimaryExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28191:1: ( rulePrefixedPrimaryExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26693:1: ( rulePrefixedPrimaryExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26694:1: rulePrefixedPrimaryExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28191:1: ( rulePrefixedPrimaryExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28192:1: rulePrefixedPrimaryExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrefixedPrimaryExpCSAccess().getOwnedRightPrefixedPrimaryExpCSParserRuleCall_0_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePrefixedPrimaryExpCS_in_rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_254306);
+            pushFollow(FollowSets002.FOLLOW_rulePrefixedPrimaryExpCS_in_rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_258697);
             rulePrefixedPrimaryExpCS();
 
             state._fsp--;
@@ -77965,22 +82251,22 @@
 
 
     // $ANTLR start "rule__NameExpCS__OwnedPathNameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26703:1: rule__NameExpCS__OwnedPathNameAssignment_0 : ( rulePathNameCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28201:1: rule__NameExpCS__OwnedPathNameAssignment_0 : ( rulePathNameCS ) ;
     public final void rule__NameExpCS__OwnedPathNameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26707:1: ( ( rulePathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26708:1: ( rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28205:1: ( ( rulePathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28206:1: ( rulePathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26708:1: ( rulePathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26709:1: rulePathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28206:1: ( rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28207:1: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getOwnedPathNamePathNameCSParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePathNameCS_in_rule__NameExpCS__OwnedPathNameAssignment_054337);
+            pushFollow(FollowSets002.FOLLOW_rulePathNameCS_in_rule__NameExpCS__OwnedPathNameAssignment_058728);
             rulePathNameCS();
 
             state._fsp--;
@@ -78010,22 +82296,22 @@
 
 
     // $ANTLR start "rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26718:1: rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 : ( ruleSquareBracketedClauseCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28216:1: rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1 : ( ruleSquareBracketedClauseCS ) ;
     public final void rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26722:1: ( ( ruleSquareBracketedClauseCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26723:1: ( ruleSquareBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28220:1: ( ( ruleSquareBracketedClauseCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28221:1: ( ruleSquareBracketedClauseCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26723:1: ( ruleSquareBracketedClauseCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26724:1: ruleSquareBracketedClauseCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28221:1: ( ruleSquareBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28222:1: ruleSquareBracketedClauseCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getOwnedSquareBracketedClausesSquareBracketedClauseCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleSquareBracketedClauseCS_in_rule__NameExpCS__OwnedSquareBracketedClausesAssignment_154368);
+            pushFollow(FollowSets002.FOLLOW_ruleSquareBracketedClauseCS_in_rule__NameExpCS__OwnedSquareBracketedClausesAssignment_158759);
             ruleSquareBracketedClauseCS();
 
             state._fsp--;
@@ -78055,22 +82341,22 @@
 
 
     // $ANTLR start "rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26733:1: rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 : ( ruleRoundBracketedClauseCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28231:1: rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2 : ( ruleRoundBracketedClauseCS ) ;
     public final void rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26737:1: ( ( ruleRoundBracketedClauseCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26738:1: ( ruleRoundBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28235:1: ( ( ruleRoundBracketedClauseCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28236:1: ( ruleRoundBracketedClauseCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26738:1: ( ruleRoundBracketedClauseCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26739:1: ruleRoundBracketedClauseCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28236:1: ( ruleRoundBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28237:1: ruleRoundBracketedClauseCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getOwnedRoundBracketedClauseRoundBracketedClauseCSParserRuleCall_2_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleRoundBracketedClauseCS_in_rule__NameExpCS__OwnedRoundBracketedClauseAssignment_254399);
+            pushFollow(FollowSets002.FOLLOW_ruleRoundBracketedClauseCS_in_rule__NameExpCS__OwnedRoundBracketedClauseAssignment_258790);
             ruleRoundBracketedClauseCS();
 
             state._fsp--;
@@ -78100,22 +82386,22 @@
 
 
     // $ANTLR start "rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26748:1: rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 : ( ruleCurlyBracketedClauseCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28246:1: rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3 : ( ruleCurlyBracketedClauseCS ) ;
     public final void rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26752:1: ( ( ruleCurlyBracketedClauseCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26753:1: ( ruleCurlyBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28250:1: ( ( ruleCurlyBracketedClauseCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28251:1: ( ruleCurlyBracketedClauseCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26753:1: ( ruleCurlyBracketedClauseCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26754:1: ruleCurlyBracketedClauseCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28251:1: ( ruleCurlyBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28252:1: ruleCurlyBracketedClauseCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getOwnedCurlyBracketedClauseCurlyBracketedClauseCSParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleCurlyBracketedClauseCS_in_rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_354430);
+            pushFollow(FollowSets002.FOLLOW_ruleCurlyBracketedClauseCS_in_rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_358821);
             ruleCurlyBracketedClauseCS();
 
             state._fsp--;
@@ -78145,28 +82431,28 @@
 
 
     // $ANTLR start "rule__NameExpCS__IsPreAssignment_4_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26763:1: rule__NameExpCS__IsPreAssignment_4_0 : ( ( '@' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28261:1: rule__NameExpCS__IsPreAssignment_4_0 : ( ( '@' ) ) ;
     public final void rule__NameExpCS__IsPreAssignment_4_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26767:1: ( ( ( '@' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26768:1: ( ( '@' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28265:1: ( ( ( '@' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28266:1: ( ( '@' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26768:1: ( ( '@' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26769:1: ( '@' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28266:1: ( ( '@' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28267:1: ( '@' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getIsPreCommercialAtKeyword_4_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26770:1: ( '@' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26771:1: '@'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28268:1: ( '@' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28269:1: '@'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getIsPreCommercialAtKeyword_4_0_0()); 
             }
-            match(input,133,FollowSets002.FOLLOW_133_in_rule__NameExpCS__IsPreAssignment_4_054466); if (state.failed) return ;
+            match(input,133,FollowSets002.FOLLOW_133_in_rule__NameExpCS__IsPreAssignment_4_058857); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNameExpCSAccess().getIsPreCommercialAtKeyword_4_0_0()); 
             }
@@ -78198,22 +82484,22 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26786:1: rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 : ( ruleConstructorPartCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28284:1: rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0 : ( ruleConstructorPartCS ) ;
     public final void rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26790:1: ( ( ruleConstructorPartCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26791:1: ( ruleConstructorPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28288:1: ( ( ruleConstructorPartCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28289:1: ( ruleConstructorPartCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26791:1: ( ruleConstructorPartCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26792:1: ruleConstructorPartCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28289:1: ( ruleConstructorPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28290:1: ruleConstructorPartCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getOwnedPartsConstructorPartCSParserRuleCall_2_0_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleConstructorPartCS_in_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_054505);
+            pushFollow(FollowSets002.FOLLOW_ruleConstructorPartCS_in_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_058896);
             ruleConstructorPartCS();
 
             state._fsp--;
@@ -78243,22 +82529,22 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26801:1: rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 : ( ruleConstructorPartCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28299:1: rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1 : ( ruleConstructorPartCS ) ;
     public final void rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26805:1: ( ( ruleConstructorPartCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26806:1: ( ruleConstructorPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28303:1: ( ( ruleConstructorPartCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28304:1: ( ruleConstructorPartCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26806:1: ( ruleConstructorPartCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26807:1: ruleConstructorPartCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28304:1: ( ruleConstructorPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28305:1: ruleConstructorPartCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getOwnedPartsConstructorPartCSParserRuleCall_2_0_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleConstructorPartCS_in_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_154536);
+            pushFollow(FollowSets002.FOLLOW_ruleConstructorPartCS_in_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_158927);
             ruleConstructorPartCS();
 
             state._fsp--;
@@ -78288,22 +82574,22 @@
 
 
     // $ANTLR start "rule__CurlyBracketedClauseCS__ValueAssignment_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26816:1: rule__CurlyBracketedClauseCS__ValueAssignment_2_1 : ( ruleStringLiteral ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28314:1: rule__CurlyBracketedClauseCS__ValueAssignment_2_1 : ( ruleStringLiteral ) ;
     public final void rule__CurlyBracketedClauseCS__ValueAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26820:1: ( ( ruleStringLiteral ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26821:1: ( ruleStringLiteral )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28318:1: ( ( ruleStringLiteral ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28319:1: ( ruleStringLiteral )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26821:1: ( ruleStringLiteral )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26822:1: ruleStringLiteral
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28319:1: ( ruleStringLiteral )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28320:1: ruleStringLiteral
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCurlyBracketedClauseCSAccess().getValueStringLiteralParserRuleCall_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleStringLiteral_in_rule__CurlyBracketedClauseCS__ValueAssignment_2_154567);
+            pushFollow(FollowSets002.FOLLOW_ruleStringLiteral_in_rule__CurlyBracketedClauseCS__ValueAssignment_2_158958);
             ruleStringLiteral();
 
             state._fsp--;
@@ -78333,22 +82619,22 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26831:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 : ( ruleNavigatingArgCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28329:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0 : ( ruleNavigatingArgCS ) ;
     public final void rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26835:1: ( ( ruleNavigatingArgCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26836:1: ( ruleNavigatingArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28333:1: ( ( ruleNavigatingArgCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28334:1: ( ruleNavigatingArgCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26836:1: ( ruleNavigatingArgCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26837:1: ruleNavigatingArgCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28334:1: ( ruleNavigatingArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28335:1: ruleNavigatingArgCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingArgCSParserRuleCall_2_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_054598);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_058989);
             ruleNavigatingArgCS();
 
             state._fsp--;
@@ -78378,22 +82664,22 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26846:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 : ( ruleNavigatingCommaArgCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28344:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1 : ( ruleNavigatingCommaArgCS ) ;
     public final void rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26850:1: ( ( ruleNavigatingCommaArgCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26851:1: ( ruleNavigatingCommaArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28348:1: ( ( ruleNavigatingCommaArgCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28349:1: ( ruleNavigatingCommaArgCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26851:1: ( ruleNavigatingCommaArgCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26852:1: ruleNavigatingCommaArgCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28349:1: ( ruleNavigatingCommaArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28350:1: ruleNavigatingCommaArgCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingCommaArgCSParserRuleCall_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_154629);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_159020);
             ruleNavigatingCommaArgCS();
 
             state._fsp--;
@@ -78423,22 +82709,22 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26861:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 : ( ruleNavigatingSemiArgCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28359:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0 : ( ruleNavigatingSemiArgCS ) ;
     public final void rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26865:1: ( ( ruleNavigatingSemiArgCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26866:1: ( ruleNavigatingSemiArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28363:1: ( ( ruleNavigatingSemiArgCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28364:1: ( ruleNavigatingSemiArgCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26866:1: ( ruleNavigatingSemiArgCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26867:1: ruleNavigatingSemiArgCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28364:1: ( ruleNavigatingSemiArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28365:1: ruleNavigatingSemiArgCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingSemiArgCSParserRuleCall_2_2_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingSemiArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_054660);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingSemiArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_059051);
             ruleNavigatingSemiArgCS();
 
             state._fsp--;
@@ -78468,22 +82754,22 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26876:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 : ( ruleNavigatingCommaArgCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28374:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1 : ( ruleNavigatingCommaArgCS ) ;
     public final void rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26880:1: ( ( ruleNavigatingCommaArgCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26881:1: ( ruleNavigatingCommaArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28378:1: ( ( ruleNavigatingCommaArgCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28379:1: ( ruleNavigatingCommaArgCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26881:1: ( ruleNavigatingCommaArgCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26882:1: ruleNavigatingCommaArgCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28379:1: ( ruleNavigatingCommaArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28380:1: ruleNavigatingCommaArgCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingCommaArgCSParserRuleCall_2_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_154691);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_159082);
             ruleNavigatingCommaArgCS();
 
             state._fsp--;
@@ -78513,22 +82799,22 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26891:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 : ( ruleNavigatingBarArgCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28389:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0 : ( ruleNavigatingBarArgCS ) ;
     public final void rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26895:1: ( ( ruleNavigatingBarArgCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26896:1: ( ruleNavigatingBarArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28393:1: ( ( ruleNavigatingBarArgCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28394:1: ( ruleNavigatingBarArgCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26896:1: ( ruleNavigatingBarArgCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26897:1: ruleNavigatingBarArgCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28394:1: ( ruleNavigatingBarArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28395:1: ruleNavigatingBarArgCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingBarArgCSParserRuleCall_2_3_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingBarArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_054722);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingBarArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_059113);
             ruleNavigatingBarArgCS();
 
             state._fsp--;
@@ -78558,22 +82844,22 @@
 
 
     // $ANTLR start "rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26906:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 : ( ruleNavigatingCommaArgCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28404:1: rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1 : ( ruleNavigatingCommaArgCS ) ;
     public final void rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26910:1: ( ( ruleNavigatingCommaArgCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26911:1: ( ruleNavigatingCommaArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28408:1: ( ( ruleNavigatingCommaArgCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28409:1: ( ruleNavigatingCommaArgCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26911:1: ( ruleNavigatingCommaArgCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26912:1: ruleNavigatingCommaArgCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28409:1: ( ruleNavigatingCommaArgCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28410:1: ruleNavigatingCommaArgCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingCommaArgCSParserRuleCall_2_3_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_154753);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_159144);
             ruleNavigatingCommaArgCS();
 
             state._fsp--;
@@ -78603,22 +82889,22 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__OwnedTermsAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26921:1: rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28419:1: rule__SquareBracketedClauseCS__OwnedTermsAssignment_1 : ( ruleExpCS ) ;
     public final void rule__SquareBracketedClauseCS__OwnedTermsAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26925:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26926:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28423:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28424:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26926:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26927:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28424:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28425:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSquareBracketedClauseCSAccess().getOwnedTermsExpCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__SquareBracketedClauseCS__OwnedTermsAssignment_154784);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__SquareBracketedClauseCS__OwnedTermsAssignment_159175);
             ruleExpCS();
 
             state._fsp--;
@@ -78648,22 +82934,22 @@
 
 
     // $ANTLR start "rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26936:1: rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28434:1: rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1 : ( ruleExpCS ) ;
     public final void rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26940:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26941:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28438:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28439:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26941:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26942:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28439:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28440:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSquareBracketedClauseCSAccess().getOwnedTermsExpCSParserRuleCall_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_154815);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_159206);
             ruleExpCS();
 
             state._fsp--;
@@ -78693,22 +82979,22 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26951:1: rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 : ( ruleNavigatingArgExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28449:1: rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0 : ( ruleNavigatingArgExpCS ) ;
     public final void rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26955:1: ( ( ruleNavigatingArgExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26956:1: ( ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28453:1: ( ( ruleNavigatingArgExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28454:1: ( ruleNavigatingArgExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26956:1: ( ruleNavigatingArgExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26957:1: ruleNavigatingArgExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28454:1: ( ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28455:1: ruleNavigatingArgExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedNameExpressionNavigatingArgExpCSParserRuleCall_0_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_054846);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_059237);
             ruleNavigatingArgExpCS();
 
             state._fsp--;
@@ -78738,22 +83024,22 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26966:1: rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28464:1: rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1 : ( ruleTypeExpCS ) ;
     public final void rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26970:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26971:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28468:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28469:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26971:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26972:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28469:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28470:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_0_1_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_154877);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_159268);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -78783,22 +83069,22 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26981:1: rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28479:1: rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1 : ( ruleExpCS ) ;
     public final void rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26985:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26986:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28483:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28484:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26986:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26987:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28484:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28485:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_0_1_0_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_154908);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_159299);
             ruleExpCS();
 
             state._fsp--;
@@ -78828,22 +83114,22 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:26996:1: rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28494:1: rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1 : ( ruleExpCS ) ;
     public final void rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27000:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27001:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28498:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28499:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27001:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27002:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28499:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28500:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_0_1_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_154939);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_159330);
             ruleExpCS();
 
             state._fsp--;
@@ -78873,22 +83159,22 @@
 
 
     // $ANTLR start "rule__NavigatingArgCS__OwnedTypeAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27011:1: rule__NavigatingArgCS__OwnedTypeAssignment_1_1 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28509:1: rule__NavigatingArgCS__OwnedTypeAssignment_1_1 : ( ruleTypeExpCS ) ;
     public final void rule__NavigatingArgCS__OwnedTypeAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27015:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27016:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28513:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28514:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27016:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27017:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28514:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28515:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingArgCS__OwnedTypeAssignment_1_154970);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingArgCS__OwnedTypeAssignment_1_159361);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -78918,28 +83204,28 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__PrefixAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27026:1: rule__NavigatingBarArgCS__PrefixAssignment_0 : ( ( '|' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28524:1: rule__NavigatingBarArgCS__PrefixAssignment_0 : ( ( '|' ) ) ;
     public final void rule__NavigatingBarArgCS__PrefixAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27030:1: ( ( ( '|' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27031:1: ( ( '|' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28528:1: ( ( ( '|' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28529:1: ( ( '|' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27031:1: ( ( '|' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27032:1: ( '|' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28529:1: ( ( '|' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28530:1: ( '|' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getPrefixVerticalLineKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27033:1: ( '|' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27034:1: '|'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28531:1: ( '|' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28532:1: '|'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getPrefixVerticalLineKeyword_0_0()); 
             }
-            match(input,134,FollowSets002.FOLLOW_134_in_rule__NavigatingBarArgCS__PrefixAssignment_055006); if (state.failed) return ;
+            match(input,134,FollowSets002.FOLLOW_134_in_rule__NavigatingBarArgCS__PrefixAssignment_059397); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingBarArgCSAccess().getPrefixVerticalLineKeyword_0_0()); 
             }
@@ -78971,22 +83257,22 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27049:1: rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 : ( ruleNavigatingArgExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28547:1: rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1 : ( ruleNavigatingArgExpCS ) ;
     public final void rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27053:1: ( ( ruleNavigatingArgExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27054:1: ( ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28551:1: ( ( ruleNavigatingArgExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28552:1: ( ruleNavigatingArgExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27054:1: ( ruleNavigatingArgExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27055:1: ruleNavigatingArgExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28552:1: ( ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28553:1: ruleNavigatingArgExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getOwnedNameExpressionNavigatingArgExpCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_155045);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_159436);
             ruleNavigatingArgExpCS();
 
             state._fsp--;
@@ -79016,22 +83302,22 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27064:1: rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28562:1: rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1 : ( ruleTypeExpCS ) ;
     public final void rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27068:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27069:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28566:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28567:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27069:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27070:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28567:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28568:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingBarArgCS__OwnedTypeAssignment_2_155076);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingBarArgCS__OwnedTypeAssignment_2_159467);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -79061,22 +83347,22 @@
 
 
     // $ANTLR start "rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27079:1: rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28577:1: rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1 : ( ruleExpCS ) ;
     public final void rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27083:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27084:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28581:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28582:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27084:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27085:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28582:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28583:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingBarArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_155107);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_159498);
             ruleExpCS();
 
             state._fsp--;
@@ -79106,28 +83392,28 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__PrefixAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27094:1: rule__NavigatingCommaArgCS__PrefixAssignment_0 : ( ( ',' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28592:1: rule__NavigatingCommaArgCS__PrefixAssignment_0 : ( ( ',' ) ) ;
     public final void rule__NavigatingCommaArgCS__PrefixAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27098:1: ( ( ( ',' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27099:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28596:1: ( ( ( ',' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28597:1: ( ( ',' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27099:1: ( ( ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27100:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28597:1: ( ( ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28598:1: ( ',' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getPrefixCommaKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27101:1: ( ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27102:1: ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28599:1: ( ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28600:1: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getPrefixCommaKeyword_0_0()); 
             }
-            match(input,98,FollowSets002.FOLLOW_98_in_rule__NavigatingCommaArgCS__PrefixAssignment_055143); if (state.failed) return ;
+            match(input,107,FollowSets002.FOLLOW_107_in_rule__NavigatingCommaArgCS__PrefixAssignment_059534); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingCommaArgCSAccess().getPrefixCommaKeyword_0_0()); 
             }
@@ -79159,22 +83445,22 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27117:1: rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 : ( ruleNavigatingArgExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28615:1: rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1 : ( ruleNavigatingArgExpCS ) ;
     public final void rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27121:1: ( ( ruleNavigatingArgExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27122:1: ( ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28619:1: ( ( ruleNavigatingArgExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28620:1: ( ruleNavigatingArgExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27122:1: ( ruleNavigatingArgExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27123:1: ruleNavigatingArgExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28620:1: ( ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28621:1: ruleNavigatingArgExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedNameExpressionNavigatingArgExpCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_155182);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_159573);
             ruleNavigatingArgExpCS();
 
             state._fsp--;
@@ -79204,22 +83490,22 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27132:1: rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28630:1: rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1 : ( ruleTypeExpCS ) ;
     public final void rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27136:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27137:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28634:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28635:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27137:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27138:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28635:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28636:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_155213);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_159604);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -79249,22 +83535,22 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27147:1: rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28645:1: rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1 : ( ruleExpCS ) ;
     public final void rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27151:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27152:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28649:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28650:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27152:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27153:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28650:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28651:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_0_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_155244);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_159635);
             ruleExpCS();
 
             state._fsp--;
@@ -79294,22 +83580,22 @@
 
 
     // $ANTLR start "rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27162:1: rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28660:1: rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1 : ( ruleExpCS ) ;
     public final void rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27166:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27167:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28664:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28665:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27167:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27168:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28665:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28666:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_155275);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_159666);
             ruleExpCS();
 
             state._fsp--;
@@ -79339,28 +83625,28 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__PrefixAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27177:1: rule__NavigatingSemiArgCS__PrefixAssignment_0 : ( ( ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28675:1: rule__NavigatingSemiArgCS__PrefixAssignment_0 : ( ( ';' ) ) ;
     public final void rule__NavigatingSemiArgCS__PrefixAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27181:1: ( ( ( ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27182:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28679:1: ( ( ( ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28680:1: ( ( ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27182:1: ( ( ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27183:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28680:1: ( ( ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28681:1: ( ';' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getPrefixSemicolonKeyword_0_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27184:1: ( ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27185:1: ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28682:1: ( ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28683:1: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getPrefixSemicolonKeyword_0_0()); 
             }
-            match(input,53,FollowSets002.FOLLOW_53_in_rule__NavigatingSemiArgCS__PrefixAssignment_055311); if (state.failed) return ;
+            match(input,53,FollowSets002.FOLLOW_53_in_rule__NavigatingSemiArgCS__PrefixAssignment_059702); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getNavigatingSemiArgCSAccess().getPrefixSemicolonKeyword_0_0()); 
             }
@@ -79392,22 +83678,22 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27200:1: rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 : ( ruleNavigatingArgExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28698:1: rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1 : ( ruleNavigatingArgExpCS ) ;
     public final void rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27204:1: ( ( ruleNavigatingArgExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27205:1: ( ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28702:1: ( ( ruleNavigatingArgExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28703:1: ( ruleNavigatingArgExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27205:1: ( ruleNavigatingArgExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27206:1: ruleNavigatingArgExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28703:1: ( ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28704:1: ruleNavigatingArgExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getOwnedNameExpressionNavigatingArgExpCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_155350);
+            pushFollow(FollowSets002.FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_159741);
             ruleNavigatingArgExpCS();
 
             state._fsp--;
@@ -79437,22 +83723,22 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27215:1: rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28713:1: rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1 : ( ruleTypeExpCS ) ;
     public final void rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27219:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27220:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28717:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28718:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27220:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27221:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28718:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28719:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_155381);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_159772);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -79482,22 +83768,22 @@
 
 
     // $ANTLR start "rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27230:1: rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28728:1: rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1 : ( ruleExpCS ) ;
     public final void rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27234:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27235:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28732:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28733:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27235:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27236:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28733:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28734:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNavigatingSemiArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_155412);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_159803);
             ruleExpCS();
 
             state._fsp--;
@@ -79527,25 +83813,25 @@
 
 
     // $ANTLR start "rule__IfExpCS__OwnedConditionAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27245:1: rule__IfExpCS__OwnedConditionAssignment_1 : ( ( rule__IfExpCS__OwnedConditionAlternatives_1_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28743:1: rule__IfExpCS__OwnedConditionAssignment_1 : ( ( rule__IfExpCS__OwnedConditionAlternatives_1_0 ) ) ;
     public final void rule__IfExpCS__OwnedConditionAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27249:1: ( ( ( rule__IfExpCS__OwnedConditionAlternatives_1_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27250:1: ( ( rule__IfExpCS__OwnedConditionAlternatives_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28747:1: ( ( ( rule__IfExpCS__OwnedConditionAlternatives_1_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28748:1: ( ( rule__IfExpCS__OwnedConditionAlternatives_1_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27250:1: ( ( rule__IfExpCS__OwnedConditionAlternatives_1_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27251:1: ( rule__IfExpCS__OwnedConditionAlternatives_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28748:1: ( ( rule__IfExpCS__OwnedConditionAlternatives_1_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28749:1: ( rule__IfExpCS__OwnedConditionAlternatives_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getOwnedConditionAlternatives_1_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27252:1: ( rule__IfExpCS__OwnedConditionAlternatives_1_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27252:2: rule__IfExpCS__OwnedConditionAlternatives_1_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28750:1: ( rule__IfExpCS__OwnedConditionAlternatives_1_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28750:2: rule__IfExpCS__OwnedConditionAlternatives_1_0
             {
-            pushFollow(FollowSets002.FOLLOW_rule__IfExpCS__OwnedConditionAlternatives_1_0_in_rule__IfExpCS__OwnedConditionAssignment_155443);
+            pushFollow(FollowSets002.FOLLOW_rule__IfExpCS__OwnedConditionAlternatives_1_0_in_rule__IfExpCS__OwnedConditionAssignment_159834);
             rule__IfExpCS__OwnedConditionAlternatives_1_0();
 
             state._fsp--;
@@ -79578,22 +83864,22 @@
 
 
     // $ANTLR start "rule__IfExpCS__OwnedThenExpressionAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27261:1: rule__IfExpCS__OwnedThenExpressionAssignment_3 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28759:1: rule__IfExpCS__OwnedThenExpressionAssignment_3 : ( ruleExpCS ) ;
     public final void rule__IfExpCS__OwnedThenExpressionAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27265:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27266:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28763:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28764:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27266:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27267:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28764:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28765:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getOwnedThenExpressionExpCSParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedThenExpressionAssignment_355476);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedThenExpressionAssignment_359867);
             ruleExpCS();
 
             state._fsp--;
@@ -79623,22 +83909,22 @@
 
 
     // $ANTLR start "rule__IfExpCS__OwnedIfThenExpressionsAssignment_4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27276:1: rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 : ( ruleElseIfThenExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28774:1: rule__IfExpCS__OwnedIfThenExpressionsAssignment_4 : ( ruleElseIfThenExpCS ) ;
     public final void rule__IfExpCS__OwnedIfThenExpressionsAssignment_4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27280:1: ( ( ruleElseIfThenExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27281:1: ( ruleElseIfThenExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28778:1: ( ( ruleElseIfThenExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28779:1: ( ruleElseIfThenExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27281:1: ( ruleElseIfThenExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27282:1: ruleElseIfThenExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28779:1: ( ruleElseIfThenExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28780:1: ruleElseIfThenExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getOwnedIfThenExpressionsElseIfThenExpCSParserRuleCall_4_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleElseIfThenExpCS_in_rule__IfExpCS__OwnedIfThenExpressionsAssignment_455507);
+            pushFollow(FollowSets002.FOLLOW_ruleElseIfThenExpCS_in_rule__IfExpCS__OwnedIfThenExpressionsAssignment_459898);
             ruleElseIfThenExpCS();
 
             state._fsp--;
@@ -79668,22 +83954,22 @@
 
 
     // $ANTLR start "rule__IfExpCS__OwnedElseExpressionAssignment_6"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27291:1: rule__IfExpCS__OwnedElseExpressionAssignment_6 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28789:1: rule__IfExpCS__OwnedElseExpressionAssignment_6 : ( ruleExpCS ) ;
     public final void rule__IfExpCS__OwnedElseExpressionAssignment_6() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27295:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27296:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28793:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28794:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27296:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27297:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28794:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28795:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIfExpCSAccess().getOwnedElseExpressionExpCSParserRuleCall_6_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedElseExpressionAssignment_655538);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedElseExpressionAssignment_659929);
             ruleExpCS();
 
             state._fsp--;
@@ -79713,22 +83999,22 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__OwnedConditionAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27306:1: rule__ElseIfThenExpCS__OwnedConditionAssignment_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28804:1: rule__ElseIfThenExpCS__OwnedConditionAssignment_1 : ( ruleExpCS ) ;
     public final void rule__ElseIfThenExpCS__OwnedConditionAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27310:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27311:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28808:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28809:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27311:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27312:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28809:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28810:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getElseIfThenExpCSAccess().getOwnedConditionExpCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__ElseIfThenExpCS__OwnedConditionAssignment_155569);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__ElseIfThenExpCS__OwnedConditionAssignment_159960);
             ruleExpCS();
 
             state._fsp--;
@@ -79758,22 +84044,22 @@
 
 
     // $ANTLR start "rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27321:1: rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28819:1: rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3 : ( ruleExpCS ) ;
     public final void rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27325:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27326:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28823:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28824:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27326:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27327:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28824:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28825:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getElseIfThenExpCSAccess().getOwnedThenExpressionExpCSParserRuleCall_3_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_355600);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_359991);
             ruleExpCS();
 
             state._fsp--;
@@ -79803,22 +84089,22 @@
 
 
     // $ANTLR start "rule__LetExpCS__OwnedVariablesAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27336:1: rule__LetExpCS__OwnedVariablesAssignment_1 : ( ruleLetVariableCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28834:1: rule__LetExpCS__OwnedVariablesAssignment_1 : ( ruleLetVariableCS ) ;
     public final void rule__LetExpCS__OwnedVariablesAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27340:1: ( ( ruleLetVariableCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27341:1: ( ruleLetVariableCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28838:1: ( ( ruleLetVariableCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28839:1: ( ruleLetVariableCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27341:1: ( ruleLetVariableCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27342:1: ruleLetVariableCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28839:1: ( ruleLetVariableCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28840:1: ruleLetVariableCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getOwnedVariablesLetVariableCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleLetVariableCS_in_rule__LetExpCS__OwnedVariablesAssignment_155631);
+            pushFollow(FollowSets002.FOLLOW_ruleLetVariableCS_in_rule__LetExpCS__OwnedVariablesAssignment_160022);
             ruleLetVariableCS();
 
             state._fsp--;
@@ -79848,22 +84134,22 @@
 
 
     // $ANTLR start "rule__LetExpCS__OwnedVariablesAssignment_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27351:1: rule__LetExpCS__OwnedVariablesAssignment_2_1 : ( ruleLetVariableCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28849:1: rule__LetExpCS__OwnedVariablesAssignment_2_1 : ( ruleLetVariableCS ) ;
     public final void rule__LetExpCS__OwnedVariablesAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27355:1: ( ( ruleLetVariableCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27356:1: ( ruleLetVariableCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28853:1: ( ( ruleLetVariableCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28854:1: ( ruleLetVariableCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27356:1: ( ruleLetVariableCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27357:1: ruleLetVariableCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28854:1: ( ruleLetVariableCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28855:1: ruleLetVariableCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getOwnedVariablesLetVariableCSParserRuleCall_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleLetVariableCS_in_rule__LetExpCS__OwnedVariablesAssignment_2_155662);
+            pushFollow(FollowSets002.FOLLOW_ruleLetVariableCS_in_rule__LetExpCS__OwnedVariablesAssignment_2_160053);
             ruleLetVariableCS();
 
             state._fsp--;
@@ -79893,22 +84179,22 @@
 
 
     // $ANTLR start "rule__LetExpCS__OwnedInExpressionAssignment_4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27366:1: rule__LetExpCS__OwnedInExpressionAssignment_4 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28864:1: rule__LetExpCS__OwnedInExpressionAssignment_4 : ( ruleExpCS ) ;
     public final void rule__LetExpCS__OwnedInExpressionAssignment_4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27370:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27371:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28868:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28869:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27371:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27372:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28869:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28870:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetExpCSAccess().getOwnedInExpressionExpCSParserRuleCall_4_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__LetExpCS__OwnedInExpressionAssignment_455693);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__LetExpCS__OwnedInExpressionAssignment_460084);
             ruleExpCS();
 
             state._fsp--;
@@ -79938,22 +84224,22 @@
 
 
     // $ANTLR start "rule__LetVariableCS__NameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27381:1: rule__LetVariableCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28879:1: rule__LetVariableCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
     public final void rule__LetVariableCS__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27385:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27386:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28883:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28884:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27386:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27387:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28884:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28885:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__LetVariableCS__NameAssignment_055724);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__LetVariableCS__NameAssignment_060115);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -79983,22 +84269,22 @@
 
 
     // $ANTLR start "rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27396:1: rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 : ( ruleRoundBracketedClauseCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28894:1: rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1 : ( ruleRoundBracketedClauseCS ) ;
     public final void rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27400:1: ( ( ruleRoundBracketedClauseCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27401:1: ( ruleRoundBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28898:1: ( ( ruleRoundBracketedClauseCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28899:1: ( ruleRoundBracketedClauseCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27401:1: ( ruleRoundBracketedClauseCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27402:1: ruleRoundBracketedClauseCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28899:1: ( ruleRoundBracketedClauseCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28900:1: ruleRoundBracketedClauseCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getOwnedRoundBracketedClauseRoundBracketedClauseCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleRoundBracketedClauseCS_in_rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_155755);
+            pushFollow(FollowSets002.FOLLOW_ruleRoundBracketedClauseCS_in_rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_160146);
             ruleRoundBracketedClauseCS();
 
             state._fsp--;
@@ -80028,22 +84314,22 @@
 
 
     // $ANTLR start "rule__LetVariableCS__OwnedTypeAssignment_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27411:1: rule__LetVariableCS__OwnedTypeAssignment_2_1 : ( ruleTypeExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28909:1: rule__LetVariableCS__OwnedTypeAssignment_2_1 : ( ruleTypeExpCS ) ;
     public final void rule__LetVariableCS__OwnedTypeAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27415:1: ( ( ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27416:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28913:1: ( ( ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28914:1: ( ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27416:1: ( ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27417:1: ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28914:1: ( ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28915:1: ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__LetVariableCS__OwnedTypeAssignment_2_155786);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeExpCS_in_rule__LetVariableCS__OwnedTypeAssignment_2_160177);
             ruleTypeExpCS();
 
             state._fsp--;
@@ -80073,22 +84359,22 @@
 
 
     // $ANTLR start "rule__LetVariableCS__OwnedInitExpressionAssignment_4"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27426:1: rule__LetVariableCS__OwnedInitExpressionAssignment_4 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28924:1: rule__LetVariableCS__OwnedInitExpressionAssignment_4 : ( ruleExpCS ) ;
     public final void rule__LetVariableCS__OwnedInitExpressionAssignment_4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27430:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27431:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28928:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28929:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27431:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27432:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28929:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28930:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLetVariableCSAccess().getOwnedInitExpressionExpCSParserRuleCall_4_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__LetVariableCS__OwnedInitExpressionAssignment_455817);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__LetVariableCS__OwnedInitExpressionAssignment_460208);
             ruleExpCS();
 
             state._fsp--;
@@ -80118,22 +84404,22 @@
 
 
     // $ANTLR start "rule__NestedExpCS__OwnedExpressionAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27441:1: rule__NestedExpCS__OwnedExpressionAssignment_1 : ( ruleExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28939:1: rule__NestedExpCS__OwnedExpressionAssignment_1 : ( ruleExpCS ) ;
     public final void rule__NestedExpCS__OwnedExpressionAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27445:1: ( ( ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27446:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28943:1: ( ( ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28944:1: ( ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27446:1: ( ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27447:1: ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28944:1: ( ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28945:1: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNestedExpCSAccess().getOwnedExpressionExpCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NestedExpCS__OwnedExpressionAssignment_155848);
+            pushFollow(FollowSets002.FOLLOW_ruleExpCS_in_rule__NestedExpCS__OwnedExpressionAssignment_160239);
             ruleExpCS();
 
             state._fsp--;
@@ -80163,22 +84449,22 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__LowerBoundAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27456:1: rule__MultiplicityBoundsCS__LowerBoundAssignment_0 : ( ruleLOWER ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28954:1: rule__MultiplicityBoundsCS__LowerBoundAssignment_0 : ( ruleLOWER ) ;
     public final void rule__MultiplicityBoundsCS__LowerBoundAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27460:1: ( ( ruleLOWER ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27461:1: ( ruleLOWER )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28958:1: ( ( ruleLOWER ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28959:1: ( ruleLOWER )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27461:1: ( ruleLOWER )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27462:1: ruleLOWER
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28959:1: ( ruleLOWER )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28960:1: ruleLOWER
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityBoundsCSAccess().getLowerBoundLOWERParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleLOWER_in_rule__MultiplicityBoundsCS__LowerBoundAssignment_055879);
+            pushFollow(FollowSets002.FOLLOW_ruleLOWER_in_rule__MultiplicityBoundsCS__LowerBoundAssignment_060270);
             ruleLOWER();
 
             state._fsp--;
@@ -80208,22 +84494,22 @@
 
 
     // $ANTLR start "rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27471:1: rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 : ( ruleUPPER ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28969:1: rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1 : ( ruleUPPER ) ;
     public final void rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27475:1: ( ( ruleUPPER ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27476:1: ( ruleUPPER )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28973:1: ( ( ruleUPPER ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28974:1: ( ruleUPPER )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27476:1: ( ruleUPPER )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27477:1: ruleUPPER
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28974:1: ( ruleUPPER )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28975:1: ruleUPPER
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityBoundsCSAccess().getUpperBoundUPPERParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUPPER_in_rule__MultiplicityBoundsCS__UpperBoundAssignment_1_155910);
+            pushFollow(FollowSets002.FOLLOW_ruleUPPER_in_rule__MultiplicityBoundsCS__UpperBoundAssignment_1_160301);
             ruleUPPER();
 
             state._fsp--;
@@ -80253,25 +84539,25 @@
 
 
     // $ANTLR start "rule__MultiplicityStringCS__StringBoundsAssignment"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27486:1: rule__MultiplicityStringCS__StringBoundsAssignment : ( ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28984:1: rule__MultiplicityStringCS__StringBoundsAssignment : ( ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 ) ) ;
     public final void rule__MultiplicityStringCS__StringBoundsAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27490:1: ( ( ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27491:1: ( ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28988:1: ( ( ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28989:1: ( ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27491:1: ( ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27492:1: ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28989:1: ( ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28990:1: ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getMultiplicityStringCSAccess().getStringBoundsAlternatives_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27493:1: ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27493:2: rule__MultiplicityStringCS__StringBoundsAlternatives_0
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28991:1: ( rule__MultiplicityStringCS__StringBoundsAlternatives_0 )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:28991:2: rule__MultiplicityStringCS__StringBoundsAlternatives_0
             {
-            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityStringCS__StringBoundsAlternatives_0_in_rule__MultiplicityStringCS__StringBoundsAssignment55941);
+            pushFollow(FollowSets002.FOLLOW_rule__MultiplicityStringCS__StringBoundsAlternatives_0_in_rule__MultiplicityStringCS__StringBoundsAssignment60332);
             rule__MultiplicityStringCS__StringBoundsAlternatives_0();
 
             state._fsp--;
@@ -80304,22 +84590,22 @@
 
 
     // $ANTLR start "rule__PathNameCS__OwnedPathElementsAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27502:1: rule__PathNameCS__OwnedPathElementsAssignment_0 : ( ruleFirstPathElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29000:1: rule__PathNameCS__OwnedPathElementsAssignment_0 : ( ruleFirstPathElementCS ) ;
     public final void rule__PathNameCS__OwnedPathElementsAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27506:1: ( ( ruleFirstPathElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27507:1: ( ruleFirstPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29004:1: ( ( ruleFirstPathElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29005:1: ( ruleFirstPathElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27507:1: ( ruleFirstPathElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27508:1: ruleFirstPathElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29005:1: ( ruleFirstPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29006:1: ruleFirstPathElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getOwnedPathElementsFirstPathElementCSParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleFirstPathElementCS_in_rule__PathNameCS__OwnedPathElementsAssignment_055974);
+            pushFollow(FollowSets002.FOLLOW_ruleFirstPathElementCS_in_rule__PathNameCS__OwnedPathElementsAssignment_060365);
             ruleFirstPathElementCS();
 
             state._fsp--;
@@ -80349,22 +84635,22 @@
 
 
     // $ANTLR start "rule__PathNameCS__OwnedPathElementsAssignment_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27517:1: rule__PathNameCS__OwnedPathElementsAssignment_1_1 : ( ruleNextPathElementCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29015:1: rule__PathNameCS__OwnedPathElementsAssignment_1_1 : ( ruleNextPathElementCS ) ;
     public final void rule__PathNameCS__OwnedPathElementsAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27521:1: ( ( ruleNextPathElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27522:1: ( ruleNextPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29019:1: ( ( ruleNextPathElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29020:1: ( ruleNextPathElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27522:1: ( ruleNextPathElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27523:1: ruleNextPathElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29020:1: ( ruleNextPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29021:1: ruleNextPathElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getOwnedPathElementsNextPathElementCSParserRuleCall_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleNextPathElementCS_in_rule__PathNameCS__OwnedPathElementsAssignment_1_156005);
+            pushFollow(FollowSets002.FOLLOW_ruleNextPathElementCS_in_rule__PathNameCS__OwnedPathElementsAssignment_1_160396);
             ruleNextPathElementCS();
 
             state._fsp--;
@@ -80394,28 +84680,28 @@
 
 
     // $ANTLR start "rule__FirstPathElementCS__ReferredElementAssignment"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27532:1: rule__FirstPathElementCS__ReferredElementAssignment : ( ( ruleUnrestrictedName ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29030:1: rule__FirstPathElementCS__ReferredElementAssignment : ( ( ruleUnrestrictedName ) ) ;
     public final void rule__FirstPathElementCS__ReferredElementAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27536:1: ( ( ( ruleUnrestrictedName ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27537:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29034:1: ( ( ( ruleUnrestrictedName ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29035:1: ( ( ruleUnrestrictedName ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27537:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27538:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29035:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29036:1: ( ruleUnrestrictedName )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getFirstPathElementCSAccess().getReferredElementNamedElementCrossReference_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27539:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27540:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29037:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29038:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getFirstPathElementCSAccess().getReferredElementNamedElementUnrestrictedNameParserRuleCall_0_1()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__FirstPathElementCS__ReferredElementAssignment56040);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__FirstPathElementCS__ReferredElementAssignment60431);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -80451,28 +84737,28 @@
 
 
     // $ANTLR start "rule__NextPathElementCS__ReferredElementAssignment"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27551:1: rule__NextPathElementCS__ReferredElementAssignment : ( ( ruleUnreservedName ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29049:1: rule__NextPathElementCS__ReferredElementAssignment : ( ( ruleUnreservedName ) ) ;
     public final void rule__NextPathElementCS__ReferredElementAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27555:1: ( ( ( ruleUnreservedName ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27556:1: ( ( ruleUnreservedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29053:1: ( ( ( ruleUnreservedName ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29054:1: ( ( ruleUnreservedName ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27556:1: ( ( ruleUnreservedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27557:1: ( ruleUnreservedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29054:1: ( ( ruleUnreservedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29055:1: ( ruleUnreservedName )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNextPathElementCSAccess().getReferredElementNamedElementCrossReference_0()); 
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27558:1: ( ruleUnreservedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27559:1: ruleUnreservedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29056:1: ( ruleUnreservedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29057:1: ruleUnreservedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNextPathElementCSAccess().getReferredElementNamedElementUnreservedNameParserRuleCall_0_1()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnreservedName_in_rule__NextPathElementCS__ReferredElementAssignment56079);
+            pushFollow(FollowSets002.FOLLOW_ruleUnreservedName_in_rule__NextPathElementCS__ReferredElementAssignment60470);
             ruleUnreservedName();
 
             state._fsp--;
@@ -80508,22 +84794,22 @@
 
 
     // $ANTLR start "rule__TemplateParameterSubstitutionCS__OwnedActualParameterAssignment"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27570:1: rule__TemplateParameterSubstitutionCS__OwnedActualParameterAssignment : ( ruleTypeRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29068:1: rule__TemplateParameterSubstitutionCS__OwnedActualParameterAssignment : ( ruleTypeRefCS ) ;
     public final void rule__TemplateParameterSubstitutionCS__OwnedActualParameterAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27574:1: ( ( ruleTypeRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27575:1: ( ruleTypeRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29072:1: ( ( ruleTypeRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29073:1: ( ruleTypeRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27575:1: ( ruleTypeRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27576:1: ruleTypeRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29073:1: ( ruleTypeRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29074:1: ruleTypeRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTemplateParameterSubstitutionCSAccess().getOwnedActualParameterTypeRefCSParserRuleCall_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypeRefCS_in_rule__TemplateParameterSubstitutionCS__OwnedActualParameterAssignment56114);
+            pushFollow(FollowSets002.FOLLOW_ruleTypeRefCS_in_rule__TemplateParameterSubstitutionCS__OwnedActualParameterAssignment60505);
             ruleTypeRefCS();
 
             state._fsp--;
@@ -80553,22 +84839,22 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__NameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27585:1: rule__TypeParameterCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29083:1: rule__TypeParameterCS__NameAssignment_0 : ( ruleUnrestrictedName ) ;
     public final void rule__TypeParameterCS__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27589:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27590:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29087:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29088:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27590:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27591:1: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29088:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29089:1: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__TypeParameterCS__NameAssignment_056145);
+            pushFollow(FollowSets002.FOLLOW_ruleUnrestrictedName_in_rule__TypeParameterCS__NameAssignment_060536);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -80598,22 +84884,22 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27600:1: rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29098:1: rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1 : ( ruleTypedRefCS ) ;
     public final void rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27604:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27605:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29102:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29103:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27605:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27606:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29103:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29104:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getOwnedExtendsTypedRefCSParserRuleCall_1_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_156176);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_160567);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -80643,22 +84929,22 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27615:1: rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29113:1: rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1 : ( ruleTypedRefCS ) ;
     public final void rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27619:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27620:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29117:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29118:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27620:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27621:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29118:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29119:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getOwnedExtendsTypedRefCSParserRuleCall_1_0_2_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_156207);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_160598);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -80688,22 +84974,22 @@
 
 
     // $ANTLR start "rule__TypeParameterCS__OwnedSuperAssignment_1_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27630:1: rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29128:1: rule__TypeParameterCS__OwnedSuperAssignment_1_1_1 : ( ruleTypedRefCS ) ;
     public final void rule__TypeParameterCS__OwnedSuperAssignment_1_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27634:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27635:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29132:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29133:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27635:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27636:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29133:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29134:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypeParameterCSAccess().getOwnedSuperTypedRefCSParserRuleCall_1_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedSuperAssignment_1_1_156238);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedSuperAssignment_1_1_160629);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -80733,22 +85019,22 @@
 
 
     // $ANTLR start "rule__TypedTypeRefCS__OwnedPathNameAssignment_0"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27645:1: rule__TypedTypeRefCS__OwnedPathNameAssignment_0 : ( rulePathNameCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29143:1: rule__TypedTypeRefCS__OwnedPathNameAssignment_0 : ( rulePathNameCS ) ;
     public final void rule__TypedTypeRefCS__OwnedPathNameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27649:1: ( ( rulePathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27650:1: ( rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29147:1: ( ( rulePathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29148:1: ( rulePathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27650:1: ( rulePathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27651:1: rulePathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29148:1: ( rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29149:1: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypedTypeRefCSAccess().getOwnedPathNamePathNameCSParserRuleCall_0_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_rulePathNameCS_in_rule__TypedTypeRefCS__OwnedPathNameAssignment_056269);
+            pushFollow(FollowSets002.FOLLOW_rulePathNameCS_in_rule__TypedTypeRefCS__OwnedPathNameAssignment_060660);
             rulePathNameCS();
 
             state._fsp--;
@@ -80778,22 +85064,22 @@
 
 
     // $ANTLR start "rule__TypedTypeRefCS__OwnedBindingAssignment_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27660:1: rule__TypedTypeRefCS__OwnedBindingAssignment_1 : ( ruleTemplateBindingCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29158:1: rule__TypedTypeRefCS__OwnedBindingAssignment_1 : ( ruleTemplateBindingCS ) ;
     public final void rule__TypedTypeRefCS__OwnedBindingAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27664:1: ( ( ruleTemplateBindingCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27665:1: ( ruleTemplateBindingCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29162:1: ( ( ruleTemplateBindingCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29163:1: ( ruleTemplateBindingCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27665:1: ( ruleTemplateBindingCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27666:1: ruleTemplateBindingCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29163:1: ( ruleTemplateBindingCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29164:1: ruleTemplateBindingCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getTypedTypeRefCSAccess().getOwnedBindingTemplateBindingCSParserRuleCall_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTemplateBindingCS_in_rule__TypedTypeRefCS__OwnedBindingAssignment_156300);
+            pushFollow(FollowSets002.FOLLOW_ruleTemplateBindingCS_in_rule__TypedTypeRefCS__OwnedBindingAssignment_160691);
             ruleTemplateBindingCS();
 
             state._fsp--;
@@ -80823,22 +85109,22 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27675:1: rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29173:1: rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1 : ( ruleTypedRefCS ) ;
     public final void rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27679:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27680:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29177:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29178:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27680:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27681:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29178:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29179:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWildcardTypeRefCSAccess().getOwnedExtendsTypedRefCSParserRuleCall_2_0_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_156331);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_160722);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -80868,22 +85154,22 @@
 
 
     // $ANTLR start "rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27690:1: rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 : ( ruleTypedRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29188:1: rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1 : ( ruleTypedRefCS ) ;
     public final void rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27694:1: ( ( ruleTypedRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27695:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29192:1: ( ( ruleTypedRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29193:1: ( ruleTypedRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27695:1: ( ruleTypedRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:27696:1: ruleTypedRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29193:1: ( ruleTypedRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:29194:1: ruleTypedRefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWildcardTypeRefCSAccess().getOwnedSuperTypedRefCSParserRuleCall_2_1_1_0()); 
             }
-            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_156362);
+            pushFollow(FollowSets002.FOLLOW_ruleTypedRefCS_in_rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_160753);
             ruleTypedRefCS();
 
             state._fsp--;
@@ -80911,18 +85197,18 @@
     }
     // $ANTLR end "rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1"
 
-    // $ANTLR start synpred179_InternalOCLinEcore
-    public final void synpred179_InternalOCLinEcore_fragment() throws RecognitionException {   
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5197:6: ( ( ruleTypeLiteralCS ) )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5197:6: ( ruleTypeLiteralCS )
+    // $ANTLR start synpred158_InternalOCLinEcore
+    public final void synpred158_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5355:6: ( ( ruleTypeLiteralCS ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5355:6: ( ruleTypeLiteralCS )
         {
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5197:6: ( ruleTypeLiteralCS )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5198:1: ruleTypeLiteralCS
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5355:6: ( ruleTypeLiteralCS )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5356:1: ruleTypeLiteralCS
         {
         if ( state.backtracking==0 ) {
            before(grammarAccess.getTypeExpCSAccess().getTypeLiteralCSParserRuleCall_0_1()); 
         }
-        pushFollow(FollowSets002.FOLLOW_ruleTypeLiteralCS_in_synpred179_InternalOCLinEcore11649);
+        pushFollow(FollowSets002.FOLLOW_ruleTypeLiteralCS_in_synpred158_InternalOCLinEcore11810);
         ruleTypeLiteralCS();
 
         state._fsp--;
@@ -80933,23 +85219,23 @@
 
         }
     }
-    // $ANTLR end synpred179_InternalOCLinEcore
+    // $ANTLR end synpred158_InternalOCLinEcore
 
-    // $ANTLR start synpred180_InternalOCLinEcore
-    public final void synpred180_InternalOCLinEcore_fragment() throws RecognitionException {   
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5219:1: ( ( ( rule__ExpCS__Group_0__0 ) ) )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5219:1: ( ( rule__ExpCS__Group_0__0 ) )
+    // $ANTLR start synpred159_InternalOCLinEcore
+    public final void synpred159_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5377:1: ( ( ( rule__ExpCS__Group_0__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5377:1: ( ( rule__ExpCS__Group_0__0 ) )
         {
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5219:1: ( ( rule__ExpCS__Group_0__0 ) )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5220:1: ( rule__ExpCS__Group_0__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5377:1: ( ( rule__ExpCS__Group_0__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5378:1: ( rule__ExpCS__Group_0__0 )
         {
         if ( state.backtracking==0 ) {
            before(grammarAccess.getExpCSAccess().getGroup_0()); 
         }
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5221:1: ( rule__ExpCS__Group_0__0 )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5221:2: rule__ExpCS__Group_0__0
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5379:1: ( rule__ExpCS__Group_0__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5379:2: rule__ExpCS__Group_0__0
         {
-        pushFollow(FollowSets002.FOLLOW_rule__ExpCS__Group_0__0_in_synpred180_InternalOCLinEcore11698);
+        pushFollow(FollowSets002.FOLLOW_rule__ExpCS__Group_0__0_in_synpred159_InternalOCLinEcore11859);
         rule__ExpCS__Group_0__0();
 
         state._fsp--;
@@ -80963,20 +85249,20 @@
 
         }
     }
-    // $ANTLR end synpred180_InternalOCLinEcore
+    // $ANTLR end synpred159_InternalOCLinEcore
 
-    // $ANTLR start synpred187_InternalOCLinEcore
-    public final void synpred187_InternalOCLinEcore_fragment() throws RecognitionException {   
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5309:6: ( ( ruleTupleLiteralExpCS ) )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5309:6: ( ruleTupleLiteralExpCS )
+    // $ANTLR start synpred166_InternalOCLinEcore
+    public final void synpred166_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5467:6: ( ( ruleTupleLiteralExpCS ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5467:6: ( ruleTupleLiteralExpCS )
         {
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5309:6: ( ruleTupleLiteralExpCS )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5310:1: ruleTupleLiteralExpCS
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5467:6: ( ruleTupleLiteralExpCS )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5468:1: ruleTupleLiteralExpCS
         {
         if ( state.backtracking==0 ) {
            before(grammarAccess.getPrimaryExpCSAccess().getTupleLiteralExpCSParserRuleCall_4()); 
         }
-        pushFollow(FollowSets002.FOLLOW_ruleTupleLiteralExpCS_in_synpred187_InternalOCLinEcore11916);
+        pushFollow(FollowSets002.FOLLOW_ruleTupleLiteralExpCS_in_synpred166_InternalOCLinEcore12077);
         ruleTupleLiteralExpCS();
 
         state._fsp--;
@@ -80987,20 +85273,20 @@
 
         }
     }
-    // $ANTLR end synpred187_InternalOCLinEcore
+    // $ANTLR end synpred166_InternalOCLinEcore
 
-    // $ANTLR start synpred188_InternalOCLinEcore
-    public final void synpred188_InternalOCLinEcore_fragment() throws RecognitionException {   
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5315:6: ( ( ruleCollectionLiteralExpCS ) )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5315:6: ( ruleCollectionLiteralExpCS )
+    // $ANTLR start synpred167_InternalOCLinEcore
+    public final void synpred167_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5473:6: ( ( ruleCollectionLiteralExpCS ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5473:6: ( ruleCollectionLiteralExpCS )
         {
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5315:6: ( ruleCollectionLiteralExpCS )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5316:1: ruleCollectionLiteralExpCS
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5473:6: ( ruleCollectionLiteralExpCS )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5474:1: ruleCollectionLiteralExpCS
         {
         if ( state.backtracking==0 ) {
            before(grammarAccess.getPrimaryExpCSAccess().getCollectionLiteralExpCSParserRuleCall_5()); 
         }
-        pushFollow(FollowSets002.FOLLOW_ruleCollectionLiteralExpCS_in_synpred188_InternalOCLinEcore11933);
+        pushFollow(FollowSets002.FOLLOW_ruleCollectionLiteralExpCS_in_synpred167_InternalOCLinEcore12094);
         ruleCollectionLiteralExpCS();
 
         state._fsp--;
@@ -81011,20 +85297,20 @@
 
         }
     }
-    // $ANTLR end synpred188_InternalOCLinEcore
+    // $ANTLR end synpred167_InternalOCLinEcore
 
-    // $ANTLR start synpred190_InternalOCLinEcore
-    public final void synpred190_InternalOCLinEcore_fragment() throws RecognitionException {   
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5327:6: ( ( ruleTypeLiteralExpCS ) )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5327:6: ( ruleTypeLiteralExpCS )
+    // $ANTLR start synpred169_InternalOCLinEcore
+    public final void synpred169_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5485:6: ( ( ruleTypeLiteralExpCS ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5485:6: ( ruleTypeLiteralExpCS )
         {
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5327:6: ( ruleTypeLiteralExpCS )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5328:1: ruleTypeLiteralExpCS
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5485:6: ( ruleTypeLiteralExpCS )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:5486:1: ruleTypeLiteralExpCS
         {
         if ( state.backtracking==0 ) {
            before(grammarAccess.getPrimaryExpCSAccess().getTypeLiteralExpCSParserRuleCall_7()); 
         }
-        pushFollow(FollowSets002.FOLLOW_ruleTypeLiteralExpCS_in_synpred190_InternalOCLinEcore11967);
+        pushFollow(FollowSets002.FOLLOW_ruleTypeLiteralExpCS_in_synpred169_InternalOCLinEcore12128);
         ruleTypeLiteralExpCS();
 
         state._fsp--;
@@ -81035,15 +85321,1433 @@
 
         }
     }
-    // $ANTLR end synpred190_InternalOCLinEcore
+    // $ANTLR end synpred169_InternalOCLinEcore
+
+    // $ANTLR start synpred205_InternalOCLinEcore
+    public final void synpred205_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7687:2: ( rule__AttributeCS__UnorderedGroup_5 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:7687:2: rule__AttributeCS__UnorderedGroup_5
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5_in_synpred205_InternalOCLinEcore16575);
+        rule__AttributeCS__UnorderedGroup_5();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred205_InternalOCLinEcore
+
+    // $ANTLR start synpred245_InternalOCLinEcore
+    public final void synpred245_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11377:2: ( rule__OperationCS__UnorderedGroup_9 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:11377:2: rule__OperationCS__UnorderedGroup_9
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_9_in_synpred245_InternalOCLinEcore23875);
+        rule__OperationCS__UnorderedGroup_9();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred245_InternalOCLinEcore
+
+    // $ANTLR start synpred260_InternalOCLinEcore
+    public final void synpred260_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12807:2: ( rule__ParameterCS__UnorderedGroup_2 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:12807:2: rule__ParameterCS__UnorderedGroup_2
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ParameterCS__UnorderedGroup_2_in_synpred260_InternalOCLinEcore26688);
+        rule__ParameterCS__UnorderedGroup_2();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred260_InternalOCLinEcore
+
+    // $ANTLR start synpred263_InternalOCLinEcore
+    public final void synpred263_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13027:2: ( ',' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13027:2: ','
+        {
+        match(input,107,FollowSets002.FOLLOW_107_in_synpred263_InternalOCLinEcore27121); if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred263_InternalOCLinEcore
+
+    // $ANTLR start synpred270_InternalOCLinEcore
+    public final void synpred270_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13459:2: ( rule__ReferenceCS__UnorderedGroup_6 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:13459:2: rule__ReferenceCS__UnorderedGroup_6
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6_in_synpred270_InternalOCLinEcore27991);
+        rule__ReferenceCS__UnorderedGroup_6();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred270_InternalOCLinEcore
+
+    // $ANTLR start synpred350_InternalOCLinEcore
+    public final void synpred350_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23932:2: ( rule__AttributeCS__UnorderedGroup_0__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23932:2: rule__AttributeCS__UnorderedGroup_0__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_0__0_in_synpred350_InternalOCLinEcore48607);
+        rule__AttributeCS__UnorderedGroup_0__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred350_InternalOCLinEcore
+
+    // $ANTLR start synpred351_InternalOCLinEcore
+    public final void synpred351_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23950:4: ( ({...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23950:4: ({...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23950:4: ({...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23951:5: {...}? => ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred351_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23951:108: ( ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23952:6: ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23958:6: ( ( rule__AttributeCS__IsStaticAssignment_0_0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23960:7: ( rule__AttributeCS__IsStaticAssignment_0_0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getAttributeCSAccess().getIsStaticAssignment_0_0()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23961:7: ( rule__AttributeCS__IsStaticAssignment_0_0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23961:8: rule__AttributeCS__IsStaticAssignment_0_0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__IsStaticAssignment_0_0_in_synpred351_InternalOCLinEcore48694);
+        rule__AttributeCS__IsStaticAssignment_0_0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred351_InternalOCLinEcore
+
+    // $ANTLR start synpred352_InternalOCLinEcore
+    public final void synpred352_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23999:2: ( rule__AttributeCS__UnorderedGroup_0__1 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:23999:2: rule__AttributeCS__UnorderedGroup_0__1
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_0__1_in_synpred352_InternalOCLinEcore48847);
+        rule__AttributeCS__UnorderedGroup_0__1();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred352_InternalOCLinEcore
+
+    // $ANTLR start synpred353_InternalOCLinEcore
+    public final void synpred353_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24047:4: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24047:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24047:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24048:5: {...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred353_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24048:108: ( ( ( rule__AttributeCS__Group_5_0__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24049:6: ( ( rule__AttributeCS__Group_5_0__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24055:6: ( ( rule__AttributeCS__Group_5_0__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24057:7: ( rule__AttributeCS__Group_5_0__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getAttributeCSAccess().getGroup_5_0()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24058:7: ( rule__AttributeCS__Group_5_0__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24058:8: rule__AttributeCS__Group_5_0__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_0__0_in_synpred353_InternalOCLinEcore48989);
+        rule__AttributeCS__Group_5_0__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred353_InternalOCLinEcore
+
+    // $ANTLR start synpred354_InternalOCLinEcore
+    public final void synpred354_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24064:4: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24064:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24064:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24065:5: {...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred354_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24065:108: ( ( ( rule__AttributeCS__Group_5_1__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24066:6: ( ( rule__AttributeCS__Group_5_1__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24072:6: ( ( rule__AttributeCS__Group_5_1__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24074:7: ( rule__AttributeCS__Group_5_1__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getAttributeCSAccess().getGroup_5_1()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24075:7: ( rule__AttributeCS__Group_5_1__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24075:8: rule__AttributeCS__Group_5_1__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_1__0_in_synpred354_InternalOCLinEcore49080);
+        rule__AttributeCS__Group_5_1__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred354_InternalOCLinEcore
+
+    // $ANTLR start synpred355_InternalOCLinEcore
+    public final void synpred355_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24081:4: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24081:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24081:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24082:5: {...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred355_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24082:108: ( ( ( rule__AttributeCS__Group_5_2__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24083:6: ( ( rule__AttributeCS__Group_5_2__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24089:6: ( ( rule__AttributeCS__Group_5_2__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24091:7: ( rule__AttributeCS__Group_5_2__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getAttributeCSAccess().getGroup_5_2()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24092:7: ( rule__AttributeCS__Group_5_2__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24092:8: rule__AttributeCS__Group_5_2__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_2__0_in_synpred355_InternalOCLinEcore49171);
+        rule__AttributeCS__Group_5_2__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred355_InternalOCLinEcore
+
+    // $ANTLR start synpred356_InternalOCLinEcore
+    public final void synpred356_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24098:4: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24098:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24098:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24099:5: {...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred356_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24099:108: ( ( ( rule__AttributeCS__Group_5_3__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24100:6: ( ( rule__AttributeCS__Group_5_3__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24106:6: ( ( rule__AttributeCS__Group_5_3__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24108:7: ( rule__AttributeCS__Group_5_3__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getAttributeCSAccess().getGroup_5_3()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24109:7: ( rule__AttributeCS__Group_5_3__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24109:8: rule__AttributeCS__Group_5_3__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_3__0_in_synpred356_InternalOCLinEcore49262);
+        rule__AttributeCS__Group_5_3__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred356_InternalOCLinEcore
+
+    // $ANTLR start synpred357_InternalOCLinEcore
+    public final void synpred357_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24115:4: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24115:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24115:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24116:5: {...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred357_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24116:108: ( ( ( rule__AttributeCS__Group_5_4__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24117:6: ( ( rule__AttributeCS__Group_5_4__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24123:6: ( ( rule__AttributeCS__Group_5_4__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24125:7: ( rule__AttributeCS__Group_5_4__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getAttributeCSAccess().getGroup_5_4()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24126:7: ( rule__AttributeCS__Group_5_4__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24126:8: rule__AttributeCS__Group_5_4__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_4__0_in_synpred357_InternalOCLinEcore49353);
+        rule__AttributeCS__Group_5_4__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred357_InternalOCLinEcore
+
+    // $ANTLR start synpred358_InternalOCLinEcore
+    public final void synpred358_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24132:4: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24132:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24132:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24133:5: {...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred358_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24133:108: ( ( ( rule__AttributeCS__Group_5_5__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24134:6: ( ( rule__AttributeCS__Group_5_5__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24140:6: ( ( rule__AttributeCS__Group_5_5__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24142:7: ( rule__AttributeCS__Group_5_5__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getAttributeCSAccess().getGroup_5_5()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24143:7: ( rule__AttributeCS__Group_5_5__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24143:8: rule__AttributeCS__Group_5_5__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_5__0_in_synpred358_InternalOCLinEcore49444);
+        rule__AttributeCS__Group_5_5__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred358_InternalOCLinEcore
+
+    // $ANTLR start synpred359_InternalOCLinEcore
+    public final void synpred359_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24149:4: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24149:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24149:4: ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24150:5: {...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred359_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24150:108: ( ( ( rule__AttributeCS__Group_5_6__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24151:6: ( ( rule__AttributeCS__Group_5_6__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24157:6: ( ( rule__AttributeCS__Group_5_6__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24159:7: ( rule__AttributeCS__Group_5_6__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getAttributeCSAccess().getGroup_5_6()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24160:7: ( rule__AttributeCS__Group_5_6__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24160:8: rule__AttributeCS__Group_5_6__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__Group_5_6__0_in_synpred359_InternalOCLinEcore49535);
+        rule__AttributeCS__Group_5_6__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred359_InternalOCLinEcore
+
+    // $ANTLR start synpred360_InternalOCLinEcore
+    public final void synpred360_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24198:2: ( rule__AttributeCS__UnorderedGroup_5__1 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24198:2: rule__AttributeCS__UnorderedGroup_5__1
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__1_in_synpred360_InternalOCLinEcore49688);
+        rule__AttributeCS__UnorderedGroup_5__1();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred360_InternalOCLinEcore
+
+    // $ANTLR start synpred361_InternalOCLinEcore
+    public final void synpred361_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24211:2: ( rule__AttributeCS__UnorderedGroup_5__2 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24211:2: rule__AttributeCS__UnorderedGroup_5__2
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__2_in_synpred361_InternalOCLinEcore49716);
+        rule__AttributeCS__UnorderedGroup_5__2();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred361_InternalOCLinEcore
+
+    // $ANTLR start synpred362_InternalOCLinEcore
+    public final void synpred362_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24224:2: ( rule__AttributeCS__UnorderedGroup_5__3 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24224:2: rule__AttributeCS__UnorderedGroup_5__3
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__3_in_synpred362_InternalOCLinEcore49744);
+        rule__AttributeCS__UnorderedGroup_5__3();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred362_InternalOCLinEcore
+
+    // $ANTLR start synpred363_InternalOCLinEcore
+    public final void synpred363_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24237:2: ( rule__AttributeCS__UnorderedGroup_5__4 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24237:2: rule__AttributeCS__UnorderedGroup_5__4
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__4_in_synpred363_InternalOCLinEcore49772);
+        rule__AttributeCS__UnorderedGroup_5__4();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred363_InternalOCLinEcore
+
+    // $ANTLR start synpred364_InternalOCLinEcore
+    public final void synpred364_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24250:2: ( rule__AttributeCS__UnorderedGroup_5__5 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24250:2: rule__AttributeCS__UnorderedGroup_5__5
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__5_in_synpred364_InternalOCLinEcore49800);
+        rule__AttributeCS__UnorderedGroup_5__5();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred364_InternalOCLinEcore
+
+    // $ANTLR start synpred365_InternalOCLinEcore
+    public final void synpred365_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24263:2: ( rule__AttributeCS__UnorderedGroup_5__6 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24263:2: rule__AttributeCS__UnorderedGroup_5__6
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__6_in_synpred365_InternalOCLinEcore49828);
+        rule__AttributeCS__UnorderedGroup_5__6();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred365_InternalOCLinEcore
+
+    // $ANTLR start synpred366_InternalOCLinEcore
+    public final void synpred366_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24276:2: ( rule__AttributeCS__UnorderedGroup_5__7 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24276:2: rule__AttributeCS__UnorderedGroup_5__7
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__AttributeCS__UnorderedGroup_5__7_in_synpred366_InternalOCLinEcore49856);
+        rule__AttributeCS__UnorderedGroup_5__7();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred366_InternalOCLinEcore
+
+    // $ANTLR start synpred367_InternalOCLinEcore
+    public final void synpred367_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24317:2: ( rule__OperationCS__UnorderedGroup_0__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24317:2: rule__OperationCS__UnorderedGroup_0__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_0__0_in_synpred367_InternalOCLinEcore49921);
+        rule__OperationCS__UnorderedGroup_0__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred367_InternalOCLinEcore
+
+    // $ANTLR start synpred368_InternalOCLinEcore
+    public final void synpred368_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24335:4: ( ({...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24335:4: ({...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24335:4: ({...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24336:5: {...}? => ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred368_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24336:108: ( ( ( rule__OperationCS__IsStaticAssignment_0_0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24337:6: ( ( rule__OperationCS__IsStaticAssignment_0_0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24343:6: ( ( rule__OperationCS__IsStaticAssignment_0_0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24345:7: ( rule__OperationCS__IsStaticAssignment_0_0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getOperationCSAccess().getIsStaticAssignment_0_0()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24346:7: ( rule__OperationCS__IsStaticAssignment_0_0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24346:8: rule__OperationCS__IsStaticAssignment_0_0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__OperationCS__IsStaticAssignment_0_0_in_synpred368_InternalOCLinEcore50008);
+        rule__OperationCS__IsStaticAssignment_0_0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred368_InternalOCLinEcore
+
+    // $ANTLR start synpred369_InternalOCLinEcore
+    public final void synpred369_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24384:2: ( rule__OperationCS__UnorderedGroup_0__1 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24384:2: rule__OperationCS__UnorderedGroup_0__1
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_0__1_in_synpred369_InternalOCLinEcore50161);
+        rule__OperationCS__UnorderedGroup_0__1();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred369_InternalOCLinEcore
+
+    // $ANTLR start synpred370_InternalOCLinEcore
+    public final void synpred370_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24432:4: ( ({...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24432:4: ({...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24432:4: ({...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24433:5: {...}? => ( ( ( rule__OperationCS__Group_9_0__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred370_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24433:108: ( ( ( rule__OperationCS__Group_9_0__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24434:6: ( ( rule__OperationCS__Group_9_0__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24440:6: ( ( rule__OperationCS__Group_9_0__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24442:7: ( rule__OperationCS__Group_9_0__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getOperationCSAccess().getGroup_9_0()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24443:7: ( rule__OperationCS__Group_9_0__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24443:8: rule__OperationCS__Group_9_0__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__OperationCS__Group_9_0__0_in_synpred370_InternalOCLinEcore50303);
+        rule__OperationCS__Group_9_0__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred370_InternalOCLinEcore
+
+    // $ANTLR start synpred371_InternalOCLinEcore
+    public final void synpred371_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24449:4: ( ({...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24449:4: ({...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24449:4: ({...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24450:5: {...}? => ( ( ( rule__OperationCS__Group_9_1__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred371_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24450:108: ( ( ( rule__OperationCS__Group_9_1__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24451:6: ( ( rule__OperationCS__Group_9_1__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24457:6: ( ( rule__OperationCS__Group_9_1__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24459:7: ( rule__OperationCS__Group_9_1__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getOperationCSAccess().getGroup_9_1()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24460:7: ( rule__OperationCS__Group_9_1__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24460:8: rule__OperationCS__Group_9_1__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__OperationCS__Group_9_1__0_in_synpred371_InternalOCLinEcore50394);
+        rule__OperationCS__Group_9_1__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred371_InternalOCLinEcore
+
+    // $ANTLR start synpred372_InternalOCLinEcore
+    public final void synpred372_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24498:2: ( rule__OperationCS__UnorderedGroup_9__1 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24498:2: rule__OperationCS__UnorderedGroup_9__1
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_9__1_in_synpred372_InternalOCLinEcore50547);
+        rule__OperationCS__UnorderedGroup_9__1();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred372_InternalOCLinEcore
+
+    // $ANTLR start synpred373_InternalOCLinEcore
+    public final void synpred373_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24511:2: ( rule__OperationCS__UnorderedGroup_9__2 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24511:2: rule__OperationCS__UnorderedGroup_9__2
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__OperationCS__UnorderedGroup_9__2_in_synpred373_InternalOCLinEcore50575);
+        rule__OperationCS__UnorderedGroup_9__2();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred373_InternalOCLinEcore
+
+    // $ANTLR start synpred374_InternalOCLinEcore
+    public final void synpred374_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24561:4: ( ({...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24561:4: ({...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24561:4: ({...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24562:5: {...}? => ( ( ( rule__ParameterCS__Group_2_0__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred374_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24562:108: ( ( ( rule__ParameterCS__Group_2_0__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24563:6: ( ( rule__ParameterCS__Group_2_0__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24569:6: ( ( rule__ParameterCS__Group_2_0__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24571:7: ( rule__ParameterCS__Group_2_0__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getParameterCSAccess().getGroup_2_0()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24572:7: ( rule__ParameterCS__Group_2_0__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24572:8: rule__ParameterCS__Group_2_0__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ParameterCS__Group_2_0__0_in_synpred374_InternalOCLinEcore50719);
+        rule__ParameterCS__Group_2_0__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred374_InternalOCLinEcore
+
+    // $ANTLR start synpred375_InternalOCLinEcore
+    public final void synpred375_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24610:2: ( rule__ParameterCS__UnorderedGroup_2__1 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24610:2: rule__ParameterCS__UnorderedGroup_2__1
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ParameterCS__UnorderedGroup_2__1_in_synpred375_InternalOCLinEcore50872);
+        rule__ParameterCS__UnorderedGroup_2__1();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred375_InternalOCLinEcore
+
+    // $ANTLR start synpred376_InternalOCLinEcore
+    public final void synpred376_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24639:2: ( rule__ReferenceCS__UnorderedGroup_0__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24639:2: rule__ReferenceCS__UnorderedGroup_0__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_0__0_in_synpred376_InternalOCLinEcore50925);
+        rule__ReferenceCS__UnorderedGroup_0__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred376_InternalOCLinEcore
+
+    // $ANTLR start synpred377_InternalOCLinEcore
+    public final void synpred377_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24657:4: ( ({...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24657:4: ({...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24657:4: ({...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24658:5: {...}? => ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred377_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24658:108: ( ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24659:6: ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24665:6: ( ( rule__ReferenceCS__IsStaticAssignment_0_0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24667:7: ( rule__ReferenceCS__IsStaticAssignment_0_0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getReferenceCSAccess().getIsStaticAssignment_0_0()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24668:7: ( rule__ReferenceCS__IsStaticAssignment_0_0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24668:8: rule__ReferenceCS__IsStaticAssignment_0_0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__IsStaticAssignment_0_0_in_synpred377_InternalOCLinEcore51012);
+        rule__ReferenceCS__IsStaticAssignment_0_0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred377_InternalOCLinEcore
+
+    // $ANTLR start synpred378_InternalOCLinEcore
+    public final void synpred378_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24706:2: ( rule__ReferenceCS__UnorderedGroup_0__1 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24706:2: rule__ReferenceCS__UnorderedGroup_0__1
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_0__1_in_synpred378_InternalOCLinEcore51165);
+        rule__ReferenceCS__UnorderedGroup_0__1();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred378_InternalOCLinEcore
+
+    // $ANTLR start synpred379_InternalOCLinEcore
+    public final void synpred379_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24754:4: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24754:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24754:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24755:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred379_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24755:108: ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24756:6: ( ( rule__ReferenceCS__Group_6_0__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24762:6: ( ( rule__ReferenceCS__Group_6_0__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24764:7: ( rule__ReferenceCS__Group_6_0__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getReferenceCSAccess().getGroup_6_0()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24765:7: ( rule__ReferenceCS__Group_6_0__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24765:8: rule__ReferenceCS__Group_6_0__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_0__0_in_synpred379_InternalOCLinEcore51307);
+        rule__ReferenceCS__Group_6_0__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred379_InternalOCLinEcore
+
+    // $ANTLR start synpred380_InternalOCLinEcore
+    public final void synpred380_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24771:4: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24771:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24771:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24772:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred380_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24772:108: ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24773:6: ( ( rule__ReferenceCS__Group_6_1__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24779:6: ( ( rule__ReferenceCS__Group_6_1__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24781:7: ( rule__ReferenceCS__Group_6_1__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getReferenceCSAccess().getGroup_6_1()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24782:7: ( rule__ReferenceCS__Group_6_1__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24782:8: rule__ReferenceCS__Group_6_1__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_1__0_in_synpred380_InternalOCLinEcore51398);
+        rule__ReferenceCS__Group_6_1__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred380_InternalOCLinEcore
+
+    // $ANTLR start synpred381_InternalOCLinEcore
+    public final void synpred381_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24788:4: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24788:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24788:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24789:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred381_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24789:108: ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24790:6: ( ( rule__ReferenceCS__Group_6_2__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24796:6: ( ( rule__ReferenceCS__Group_6_2__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24798:7: ( rule__ReferenceCS__Group_6_2__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getReferenceCSAccess().getGroup_6_2()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24799:7: ( rule__ReferenceCS__Group_6_2__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24799:8: rule__ReferenceCS__Group_6_2__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_2__0_in_synpred381_InternalOCLinEcore51489);
+        rule__ReferenceCS__Group_6_2__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred381_InternalOCLinEcore
+
+    // $ANTLR start synpred382_InternalOCLinEcore
+    public final void synpred382_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24805:4: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24805:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24805:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24806:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred382_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24806:108: ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24807:6: ( ( rule__ReferenceCS__Group_6_3__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24813:6: ( ( rule__ReferenceCS__Group_6_3__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24815:7: ( rule__ReferenceCS__Group_6_3__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getReferenceCSAccess().getGroup_6_3()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24816:7: ( rule__ReferenceCS__Group_6_3__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24816:8: rule__ReferenceCS__Group_6_3__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_3__0_in_synpred382_InternalOCLinEcore51580);
+        rule__ReferenceCS__Group_6_3__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred382_InternalOCLinEcore
+
+    // $ANTLR start synpred383_InternalOCLinEcore
+    public final void synpred383_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24822:4: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24822:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24822:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24823:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred383_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24823:108: ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24824:6: ( ( rule__ReferenceCS__Group_6_4__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24830:6: ( ( rule__ReferenceCS__Group_6_4__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24832:7: ( rule__ReferenceCS__Group_6_4__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getReferenceCSAccess().getGroup_6_4()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24833:7: ( rule__ReferenceCS__Group_6_4__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24833:8: rule__ReferenceCS__Group_6_4__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_4__0_in_synpred383_InternalOCLinEcore51671);
+        rule__ReferenceCS__Group_6_4__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred383_InternalOCLinEcore
+
+    // $ANTLR start synpred384_InternalOCLinEcore
+    public final void synpred384_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24839:4: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24839:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24839:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24840:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred384_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24840:108: ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24841:6: ( ( rule__ReferenceCS__Group_6_5__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24847:6: ( ( rule__ReferenceCS__Group_6_5__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24849:7: ( rule__ReferenceCS__Group_6_5__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getReferenceCSAccess().getGroup_6_5()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24850:7: ( rule__ReferenceCS__Group_6_5__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24850:8: rule__ReferenceCS__Group_6_5__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_5__0_in_synpred384_InternalOCLinEcore51762);
+        rule__ReferenceCS__Group_6_5__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred384_InternalOCLinEcore
+
+    // $ANTLR start synpred385_InternalOCLinEcore
+    public final void synpred385_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24856:4: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24856:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24856:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24857:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred385_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24857:108: ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24858:6: ( ( rule__ReferenceCS__Group_6_6__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24864:6: ( ( rule__ReferenceCS__Group_6_6__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24866:7: ( rule__ReferenceCS__Group_6_6__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getReferenceCSAccess().getGroup_6_6()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24867:7: ( rule__ReferenceCS__Group_6_6__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24867:8: rule__ReferenceCS__Group_6_6__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_6__0_in_synpred385_InternalOCLinEcore51853);
+        rule__ReferenceCS__Group_6_6__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred385_InternalOCLinEcore
+
+    // $ANTLR start synpred386_InternalOCLinEcore
+    public final void synpred386_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24873:4: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24873:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24873:4: ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24874:5: {...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred386_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24874:108: ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24875:6: ( ( rule__ReferenceCS__Group_6_7__0 ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24881:6: ( ( rule__ReferenceCS__Group_6_7__0 ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24883:7: ( rule__ReferenceCS__Group_6_7__0 )
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getReferenceCSAccess().getGroup_6_7()); 
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24884:7: ( rule__ReferenceCS__Group_6_7__0 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24884:8: rule__ReferenceCS__Group_6_7__0
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__Group_6_7__0_in_synpred386_InternalOCLinEcore51944);
+        rule__ReferenceCS__Group_6_7__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred386_InternalOCLinEcore
+
+    // $ANTLR start synpred387_InternalOCLinEcore
+    public final void synpred387_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24922:2: ( rule__ReferenceCS__UnorderedGroup_6__1 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24922:2: rule__ReferenceCS__UnorderedGroup_6__1
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__1_in_synpred387_InternalOCLinEcore52097);
+        rule__ReferenceCS__UnorderedGroup_6__1();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred387_InternalOCLinEcore
+
+    // $ANTLR start synpred388_InternalOCLinEcore
+    public final void synpred388_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24935:2: ( rule__ReferenceCS__UnorderedGroup_6__2 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24935:2: rule__ReferenceCS__UnorderedGroup_6__2
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__2_in_synpred388_InternalOCLinEcore52125);
+        rule__ReferenceCS__UnorderedGroup_6__2();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred388_InternalOCLinEcore
+
+    // $ANTLR start synpred389_InternalOCLinEcore
+    public final void synpred389_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24948:2: ( rule__ReferenceCS__UnorderedGroup_6__3 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24948:2: rule__ReferenceCS__UnorderedGroup_6__3
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__3_in_synpred389_InternalOCLinEcore52153);
+        rule__ReferenceCS__UnorderedGroup_6__3();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred389_InternalOCLinEcore
+
+    // $ANTLR start synpred390_InternalOCLinEcore
+    public final void synpred390_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24961:2: ( rule__ReferenceCS__UnorderedGroup_6__4 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24961:2: rule__ReferenceCS__UnorderedGroup_6__4
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__4_in_synpred390_InternalOCLinEcore52181);
+        rule__ReferenceCS__UnorderedGroup_6__4();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred390_InternalOCLinEcore
+
+    // $ANTLR start synpred391_InternalOCLinEcore
+    public final void synpred391_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24974:2: ( rule__ReferenceCS__UnorderedGroup_6__5 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24974:2: rule__ReferenceCS__UnorderedGroup_6__5
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__5_in_synpred391_InternalOCLinEcore52209);
+        rule__ReferenceCS__UnorderedGroup_6__5();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred391_InternalOCLinEcore
+
+    // $ANTLR start synpred392_InternalOCLinEcore
+    public final void synpred392_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24987:2: ( rule__ReferenceCS__UnorderedGroup_6__6 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:24987:2: rule__ReferenceCS__UnorderedGroup_6__6
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__6_in_synpred392_InternalOCLinEcore52237);
+        rule__ReferenceCS__UnorderedGroup_6__6();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred392_InternalOCLinEcore
+
+    // $ANTLR start synpred393_InternalOCLinEcore
+    public final void synpred393_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25000:2: ( rule__ReferenceCS__UnorderedGroup_6__7 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25000:2: rule__ReferenceCS__UnorderedGroup_6__7
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__7_in_synpred393_InternalOCLinEcore52265);
+        rule__ReferenceCS__UnorderedGroup_6__7();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred393_InternalOCLinEcore
+
+    // $ANTLR start synpred394_InternalOCLinEcore
+    public final void synpred394_InternalOCLinEcore_fragment() throws RecognitionException {   
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25013:2: ( rule__ReferenceCS__UnorderedGroup_6__8 )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore.ui/src-gen/org/eclipse/ocl/xtext/oclinecore/ui/contentassist/antlr/internal/InternalOCLinEcore.g:25013:2: rule__ReferenceCS__UnorderedGroup_6__8
+        {
+        pushFollow(FollowSets002.FOLLOW_rule__ReferenceCS__UnorderedGroup_6__8_in_synpred394_InternalOCLinEcore52293);
+        rule__ReferenceCS__UnorderedGroup_6__8();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred394_InternalOCLinEcore
 
     // Delegated rules
 
-    public final boolean synpred188_InternalOCLinEcore() {
+    public final boolean synpred393_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred188_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred393_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -81053,11 +86757,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred190_InternalOCLinEcore() {
+    public final boolean synpred394_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred190_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred394_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -81067,11 +86771,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred187_InternalOCLinEcore() {
+    public final boolean synpred158_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred187_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred158_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -81081,11 +86785,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred180_InternalOCLinEcore() {
+    public final boolean synpred390_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred180_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred390_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -81095,11 +86799,711 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred179_InternalOCLinEcore() {
+    public final boolean synpred387_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred179_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred387_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred169_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred169_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred363_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred363_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred382_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred382_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred378_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred378_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred386_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred386_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred361_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred361_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred379_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred379_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred375_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred375_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred385_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred385_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred369_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred369_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred367_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred367_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred392_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred392_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred355_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred355_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred205_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred205_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred376_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred376_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred263_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred263_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred354_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred354_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred377_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred377_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred381_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred381_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred374_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred374_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred167_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred167_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred351_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred351_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred371_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred371_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred159_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred159_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred364_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred364_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred388_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred388_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred391_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred391_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred380_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred380_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred370_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred370_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred270_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred270_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred366_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred366_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred373_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred373_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred350_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred350_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred368_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred368_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred166_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred166_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred360_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred360_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred384_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred384_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred362_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred362_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred359_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred359_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred352_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred352_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred383_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred383_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred353_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred353_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred389_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred389_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred365_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred365_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred358_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred358_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred357_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred357_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred372_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred372_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred260_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred260_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred356_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred356_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred245_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred245_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -81111,969 +87515,121 @@
     }
 
 
-    protected DFA23 dfa23 = new DFA23(this);
-    protected DFA52 dfa52 = new DFA52(this);
-    protected DFA53 dfa53 = new DFA53(this);
-    protected DFA57 dfa57 = new DFA57(this);
-    protected DFA58 dfa58 = new DFA58(this);
-    protected DFA61 dfa61 = new DFA61(this);
+    protected DFA29 dfa29 = new DFA29(this);
     protected DFA67 dfa67 = new DFA67(this);
-    protected DFA124 dfa124 = new DFA124(this);
-    static final String DFA23_eotS =
+    protected DFA68 dfa68 = new DFA68(this);
+    protected DFA72 dfa72 = new DFA72(this);
+    protected DFA73 dfa73 = new DFA73(this);
+    protected DFA76 dfa76 = new DFA76(this);
+    protected DFA82 dfa82 = new DFA82(this);
+    protected DFA111 dfa111 = new DFA111(this);
+    protected DFA144 dfa144 = new DFA144(this);
+    protected DFA166 dfa166 = new DFA166(this);
+    protected DFA176 dfa176 = new DFA176(this);
+    protected DFA259 dfa259 = new DFA259(this);
+    protected DFA260 dfa260 = new DFA260(this);
+    protected DFA261 dfa261 = new DFA261(this);
+    protected DFA262 dfa262 = new DFA262(this);
+    protected DFA263 dfa263 = new DFA263(this);
+    protected DFA264 dfa264 = new DFA264(this);
+    protected DFA265 dfa265 = new DFA265(this);
+    protected DFA266 dfa266 = new DFA266(this);
+    protected DFA271 dfa271 = new DFA271(this);
+    protected DFA272 dfa272 = new DFA272(this);
+    protected DFA274 dfa274 = new DFA274(this);
+    protected DFA278 dfa278 = new DFA278(this);
+    protected DFA279 dfa279 = new DFA279(this);
+    protected DFA280 dfa280 = new DFA280(this);
+    protected DFA281 dfa281 = new DFA281(this);
+    protected DFA282 dfa282 = new DFA282(this);
+    protected DFA283 dfa283 = new DFA283(this);
+    protected DFA284 dfa284 = new DFA284(this);
+    protected DFA285 dfa285 = new DFA285(this);
+    protected DFA286 dfa286 = new DFA286(this);
+    static final String DFA29_eotS =
         "\23\uffff";
-    static final String DFA23_eofS =
+    static final String DFA29_eofS =
         "\23\uffff";
-    static final String DFA23_minS =
-        "\1\7\1\25\1\7\1\27\2\7\1\uffff\1\7\1\22\3\7\1\22\2\uffff\1\22\2"+
-        "\uffff\1\22";
-    static final String DFA23_maxS =
-        "\1\72\5\143\1\uffff\6\143\2\uffff\1\52\2\uffff\1\52";
-    static final String DFA23_acceptS =
-        "\6\uffff\1\2\6\uffff\1\1\1\5\1\uffff\1\3\1\4\1\uffff";
-    static final String DFA23_specialS =
+    static final String DFA29_minS =
+        "\1\7\1\25\1\7\1\27\2\7\1\uffff\1\7\1\22\3\7\1\22\2\uffff\2\22\2"+
+        "\uffff";
+    static final String DFA29_maxS =
+        "\1\103\5\154\1\uffff\6\154\2\uffff\2\52\2\uffff";
+    static final String DFA29_acceptS =
+        "\6\uffff\1\2\6\uffff\1\1\1\5\2\uffff\1\3\1\4";
+    static final String DFA29_specialS =
         "\23\uffff}>";
-    static final String[] DFA23_transitionS = {
+    static final String[] DFA29_transitionS = {
             "\2\6\10\uffff\1\1\1\7\2\6\1\2\1\6\1\4\1\10\2\6\1\5\10\6\1\11"+
-            "\1\6\1\12\2\6\1\3\1\13\3\6\1\14\6\6\5\uffff\1\6",
-            "\1\15\37\uffff\1\6\20\uffff\1\6\34\uffff\1\6",
-            "\2\15\10\uffff\44\15\1\6\1\uffff\6\15\11\uffff\1\6\34\uffff"+
+            "\1\6\1\12\2\6\1\3\1\13\3\6\1\14\6\6\16\uffff\1\6",
+            "\1\15\37\uffff\1\6\31\uffff\1\6\34\uffff\1\6",
+            "\2\15\10\uffff\44\15\1\6\12\uffff\6\15\11\uffff\1\6\34\uffff"+
             "\1\6",
-            "\1\15\35\uffff\1\6\20\uffff\1\6\34\uffff\1\6",
-            "\2\15\10\uffff\44\15\1\6\1\uffff\6\15\11\uffff\1\6\34\uffff"+
+            "\1\15\35\uffff\1\6\31\uffff\1\6\34\uffff\1\6",
+            "\2\15\10\uffff\44\15\1\6\12\uffff\6\15\11\uffff\1\6\34\uffff"+
             "\1\6",
-            "\2\15\10\uffff\44\15\1\6\1\uffff\6\15\11\uffff\1\6\34\uffff"+
+            "\2\15\10\uffff\44\15\1\6\12\uffff\6\15\11\uffff\1\6\34\uffff"+
             "\1\6",
             "",
-            "\2\16\10\uffff\44\16\1\6\1\uffff\6\16\11\uffff\1\6\34\uffff"+
+            "\2\16\10\uffff\44\16\1\6\12\uffff\6\16\11\uffff\1\6\34\uffff"+
             "\1\6",
-            "\1\16\21\uffff\1\20\5\uffff\1\16\3\uffff\1\17\6\uffff\1\6"+
-            "\20\uffff\1\6\34\uffff\1\6",
-            "\2\20\10\uffff\44\20\1\6\1\uffff\6\20\6\uffff\1\20\2\uffff"+
-            "\1\6\30\uffff\1\20\3\uffff\1\6",
-            "\2\21\10\uffff\44\21\1\6\1\uffff\6\21\11\uffff\1\6\34\uffff"+
+            "\1\16\5\uffff\1\20\13\uffff\1\21\5\uffff\1\16\3\uffff\1\17"+
+            "\6\uffff\1\6\31\uffff\1\6\34\uffff\1\6",
+            "\2\21\10\uffff\44\21\1\6\12\uffff\6\21\6\uffff\1\21\2\uffff"+
+            "\1\6\30\uffff\1\21\3\uffff\1\6",
+            "\2\22\10\uffff\44\22\1\6\12\uffff\6\22\11\uffff\1\6\34\uffff"+
             "\1\6",
-            "\2\16\10\uffff\44\16\1\6\1\uffff\6\16\11\uffff\1\6\34\uffff"+
+            "\2\16\10\uffff\44\16\1\6\12\uffff\6\16\11\uffff\1\6\34\uffff"+
             "\1\6",
-            "\1\16\5\uffff\1\22\13\uffff\1\20\5\uffff\1\16\12\uffff\1\6"+
-            "\20\uffff\1\6\34\uffff\1\6",
+            "\1\16\5\uffff\1\20\13\uffff\1\21\5\uffff\1\16\3\uffff\1\17"+
+            "\6\uffff\1\6\31\uffff\1\6\34\uffff\1\6",
             "",
             "",
-            "\1\16\21\uffff\1\20\5\uffff\1\16",
-            "",
-            "",
-            "\1\16\21\uffff\1\20\5\uffff\1\16"
-    };
-
-    static final short[] DFA23_eot = DFA.unpackEncodedString(DFA23_eotS);
-    static final short[] DFA23_eof = DFA.unpackEncodedString(DFA23_eofS);
-    static final char[] DFA23_min = DFA.unpackEncodedStringToUnsignedChars(DFA23_minS);
-    static final char[] DFA23_max = DFA.unpackEncodedStringToUnsignedChars(DFA23_maxS);
-    static final short[] DFA23_accept = DFA.unpackEncodedString(DFA23_acceptS);
-    static final short[] DFA23_special = DFA.unpackEncodedString(DFA23_specialS);
-    static final short[][] DFA23_transition;
-
-    static {
-        int numStates = DFA23_transitionS.length;
-        DFA23_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA23_transition[i] = DFA.unpackEncodedString(DFA23_transitionS[i]);
-        }
-    }
-
-    class DFA23 extends DFA {
-
-        public DFA23(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 23;
-            this.eot = DFA23_eot;
-            this.eof = DFA23_eof;
-            this.min = DFA23_min;
-            this.max = DFA23_max;
-            this.accept = DFA23_accept;
-            this.special = DFA23_special;
-            this.transition = DFA23_transition;
-        }
-        public String getDescription() {
-            return "3946:1: rule__ModelElementCS__Alternatives : ( ( ruleClassCS ) | ( ruleEnumerationLiteralCS ) | ( ruleOperationCS ) | ( rulePackageCS ) | ( ruleStructuralFeatureCS ) );";
-        }
-    }
-    static final String DFA52_eotS =
-        "\57\uffff";
-    static final String DFA52_eofS =
-        "\2\uffff\54\1\1\uffff";
-    static final String DFA52_minS =
-        "\1\4\1\uffff\54\75\1\uffff";
-    static final String DFA52_maxS =
-        "\1\u0084\1\uffff\54\u0085\1\uffff";
-    static final String DFA52_acceptS =
-        "\1\uffff\1\1\54\uffff\1\2";
-    static final String DFA52_specialS =
-        "\57\uffff}>";
-    static final String[] DFA52_transitionS = {
-            "\2\1\1\uffff\1\2\1\3\10\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12"+
-            "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+
-            "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+
-            "\1\43\1\44\1\45\1\46\1\47\2\uffff\1\50\1\51\1\52\1\53\1\54\1"+
-            "\55\3\1\20\uffff\16\1\1\uffff\1\1\1\uffff\1\56\7\uffff\3\1\4"+
-            "\uffff\1\1\4\uffff\2\1\14\uffff\2\1",
-            "",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
-            "\1\5\uffff\1\1\27\uffff\1\1",
-            ""
-    };
-
-    static final short[] DFA52_eot = DFA.unpackEncodedString(DFA52_eotS);
-    static final short[] DFA52_eof = DFA.unpackEncodedString(DFA52_eofS);
-    static final char[] DFA52_min = DFA.unpackEncodedStringToUnsignedChars(DFA52_minS);
-    static final char[] DFA52_max = DFA.unpackEncodedStringToUnsignedChars(DFA52_maxS);
-    static final short[] DFA52_accept = DFA.unpackEncodedString(DFA52_acceptS);
-    static final short[] DFA52_special = DFA.unpackEncodedString(DFA52_specialS);
-    static final short[][] DFA52_transition;
-
-    static {
-        int numStates = DFA52_transitionS.length;
-        DFA52_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA52_transition[i] = DFA.unpackEncodedString(DFA52_transitionS[i]);
-        }
-    }
-
-    class DFA52 extends DFA {
-
-        public DFA52(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 52;
-            this.eot = DFA52_eot;
-            this.eof = DFA52_eof;
-            this.min = DFA52_min;
-            this.max = DFA52_max;
-            this.accept = DFA52_accept;
-            this.special = DFA52_special;
-            this.transition = DFA52_transition;
-        }
-        public String getDescription() {
-            return "5046:1: rule__CollectionLiteralPartCS__Alternatives : ( ( ( rule__CollectionLiteralPartCS__Group_0__0 ) ) | ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) ) );";
-        }
-    }
-    static final String DFA53_eotS =
-        "\57\uffff";
-    static final String DFA53_eofS =
-        "\2\uffff\54\1\1\uffff";
-    static final String DFA53_minS =
-        "\1\4\1\uffff\54\75\1\uffff";
-    static final String DFA53_maxS =
-        "\1\u0084\1\uffff\54\u0085\1\uffff";
-    static final String DFA53_acceptS =
-        "\1\uffff\1\1\54\uffff\1\2";
-    static final String DFA53_specialS =
-        "\57\uffff}>";
-    static final String[] DFA53_transitionS = {
-            "\2\1\1\uffff\1\2\1\3\10\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12"+
-            "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+
-            "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+
-            "\1\43\1\44\1\45\1\46\1\47\2\uffff\1\50\1\51\1\52\1\53\1\54\1"+
-            "\55\3\1\20\uffff\16\1\1\uffff\1\1\1\uffff\1\56\7\uffff\3\1\4"+
-            "\uffff\1\1\4\uffff\2\1\14\uffff\2\1",
-            "",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
-            "\1\6\uffff\1\1\27\uffff\1\1",
-            ""
-    };
-
-    static final short[] DFA53_eot = DFA.unpackEncodedString(DFA53_eotS);
-    static final short[] DFA53_eof = DFA.unpackEncodedString(DFA53_eofS);
-    static final char[] DFA53_min = DFA.unpackEncodedStringToUnsignedChars(DFA53_minS);
-    static final char[] DFA53_max = DFA.unpackEncodedStringToUnsignedChars(DFA53_maxS);
-    static final short[] DFA53_accept = DFA.unpackEncodedString(DFA53_acceptS);
-    static final short[] DFA53_special = DFA.unpackEncodedString(DFA53_specialS);
-    static final short[][] DFA53_transition;
-
-    static {
-        int numStates = DFA53_transitionS.length;
-        DFA53_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA53_transition[i] = DFA.unpackEncodedString(DFA53_transitionS[i]);
-        }
-    }
-
-    class DFA53 extends DFA {
-
-        public DFA53(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 53;
-            this.eot = DFA53_eot;
-            this.eof = DFA53_eof;
-            this.min = DFA53_min;
-            this.max = DFA53_max;
-            this.accept = DFA53_accept;
-            this.special = DFA53_special;
-            this.transition = DFA53_transition;
-        }
-        public String getDescription() {
-            return "5068:1: rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 : ( ( ruleExpCS ) | ( rulePatternExpCS ) );";
-        }
-    }
-    static final String DFA57_eotS =
-        "\74\uffff";
-    static final String DFA57_eofS =
-        "\74\uffff";
-    static final String DFA57_minS =
-        "\1\7\64\uffff\5\0\2\uffff";
-    static final String DFA57_maxS =
-        "\1\135\64\uffff\5\0\2\uffff";
-    static final String DFA57_acceptS =
-        "\1\uffff\1\1\53\uffff\1\2\15\uffff\1\3";
-    static final String DFA57_specialS =
-        "\65\uffff\1\0\1\1\1\2\1\3\1\4\2\uffff}>";
-    static final String[] DFA57_transitionS = {
-            "\2\1\10\uffff\44\1\2\uffff\6\1\23\uffff\11\55\1\65\1\66\1\67"+
-            "\1\70\1\71",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
+            "\1\16\21\uffff\1\21\5\uffff\1\16",
+            "\1\16\21\uffff\1\21\5\uffff\1\16",
             "",
             ""
     };
 
-    static final short[] DFA57_eot = DFA.unpackEncodedString(DFA57_eotS);
-    static final short[] DFA57_eof = DFA.unpackEncodedString(DFA57_eofS);
-    static final char[] DFA57_min = DFA.unpackEncodedStringToUnsignedChars(DFA57_minS);
-    static final char[] DFA57_max = DFA.unpackEncodedStringToUnsignedChars(DFA57_maxS);
-    static final short[] DFA57_accept = DFA.unpackEncodedString(DFA57_acceptS);
-    static final short[] DFA57_special = DFA.unpackEncodedString(DFA57_specialS);
-    static final short[][] DFA57_transition;
+    static final short[] DFA29_eot = DFA.unpackEncodedString(DFA29_eotS);
+    static final short[] DFA29_eof = DFA.unpackEncodedString(DFA29_eofS);
+    static final char[] DFA29_min = DFA.unpackEncodedStringToUnsignedChars(DFA29_minS);
+    static final char[] DFA29_max = DFA.unpackEncodedStringToUnsignedChars(DFA29_maxS);
+    static final short[] DFA29_accept = DFA.unpackEncodedString(DFA29_acceptS);
+    static final short[] DFA29_special = DFA.unpackEncodedString(DFA29_specialS);
+    static final short[][] DFA29_transition;
 
     static {
-        int numStates = DFA57_transitionS.length;
-        DFA57_transition = new short[numStates][];
+        int numStates = DFA29_transitionS.length;
+        DFA29_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA57_transition[i] = DFA.unpackEncodedString(DFA57_transitionS[i]);
+            DFA29_transition[i] = DFA.unpackEncodedString(DFA29_transitionS[i]);
         }
     }
 
-    class DFA57 extends DFA {
+    class DFA29 extends DFA {
 
-        public DFA57(BaseRecognizer recognizer) {
+        public DFA29(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 57;
-            this.eot = DFA57_eot;
-            this.eof = DFA57_eof;
-            this.min = DFA57_min;
-            this.max = DFA57_max;
-            this.accept = DFA57_accept;
-            this.special = DFA57_special;
-            this.transition = DFA57_transition;
+            this.decisionNumber = 29;
+            this.eot = DFA29_eot;
+            this.eof = DFA29_eof;
+            this.min = DFA29_min;
+            this.max = DFA29_max;
+            this.accept = DFA29_accept;
+            this.special = DFA29_special;
+            this.transition = DFA29_transition;
         }
         public String getDescription() {
-            return "5186:1: rule__TypeExpCS__Alternatives_0 : ( ( ruleTypeNameExpCS ) | ( ruleTypeLiteralCS ) | ( ruleCollectionPatternCS ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA57_53 = input.LA(1);
-
-                         
-                        int index57_53 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred179_InternalOCLinEcore()) ) {s = 45;}
-
-                        else if ( (true) ) {s = 59;}
-
-                         
-                        input.seek(index57_53);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA57_54 = input.LA(1);
-
-                         
-                        int index57_54 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred179_InternalOCLinEcore()) ) {s = 45;}
-
-                        else if ( (true) ) {s = 59;}
-
-                         
-                        input.seek(index57_54);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA57_55 = input.LA(1);
-
-                         
-                        int index57_55 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred179_InternalOCLinEcore()) ) {s = 45;}
-
-                        else if ( (true) ) {s = 59;}
-
-                         
-                        input.seek(index57_55);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA57_56 = input.LA(1);
-
-                         
-                        int index57_56 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred179_InternalOCLinEcore()) ) {s = 45;}
-
-                        else if ( (true) ) {s = 59;}
-
-                         
-                        input.seek(index57_56);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA57_57 = input.LA(1);
-
-                         
-                        int index57_57 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred179_InternalOCLinEcore()) ) {s = 45;}
-
-                        else if ( (true) ) {s = 59;}
-
-                         
-                        input.seek(index57_57);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 57, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA58_eotS =
-        "\111\uffff";
-    static final String DFA58_eofS =
-        "\111\uffff";
-    static final String DFA58_minS =
-        "\1\4\2\0\106\uffff";
-    static final String DFA58_maxS =
-        "\1\u0084\2\0\106\uffff";
-    static final String DFA58_acceptS =
-        "\3\uffff\1\1\104\uffff\1\2";
-    static final String DFA58_specialS =
-        "\1\uffff\1\0\1\1\106\uffff}>";
-    static final String[] DFA58_transitionS = {
-            "\2\3\1\uffff\2\3\10\uffff\44\3\2\uffff\6\3\1\1\1\2\1\3\20\uffff"+
-            "\16\3\1\uffff\1\3\11\uffff\3\3\4\uffff\1\3\4\uffff\1\110\1\3"+
-            "\14\uffff\2\3",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA58_eot = DFA.unpackEncodedString(DFA58_eotS);
-    static final short[] DFA58_eof = DFA.unpackEncodedString(DFA58_eofS);
-    static final char[] DFA58_min = DFA.unpackEncodedStringToUnsignedChars(DFA58_minS);
-    static final char[] DFA58_max = DFA.unpackEncodedStringToUnsignedChars(DFA58_maxS);
-    static final short[] DFA58_accept = DFA.unpackEncodedString(DFA58_acceptS);
-    static final short[] DFA58_special = DFA.unpackEncodedString(DFA58_specialS);
-    static final short[][] DFA58_transition;
-
-    static {
-        int numStates = DFA58_transitionS.length;
-        DFA58_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA58_transition[i] = DFA.unpackEncodedString(DFA58_transitionS[i]);
-        }
-    }
-
-    class DFA58 extends DFA {
-
-        public DFA58(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 58;
-            this.eot = DFA58_eot;
-            this.eof = DFA58_eof;
-            this.min = DFA58_min;
-            this.max = DFA58_max;
-            this.accept = DFA58_accept;
-            this.special = DFA58_special;
-            this.transition = DFA58_transition;
-        }
-        public String getDescription() {
-            return "5214:1: rule__ExpCS__Alternatives : ( ( ( rule__ExpCS__Group_0__0 ) ) | ( rulePrefixedLetExpCS ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA58_1 = input.LA(1);
-
-                         
-                        int index58_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred180_InternalOCLinEcore()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 72;}
-
-                         
-                        input.seek(index58_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA58_2 = input.LA(1);
-
-                         
-                        int index58_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred180_InternalOCLinEcore()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 72;}
-
-                         
-                        input.seek(index58_2);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 58, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA61_eotS =
-        "\110\uffff";
-    static final String DFA61_eofS =
-        "\110\uffff";
-    static final String DFA61_minS =
-        "\1\4\12\uffff\6\0\67\uffff";
-    static final String DFA61_maxS =
-        "\1\u0084\12\uffff\6\0\67\uffff";
-    static final String DFA61_acceptS =
-        "\1\uffff\1\1\1\2\1\3\1\4\14\uffff\1\7\1\10\7\uffff\1\11\53\uffff"+
-        "\1\5\1\6";
-    static final String DFA61_specialS =
-        "\13\uffff\1\0\1\1\1\2\1\3\1\4\1\5\67\uffff}>";
-    static final String[] DFA61_transitionS = {
-            "\2\4\1\uffff\2\32\10\uffff\44\32\2\uffff\6\32\2\uffff\1\4\20"+
-            "\uffff\1\13\10\22\1\14\1\15\1\16\1\17\1\20\1\uffff\1\1\11\uffff"+
-            "\1\21\2\4\4\uffff\1\2\5\uffff\1\3\14\uffff\2\4",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA61_eot = DFA.unpackEncodedString(DFA61_eotS);
-    static final short[] DFA61_eof = DFA.unpackEncodedString(DFA61_eofS);
-    static final char[] DFA61_min = DFA.unpackEncodedStringToUnsignedChars(DFA61_minS);
-    static final char[] DFA61_max = DFA.unpackEncodedStringToUnsignedChars(DFA61_maxS);
-    static final short[] DFA61_accept = DFA.unpackEncodedString(DFA61_acceptS);
-    static final short[] DFA61_special = DFA.unpackEncodedString(DFA61_specialS);
-    static final short[][] DFA61_transition;
-
-    static {
-        int numStates = DFA61_transitionS.length;
-        DFA61_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA61_transition[i] = DFA.unpackEncodedString(DFA61_transitionS[i]);
-        }
-    }
-
-    class DFA61 extends DFA {
-
-        public DFA61(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 61;
-            this.eot = DFA61_eot;
-            this.eof = DFA61_eof;
-            this.min = DFA61_min;
-            this.max = DFA61_max;
-            this.accept = DFA61_accept;
-            this.special = DFA61_special;
-            this.transition = DFA61_transition;
-        }
-        public String getDescription() {
-            return "5280:1: rule__PrimaryExpCS__Alternatives : ( ( ruleNestedExpCS ) | ( ruleIfExpCS ) | ( ruleSelfExpCS ) | ( rulePrimitiveLiteralExpCS ) | ( ruleTupleLiteralExpCS ) | ( ruleCollectionLiteralExpCS ) | ( ruleLambdaLiteralExpCS ) | ( ruleTypeLiteralExpCS ) | ( ruleNameExpCS ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA61_11 = input.LA(1);
-
-                         
-                        int index61_11 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred187_InternalOCLinEcore()) ) {s = 70;}
-
-                        else if ( (synpred190_InternalOCLinEcore()) ) {s = 18;}
-
-                         
-                        input.seek(index61_11);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA61_12 = input.LA(1);
-
-                         
-                        int index61_12 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred188_InternalOCLinEcore()) ) {s = 71;}
-
-                        else if ( (synpred190_InternalOCLinEcore()) ) {s = 18;}
-
-                         
-                        input.seek(index61_12);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA61_13 = input.LA(1);
-
-                         
-                        int index61_13 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred188_InternalOCLinEcore()) ) {s = 71;}
-
-                        else if ( (synpred190_InternalOCLinEcore()) ) {s = 18;}
-
-                         
-                        input.seek(index61_13);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA61_14 = input.LA(1);
-
-                         
-                        int index61_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred188_InternalOCLinEcore()) ) {s = 71;}
-
-                        else if ( (synpred190_InternalOCLinEcore()) ) {s = 18;}
-
-                         
-                        input.seek(index61_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA61_15 = input.LA(1);
-
-                         
-                        int index61_15 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred188_InternalOCLinEcore()) ) {s = 71;}
-
-                        else if ( (synpred190_InternalOCLinEcore()) ) {s = 18;}
-
-                         
-                        input.seek(index61_15);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
-                        int LA61_16 = input.LA(1);
-
-                         
-                        int index61_16 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred188_InternalOCLinEcore()) ) {s = 71;}
-
-                        else if ( (synpred190_InternalOCLinEcore()) ) {s = 18;}
-
-                         
-                        input.seek(index61_16);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 61, _s, input);
-            error(nvae);
-            throw nvae;
+            return "4010:1: rule__ModelElementCS__Alternatives : ( ( ruleClassCS ) | ( ruleEnumerationLiteralCS ) | ( ruleOperationCS ) | ( rulePackageCS ) | ( ruleStructuralFeatureCS ) );";
         }
     }
     static final String DFA67_eotS =
         "\57\uffff";
     static final String DFA67_eofS =
-        "\57\uffff";
+        "\2\uffff\54\1\1\uffff";
     static final String DFA67_minS =
-        "\1\4\1\uffff\54\75\1\uffff";
+        "\1\4\1\uffff\54\106\1\uffff";
     static final String DFA67_maxS =
         "\1\u0084\1\uffff\54\u0085\1\uffff";
     static final String DFA67_acceptS =
@@ -82084,98 +87640,98 @@
             "\2\1\1\uffff\1\2\1\3\10\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12"+
             "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+
             "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+
-            "\1\43\1\44\1\45\1\46\1\47\2\uffff\1\50\1\51\1\52\1\53\1\54\1"+
-            "\55\3\1\20\uffff\16\1\1\uffff\1\1\1\uffff\1\56\7\uffff\3\1\4"+
-            "\uffff\1\1\4\uffff\2\1\14\uffff\2\1",
+            "\1\43\1\44\1\45\1\46\1\47\13\uffff\1\50\1\51\1\52\1\53\1\54"+
+            "\1\55\3\1\20\uffff\16\1\1\uffff\1\1\1\uffff\1\56\7\uffff\3\1"+
+            "\4\uffff\1\1\4\uffff\2\1\3\uffff\2\1",
             "",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
-            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
-            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\23\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\2"+
+            "\1\5\uffff\1\1\16\uffff\1\1",
             ""
     };
 
@@ -82209,106 +87765,4383 @@
             this.transition = DFA67_transition;
         }
         public String getDescription() {
-            return "5432:1: rule__IfExpCS__OwnedConditionAlternatives_1_0 : ( ( ruleExpCS ) | ( rulePatternExpCS ) );";
+            return "5204:1: rule__CollectionLiteralPartCS__Alternatives : ( ( ( rule__CollectionLiteralPartCS__Group_0__0 ) ) | ( ( rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1 ) ) );";
         }
     }
-    static final String DFA124_eotS =
+    static final String DFA68_eotS =
         "\57\uffff";
-    static final String DFA124_eofS =
-        "\57\uffff";
-    static final String DFA124_minS =
-        "\1\5\54\65\2\uffff";
-    static final String DFA124_maxS =
-        "\1\74\54\u0080\2\uffff";
-    static final String DFA124_acceptS =
-        "\55\uffff\1\2\1\1";
-    static final String DFA124_specialS =
+    static final String DFA68_eofS =
+        "\2\uffff\54\1\1\uffff";
+    static final String DFA68_minS =
+        "\1\4\1\uffff\54\106\1\uffff";
+    static final String DFA68_maxS =
+        "\1\u0084\1\uffff\54\u0085\1\uffff";
+    static final String DFA68_acceptS =
+        "\1\uffff\1\1\54\uffff\1\2";
+    static final String DFA68_specialS =
         "\57\uffff}>";
-    static final String[] DFA124_transitionS = {
-            "\1\55\1\uffff\1\1\1\2\10\uffff\1\3\1\4\1\5\1\6\1\7\1\10\1\11"+
-            "\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25"+
-            "\1\26\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+
-            "\1\42\1\43\1\44\1\45\1\46\2\uffff\1\47\1\50\1\51\1\52\1\53\1"+
-            "\54",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
-            "\1\55\53\uffff\1\56\4\uffff\1\55\31\uffff\1\55",
+    static final String[] DFA68_transitionS = {
+            "\2\1\1\uffff\1\2\1\3\10\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12"+
+            "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+
+            "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+
+            "\1\43\1\44\1\45\1\46\1\47\13\uffff\1\50\1\51\1\52\1\53\1\54"+
+            "\1\55\3\1\20\uffff\16\1\1\uffff\1\1\1\uffff\1\56\7\uffff\3\1"+
+            "\4\uffff\1\1\4\uffff\2\1\3\uffff\2\1",
+            "",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\3\1\1\uffff\1"+
+            "\1\6\uffff\1\1\16\uffff\1\1",
+            ""
+    };
+
+    static final short[] DFA68_eot = DFA.unpackEncodedString(DFA68_eotS);
+    static final short[] DFA68_eof = DFA.unpackEncodedString(DFA68_eofS);
+    static final char[] DFA68_min = DFA.unpackEncodedStringToUnsignedChars(DFA68_minS);
+    static final char[] DFA68_max = DFA.unpackEncodedStringToUnsignedChars(DFA68_maxS);
+    static final short[] DFA68_accept = DFA.unpackEncodedString(DFA68_acceptS);
+    static final short[] DFA68_special = DFA.unpackEncodedString(DFA68_specialS);
+    static final short[][] DFA68_transition;
+
+    static {
+        int numStates = DFA68_transitionS.length;
+        DFA68_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA68_transition[i] = DFA.unpackEncodedString(DFA68_transitionS[i]);
+        }
+    }
+
+    class DFA68 extends DFA {
+
+        public DFA68(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 68;
+            this.eot = DFA68_eot;
+            this.eof = DFA68_eof;
+            this.min = DFA68_min;
+            this.max = DFA68_max;
+            this.accept = DFA68_accept;
+            this.special = DFA68_special;
+            this.transition = DFA68_transition;
+        }
+        public String getDescription() {
+            return "5226:1: rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0 : ( ( ruleExpCS ) | ( rulePatternExpCS ) );";
+        }
+    }
+    static final String DFA72_eotS =
+        "\74\uffff";
+    static final String DFA72_eofS =
+        "\74\uffff";
+    static final String DFA72_minS =
+        "\1\7\64\uffff\5\0\2\uffff";
+    static final String DFA72_maxS =
+        "\1\146\64\uffff\5\0\2\uffff";
+    static final String DFA72_acceptS =
+        "\1\uffff\1\1\53\uffff\1\2\15\uffff\1\3";
+    static final String DFA72_specialS =
+        "\65\uffff\1\0\1\1\1\2\1\3\1\4\2\uffff}>";
+    static final String[] DFA72_transitionS = {
+            "\2\1\10\uffff\44\1\13\uffff\6\1\23\uffff\11\55\1\65\1\66\1"+
+            "\67\1\70\1\71",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             "",
             ""
     };
 
-    static final short[] DFA124_eot = DFA.unpackEncodedString(DFA124_eotS);
-    static final short[] DFA124_eof = DFA.unpackEncodedString(DFA124_eofS);
-    static final char[] DFA124_min = DFA.unpackEncodedStringToUnsignedChars(DFA124_minS);
-    static final char[] DFA124_max = DFA.unpackEncodedStringToUnsignedChars(DFA124_maxS);
-    static final short[] DFA124_accept = DFA.unpackEncodedString(DFA124_acceptS);
-    static final short[] DFA124_special = DFA.unpackEncodedString(DFA124_specialS);
-    static final short[][] DFA124_transition;
+    static final short[] DFA72_eot = DFA.unpackEncodedString(DFA72_eotS);
+    static final short[] DFA72_eof = DFA.unpackEncodedString(DFA72_eofS);
+    static final char[] DFA72_min = DFA.unpackEncodedStringToUnsignedChars(DFA72_minS);
+    static final char[] DFA72_max = DFA.unpackEncodedStringToUnsignedChars(DFA72_maxS);
+    static final short[] DFA72_accept = DFA.unpackEncodedString(DFA72_acceptS);
+    static final short[] DFA72_special = DFA.unpackEncodedString(DFA72_specialS);
+    static final short[][] DFA72_transition;
 
     static {
-        int numStates = DFA124_transitionS.length;
-        DFA124_transition = new short[numStates][];
+        int numStates = DFA72_transitionS.length;
+        DFA72_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA124_transition[i] = DFA.unpackEncodedString(DFA124_transitionS[i]);
+            DFA72_transition[i] = DFA.unpackEncodedString(DFA72_transitionS[i]);
         }
     }
 
-    class DFA124 extends DFA {
+    class DFA72 extends DFA {
 
-        public DFA124(BaseRecognizer recognizer) {
+        public DFA72(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 124;
-            this.eot = DFA124_eot;
-            this.eof = DFA124_eof;
-            this.min = DFA124_min;
-            this.max = DFA124_max;
-            this.accept = DFA124_accept;
-            this.special = DFA124_special;
-            this.transition = DFA124_transition;
+            this.decisionNumber = 72;
+            this.eot = DFA72_eot;
+            this.eof = DFA72_eof;
+            this.min = DFA72_min;
+            this.max = DFA72_max;
+            this.accept = DFA72_accept;
+            this.special = DFA72_special;
+            this.transition = DFA72_transition;
         }
         public String getDescription() {
-            return "10134:1: ( rule__ImportCS__Group_1__0 )?";
+            return "5344:1: rule__TypeExpCS__Alternatives_0 : ( ( ruleTypeNameExpCS ) | ( ruleTypeLiteralCS ) | ( ruleCollectionPatternCS ) );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA72_53 = input.LA(1);
+
+                         
+                        int index72_53 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred158_InternalOCLinEcore()) ) {s = 45;}
+
+                        else if ( (true) ) {s = 59;}
+
+                         
+                        input.seek(index72_53);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA72_54 = input.LA(1);
+
+                         
+                        int index72_54 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred158_InternalOCLinEcore()) ) {s = 45;}
+
+                        else if ( (true) ) {s = 59;}
+
+                         
+                        input.seek(index72_54);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA72_55 = input.LA(1);
+
+                         
+                        int index72_55 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred158_InternalOCLinEcore()) ) {s = 45;}
+
+                        else if ( (true) ) {s = 59;}
+
+                         
+                        input.seek(index72_55);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA72_56 = input.LA(1);
+
+                         
+                        int index72_56 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred158_InternalOCLinEcore()) ) {s = 45;}
+
+                        else if ( (true) ) {s = 59;}
+
+                         
+                        input.seek(index72_56);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA72_57 = input.LA(1);
+
+                         
+                        int index72_57 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred158_InternalOCLinEcore()) ) {s = 45;}
+
+                        else if ( (true) ) {s = 59;}
+
+                         
+                        input.seek(index72_57);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 72, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA73_eotS =
+        "\111\uffff";
+    static final String DFA73_eofS =
+        "\111\uffff";
+    static final String DFA73_minS =
+        "\1\4\2\0\106\uffff";
+    static final String DFA73_maxS =
+        "\1\u0084\2\0\106\uffff";
+    static final String DFA73_acceptS =
+        "\3\uffff\1\1\104\uffff\1\2";
+    static final String DFA73_specialS =
+        "\1\uffff\1\0\1\1\106\uffff}>";
+    static final String[] DFA73_transitionS = {
+            "\2\3\1\uffff\2\3\10\uffff\44\3\13\uffff\6\3\1\1\1\2\1\3\20"+
+            "\uffff\16\3\1\uffff\1\3\11\uffff\3\3\4\uffff\1\3\4\uffff\1\110"+
+            "\1\3\3\uffff\2\3",
+            "\1\uffff",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA73_eot = DFA.unpackEncodedString(DFA73_eotS);
+    static final short[] DFA73_eof = DFA.unpackEncodedString(DFA73_eofS);
+    static final char[] DFA73_min = DFA.unpackEncodedStringToUnsignedChars(DFA73_minS);
+    static final char[] DFA73_max = DFA.unpackEncodedStringToUnsignedChars(DFA73_maxS);
+    static final short[] DFA73_accept = DFA.unpackEncodedString(DFA73_acceptS);
+    static final short[] DFA73_special = DFA.unpackEncodedString(DFA73_specialS);
+    static final short[][] DFA73_transition;
+
+    static {
+        int numStates = DFA73_transitionS.length;
+        DFA73_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA73_transition[i] = DFA.unpackEncodedString(DFA73_transitionS[i]);
+        }
+    }
+
+    class DFA73 extends DFA {
+
+        public DFA73(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 73;
+            this.eot = DFA73_eot;
+            this.eof = DFA73_eof;
+            this.min = DFA73_min;
+            this.max = DFA73_max;
+            this.accept = DFA73_accept;
+            this.special = DFA73_special;
+            this.transition = DFA73_transition;
+        }
+        public String getDescription() {
+            return "5372:1: rule__ExpCS__Alternatives : ( ( ( rule__ExpCS__Group_0__0 ) ) | ( rulePrefixedLetExpCS ) );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA73_1 = input.LA(1);
+
+                         
+                        int index73_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred159_InternalOCLinEcore()) ) {s = 3;}
+
+                        else if ( (true) ) {s = 72;}
+
+                         
+                        input.seek(index73_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA73_2 = input.LA(1);
+
+                         
+                        int index73_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred159_InternalOCLinEcore()) ) {s = 3;}
+
+                        else if ( (true) ) {s = 72;}
+
+                         
+                        input.seek(index73_2);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 73, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA76_eotS =
+        "\110\uffff";
+    static final String DFA76_eofS =
+        "\110\uffff";
+    static final String DFA76_minS =
+        "\1\4\12\uffff\6\0\67\uffff";
+    static final String DFA76_maxS =
+        "\1\u0084\12\uffff\6\0\67\uffff";
+    static final String DFA76_acceptS =
+        "\1\uffff\1\1\1\2\1\3\1\4\14\uffff\1\7\1\10\7\uffff\1\11\53\uffff"+
+        "\1\5\1\6";
+    static final String DFA76_specialS =
+        "\13\uffff\1\0\1\1\1\2\1\3\1\4\1\5\67\uffff}>";
+    static final String[] DFA76_transitionS = {
+            "\2\4\1\uffff\2\32\10\uffff\44\32\13\uffff\6\32\2\uffff\1\4"+
+            "\20\uffff\1\13\10\22\1\14\1\15\1\16\1\17\1\20\1\uffff\1\1\11"+
+            "\uffff\1\21\2\4\4\uffff\1\2\5\uffff\1\3\3\uffff\2\4",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA76_eot = DFA.unpackEncodedString(DFA76_eotS);
+    static final short[] DFA76_eof = DFA.unpackEncodedString(DFA76_eofS);
+    static final char[] DFA76_min = DFA.unpackEncodedStringToUnsignedChars(DFA76_minS);
+    static final char[] DFA76_max = DFA.unpackEncodedStringToUnsignedChars(DFA76_maxS);
+    static final short[] DFA76_accept = DFA.unpackEncodedString(DFA76_acceptS);
+    static final short[] DFA76_special = DFA.unpackEncodedString(DFA76_specialS);
+    static final short[][] DFA76_transition;
+
+    static {
+        int numStates = DFA76_transitionS.length;
+        DFA76_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA76_transition[i] = DFA.unpackEncodedString(DFA76_transitionS[i]);
+        }
+    }
+
+    class DFA76 extends DFA {
+
+        public DFA76(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 76;
+            this.eot = DFA76_eot;
+            this.eof = DFA76_eof;
+            this.min = DFA76_min;
+            this.max = DFA76_max;
+            this.accept = DFA76_accept;
+            this.special = DFA76_special;
+            this.transition = DFA76_transition;
+        }
+        public String getDescription() {
+            return "5438:1: rule__PrimaryExpCS__Alternatives : ( ( ruleNestedExpCS ) | ( ruleIfExpCS ) | ( ruleSelfExpCS ) | ( rulePrimitiveLiteralExpCS ) | ( ruleTupleLiteralExpCS ) | ( ruleCollectionLiteralExpCS ) | ( ruleLambdaLiteralExpCS ) | ( ruleTypeLiteralExpCS ) | ( ruleNameExpCS ) );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA76_11 = input.LA(1);
+
+                         
+                        int index76_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred166_InternalOCLinEcore()) ) {s = 70;}
+
+                        else if ( (synpred169_InternalOCLinEcore()) ) {s = 18;}
+
+                         
+                        input.seek(index76_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA76_12 = input.LA(1);
+
+                         
+                        int index76_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred167_InternalOCLinEcore()) ) {s = 71;}
+
+                        else if ( (synpred169_InternalOCLinEcore()) ) {s = 18;}
+
+                         
+                        input.seek(index76_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA76_13 = input.LA(1);
+
+                         
+                        int index76_13 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred167_InternalOCLinEcore()) ) {s = 71;}
+
+                        else if ( (synpred169_InternalOCLinEcore()) ) {s = 18;}
+
+                         
+                        input.seek(index76_13);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA76_14 = input.LA(1);
+
+                         
+                        int index76_14 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred167_InternalOCLinEcore()) ) {s = 71;}
+
+                        else if ( (synpred169_InternalOCLinEcore()) ) {s = 18;}
+
+                         
+                        input.seek(index76_14);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA76_15 = input.LA(1);
+
+                         
+                        int index76_15 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred167_InternalOCLinEcore()) ) {s = 71;}
+
+                        else if ( (synpred169_InternalOCLinEcore()) ) {s = 18;}
+
+                         
+                        input.seek(index76_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA76_16 = input.LA(1);
+
+                         
+                        int index76_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred167_InternalOCLinEcore()) ) {s = 71;}
+
+                        else if ( (synpred169_InternalOCLinEcore()) ) {s = 18;}
+
+                         
+                        input.seek(index76_16);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 76, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA82_eotS =
+        "\57\uffff";
+    static final String DFA82_eofS =
+        "\57\uffff";
+    static final String DFA82_minS =
+        "\1\4\1\uffff\54\106\1\uffff";
+    static final String DFA82_maxS =
+        "\1\u0084\1\uffff\54\u0085\1\uffff";
+    static final String DFA82_acceptS =
+        "\1\uffff\1\1\54\uffff\1\2";
+    static final String DFA82_specialS =
+        "\57\uffff}>";
+    static final String[] DFA82_transitionS = {
+            "\2\1\1\uffff\1\2\1\3\10\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12"+
+            "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+
+            "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+
+            "\1\43\1\44\1\45\1\46\1\47\13\uffff\1\50\1\51\1\52\1\53\1\54"+
+            "\1\55\3\1\20\uffff\16\1\1\uffff\1\1\1\uffff\1\56\7\uffff\3\1"+
+            "\4\uffff\1\1\4\uffff\2\1\3\uffff\2\1",
+            "",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            "\1\1\1\uffff\21\1\17\uffff\1\1\1\uffff\1\56\1\uffff\1\1\2"+
+            "\uffff\1\1\6\uffff\1\1\3\uffff\1\1\12\uffff\1\1",
+            ""
+    };
+
+    static final short[] DFA82_eot = DFA.unpackEncodedString(DFA82_eotS);
+    static final short[] DFA82_eof = DFA.unpackEncodedString(DFA82_eofS);
+    static final char[] DFA82_min = DFA.unpackEncodedStringToUnsignedChars(DFA82_minS);
+    static final char[] DFA82_max = DFA.unpackEncodedStringToUnsignedChars(DFA82_maxS);
+    static final short[] DFA82_accept = DFA.unpackEncodedString(DFA82_acceptS);
+    static final short[] DFA82_special = DFA.unpackEncodedString(DFA82_specialS);
+    static final short[][] DFA82_transition;
+
+    static {
+        int numStates = DFA82_transitionS.length;
+        DFA82_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA82_transition[i] = DFA.unpackEncodedString(DFA82_transitionS[i]);
+        }
+    }
+
+    class DFA82 extends DFA {
+
+        public DFA82(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 82;
+            this.eot = DFA82_eot;
+            this.eof = DFA82_eof;
+            this.min = DFA82_min;
+            this.max = DFA82_max;
+            this.accept = DFA82_accept;
+            this.special = DFA82_special;
+            this.transition = DFA82_transition;
+        }
+        public String getDescription() {
+            return "5590:1: rule__IfExpCS__OwnedConditionAlternatives_1_0 : ( ( ruleExpCS ) | ( rulePatternExpCS ) );";
+        }
+    }
+    static final String DFA111_eotS =
+        "\22\uffff";
+    static final String DFA111_eofS =
+        "\22\uffff";
+    static final String DFA111_minS =
+        "\1\35\1\0\20\uffff";
+    static final String DFA111_maxS =
+        "\1\u0081\1\0\20\uffff";
+    static final String DFA111_acceptS =
+        "\2\uffff\17\1\1\2";
+    static final String DFA111_specialS =
+        "\1\0\1\1\20\uffff}>";
+    static final String[] DFA111_transitionS = {
+            "\1\2\7\uffff\1\4\5\uffff\1\6\5\uffff\1\10\1\13\1\14\1\16\1"+
+            "\21\1\uffff\1\3\1\5\1\7\1\11\1\15\1\17\57\uffff\1\1\1\20\23"+
+            "\uffff\1\12",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA111_eot = DFA.unpackEncodedString(DFA111_eotS);
+    static final short[] DFA111_eof = DFA.unpackEncodedString(DFA111_eofS);
+    static final char[] DFA111_min = DFA.unpackEncodedStringToUnsignedChars(DFA111_minS);
+    static final char[] DFA111_max = DFA.unpackEncodedStringToUnsignedChars(DFA111_maxS);
+    static final short[] DFA111_accept = DFA.unpackEncodedString(DFA111_acceptS);
+    static final short[] DFA111_special = DFA.unpackEncodedString(DFA111_specialS);
+    static final short[][] DFA111_transition;
+
+    static {
+        int numStates = DFA111_transitionS.length;
+        DFA111_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA111_transition[i] = DFA.unpackEncodedString(DFA111_transitionS[i]);
+        }
+    }
+
+    class DFA111 extends DFA {
+
+        public DFA111(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 111;
+            this.eot = DFA111_eot;
+            this.eof = DFA111_eof;
+            this.min = DFA111_min;
+            this.max = DFA111_max;
+            this.accept = DFA111_accept;
+            this.special = DFA111_special;
+            this.transition = DFA111_transition;
+        }
+        public String getDescription() {
+            return "7687:1: ( rule__AttributeCS__UnorderedGroup_5 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA111_0 = input.LA(1);
+
+                         
+                        int index111_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA111_0==108) ) {s = 1;}
+
+                        else if ( LA111_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 2;}
+
+                        else if ( LA111_0 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA111_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 4;}
+
+                        else if ( LA111_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA111_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( LA111_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA111_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 8;}
+
+                        else if ( LA111_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA111_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 10;}
+
+                        else if ( LA111_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA111_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 12;}
+
+                        else if ( LA111_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA111_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 14;}
+
+                        else if ( LA111_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA111_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( (LA111_0==53) ) {s = 17;}
+
+                         
+                        input.seek(index111_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA111_1 = input.LA(1);
+
+                         
+                        int index111_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred205_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 16;}
+
+                        else if ( (true) ) {s = 17;}
+
+                         
+                        input.seek(index111_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 111, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA144_eotS =
+        "\57\uffff";
+    static final String DFA144_eofS =
+        "\57\uffff";
+    static final String DFA144_minS =
+        "\1\5\54\65\2\uffff";
+    static final String DFA144_maxS =
+        "\1\105\54\u0082\2\uffff";
+    static final String DFA144_acceptS =
+        "\55\uffff\1\2\1\1";
+    static final String DFA144_specialS =
+        "\57\uffff}>";
+    static final String[] DFA144_transitionS = {
+            "\1\55\1\uffff\1\1\1\2\10\uffff\1\3\1\4\1\5\1\6\1\7\1\10\1\11"+
+            "\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25"+
+            "\1\26\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+
+            "\1\42\1\43\1\44\1\45\1\46\13\uffff\1\47\1\50\1\51\1\52\1\53"+
+            "\1\54",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "\1\55\64\uffff\1\56\4\uffff\1\55\22\uffff\1\55",
+            "",
+            ""
+    };
+
+    static final short[] DFA144_eot = DFA.unpackEncodedString(DFA144_eotS);
+    static final short[] DFA144_eof = DFA.unpackEncodedString(DFA144_eofS);
+    static final char[] DFA144_min = DFA.unpackEncodedStringToUnsignedChars(DFA144_minS);
+    static final char[] DFA144_max = DFA.unpackEncodedStringToUnsignedChars(DFA144_maxS);
+    static final short[] DFA144_accept = DFA.unpackEncodedString(DFA144_acceptS);
+    static final short[] DFA144_special = DFA.unpackEncodedString(DFA144_specialS);
+    static final short[][] DFA144_transition;
+
+    static {
+        int numStates = DFA144_transitionS.length;
+        DFA144_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA144_transition[i] = DFA.unpackEncodedString(DFA144_transitionS[i]);
+        }
+    }
+
+    class DFA144 extends DFA {
+
+        public DFA144(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 144;
+            this.eot = DFA144_eot;
+            this.eof = DFA144_eof;
+            this.min = DFA144_min;
+            this.max = DFA144_max;
+            this.accept = DFA144_accept;
+            this.special = DFA144_special;
+            this.transition = DFA144_transition;
+        }
+        public String getDescription() {
+            return "10634:1: ( rule__ImportCS__Group_1__0 )?";
+        }
+    }
+    static final String DFA166_eotS =
+        "\17\uffff";
+    static final String DFA166_eofS =
+        "\1\5\1\14\15\uffff";
+    static final String DFA166_minS =
+        "\1\62\1\45\4\uffff\1\0\10\uffff";
+    static final String DFA166_maxS =
+        "\2\u0081\4\uffff\1\0\10\uffff";
+    static final String DFA166_acceptS =
+        "\2\uffff\3\1\1\2\1\uffff\10\1";
+    static final String DFA166_specialS =
+        "\1\0\1\2\4\uffff\1\1\10\uffff}>";
+    static final String[] DFA166_transitionS = {
+            "\1\3\66\uffff\1\5\1\uffff\1\5\1\1\1\4\23\uffff\1\2",
+            "\1\7\14\uffff\1\13\5\uffff\1\10\7\uffff\2\5\3\uffff\1\5\43"+
+            "\uffff\1\16\1\uffff\1\15\1\11\1\6\23\uffff\1\12",
+            "",
+            "",
+            "",
+            "",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA166_eot = DFA.unpackEncodedString(DFA166_eotS);
+    static final short[] DFA166_eof = DFA.unpackEncodedString(DFA166_eofS);
+    static final char[] DFA166_min = DFA.unpackEncodedStringToUnsignedChars(DFA166_minS);
+    static final char[] DFA166_max = DFA.unpackEncodedStringToUnsignedChars(DFA166_maxS);
+    static final short[] DFA166_accept = DFA.unpackEncodedString(DFA166_acceptS);
+    static final short[] DFA166_special = DFA.unpackEncodedString(DFA166_specialS);
+    static final short[][] DFA166_transition;
+
+    static {
+        int numStates = DFA166_transitionS.length;
+        DFA166_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA166_transition[i] = DFA.unpackEncodedString(DFA166_transitionS[i]);
+        }
+    }
+
+    class DFA166 extends DFA {
+
+        public DFA166(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 166;
+            this.eot = DFA166_eot;
+            this.eof = DFA166_eof;
+            this.min = DFA166_min;
+            this.max = DFA166_max;
+            this.accept = DFA166_accept;
+            this.special = DFA166_special;
+            this.transition = DFA166_transition;
+        }
+        public String getDescription() {
+            return "12807:1: ( rule__ParameterCS__UnorderedGroup_2 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA166_0 = input.LA(1);
+
+                         
+                        int index166_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA166_0==108) ) {s = 1;}
+
+                        else if ( LA166_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {s = 2;}
+
+                        else if ( LA166_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {s = 3;}
+
+                        else if ( LA166_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {s = 4;}
+
+                        else if ( (LA166_0==EOF||LA166_0==105||LA166_0==107) ) {s = 5;}
+
+                         
+                        input.seek(index166_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA166_6 = input.LA(1);
+
+                         
+                        int index166_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred260_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 14;}
+
+                        else if ( (true) ) {s = 5;}
+
+                         
+                        input.seek(index166_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA166_1 = input.LA(1);
+
+                         
+                        int index166_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA166_1>=64 && LA166_1<=65)||LA166_1==69) ) {s = 5;}
+
+                        else if ( (LA166_1==109) ) {s = 6;}
+
+                        else if ( LA166_1 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 7;}
+
+                        else if ( LA166_1 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 8;}
+
+                        else if ( LA166_1 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 9;}
+
+                        else if ( LA166_1 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 10;}
+
+                        else if ( LA166_1 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 11;}
+
+                        else if ( LA166_1 ==EOF && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 12;}
+
+                        else if ( LA166_1 ==107 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 13;}
+
+                        else if ( LA166_1 ==105 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 14;}
+
+                         
+                        input.seek(index166_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 166, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA176_eotS =
+        "\24\uffff";
+    static final String DFA176_eofS =
+        "\24\uffff";
+    static final String DFA176_minS =
+        "\1\32\1\0\22\uffff";
+    static final String DFA176_maxS =
+        "\1\u0081\1\0\22\uffff";
+    static final String DFA176_acceptS =
+        "\2\uffff\21\1\1\2";
+    static final String DFA176_specialS =
+        "\1\0\1\1\22\uffff}>";
+    static final String[] DFA176_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\23\1\3\1\uffff\1\5\1\7\1\13\1\17\1\21\2\uffff\1"+
+            "\11\54\uffff\1\1\1\22\23\uffff\1\14",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA176_eot = DFA.unpackEncodedString(DFA176_eotS);
+    static final short[] DFA176_eof = DFA.unpackEncodedString(DFA176_eofS);
+    static final char[] DFA176_min = DFA.unpackEncodedStringToUnsignedChars(DFA176_minS);
+    static final char[] DFA176_max = DFA.unpackEncodedStringToUnsignedChars(DFA176_maxS);
+    static final short[] DFA176_accept = DFA.unpackEncodedString(DFA176_acceptS);
+    static final short[] DFA176_special = DFA.unpackEncodedString(DFA176_specialS);
+    static final short[][] DFA176_transition;
+
+    static {
+        int numStates = DFA176_transitionS.length;
+        DFA176_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA176_transition[i] = DFA.unpackEncodedString(DFA176_transitionS[i]);
+        }
+    }
+
+    class DFA176 extends DFA {
+
+        public DFA176(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 176;
+            this.eot = DFA176_eot;
+            this.eof = DFA176_eof;
+            this.min = DFA176_min;
+            this.max = DFA176_max;
+            this.accept = DFA176_accept;
+            this.special = DFA176_special;
+            this.transition = DFA176_transition;
+        }
+        public String getDescription() {
+            return "13459:1: ( rule__ReferenceCS__UnorderedGroup_6 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA176_0 = input.LA(1);
+
+                         
+                        int index176_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA176_0==108) ) {s = 1;}
+
+                        else if ( LA176_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA176_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA176_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA176_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA176_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA176_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA176_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA176_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA176_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA176_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA176_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA176_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA176_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA176_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA176_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                        else if ( LA176_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA176_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( (LA176_0==53) ) {s = 19;}
+
+                         
+                        input.seek(index176_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA176_1 = input.LA(1);
+
+                         
+                        int index176_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred270_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 18;}
+
+                        else if ( (true) ) {s = 19;}
+
+                         
+                        input.seek(index176_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 176, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA259_eotS =
+        "\17\uffff";
+    static final String DFA259_eofS =
+        "\17\uffff";
+    static final String DFA259_minS =
+        "\1\35\16\uffff";
+    static final String DFA259_maxS =
+        "\1\u0081\16\uffff";
+    static final String DFA259_acceptS =
+        "\1\uffff\1\1\2\2\2\3\2\4\2\5\2\6\2\7\1\10";
+    static final String DFA259_specialS =
+        "\1\0\16\uffff}>";
+    static final String[] DFA259_transitionS = {
+            "\1\2\7\uffff\1\4\5\uffff\1\6\5\uffff\1\10\1\13\1\14\1\16\2"+
+            "\uffff\1\3\1\5\1\7\1\11\1\15\1\16\57\uffff\1\1\1\16\23\uffff"+
+            "\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA259_eot = DFA.unpackEncodedString(DFA259_eotS);
+    static final short[] DFA259_eof = DFA.unpackEncodedString(DFA259_eofS);
+    static final char[] DFA259_min = DFA.unpackEncodedStringToUnsignedChars(DFA259_minS);
+    static final char[] DFA259_max = DFA.unpackEncodedStringToUnsignedChars(DFA259_maxS);
+    static final short[] DFA259_accept = DFA.unpackEncodedString(DFA259_acceptS);
+    static final short[] DFA259_special = DFA.unpackEncodedString(DFA259_specialS);
+    static final short[][] DFA259_transition;
+
+    static {
+        int numStates = DFA259_transitionS.length;
+        DFA259_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA259_transition[i] = DFA.unpackEncodedString(DFA259_transitionS[i]);
+        }
+    }
+
+    class DFA259 extends DFA {
+
+        public DFA259(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 259;
+            this.eot = DFA259_eot;
+            this.eof = DFA259_eof;
+            this.min = DFA259_min;
+            this.max = DFA259_max;
+            this.accept = DFA259_accept;
+            this.special = DFA259_special;
+            this.transition = DFA259_transition;
+        }
+        public String getDescription() {
+            return "24045:3: ( ({...}? => ( ( ( rule__AttributeCS__Group_5_0__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_1__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_2__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_3__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_4__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_5__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_6__0 ) ) ) ) | ({...}? => ( ( ( rule__AttributeCS__Group_5_7__0 ) ) ) ) )";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA259_0 = input.LA(1);
+
+                         
+                        int index259_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( LA259_0 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 1;}
+
+                        else if ( LA259_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 2;}
+
+                        else if ( LA259_0 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA259_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 4;}
+
+                        else if ( LA259_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA259_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( LA259_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA259_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 8;}
+
+                        else if ( LA259_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA259_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 10;}
+
+                        else if ( LA259_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA259_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 12;}
+
+                        else if ( LA259_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( (LA259_0==52||LA259_0==60||LA259_0==109) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 14;}
+
+                         
+                        input.seek(index259_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 259, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA260_eotS =
+        "\23\uffff";
+    static final String DFA260_eofS =
+        "\1\21\22\uffff";
+    static final String DFA260_minS =
+        "\1\35\1\0\21\uffff";
+    static final String DFA260_maxS =
+        "\1\u0081\1\0\21\uffff";
+    static final String DFA260_acceptS =
+        "\2\uffff\17\1\1\2\1\uffff";
+    static final String DFA260_specialS =
+        "\1\0\1\1\21\uffff}>";
+    static final String[] DFA260_transitionS = {
+            "\1\2\7\uffff\1\4\5\uffff\1\6\5\uffff\1\10\1\13\1\14\1\16\1"+
+            "\21\1\uffff\1\3\1\5\1\7\1\11\1\15\1\17\57\uffff\1\1\1\20\23"+
+            "\uffff\1\12",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA260_eot = DFA.unpackEncodedString(DFA260_eotS);
+    static final short[] DFA260_eof = DFA.unpackEncodedString(DFA260_eofS);
+    static final char[] DFA260_min = DFA.unpackEncodedStringToUnsignedChars(DFA260_minS);
+    static final char[] DFA260_max = DFA.unpackEncodedStringToUnsignedChars(DFA260_maxS);
+    static final short[] DFA260_accept = DFA.unpackEncodedString(DFA260_acceptS);
+    static final short[] DFA260_special = DFA.unpackEncodedString(DFA260_specialS);
+    static final short[][] DFA260_transition;
+
+    static {
+        int numStates = DFA260_transitionS.length;
+        DFA260_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA260_transition[i] = DFA.unpackEncodedString(DFA260_transitionS[i]);
+        }
+    }
+
+    class DFA260 extends DFA {
+
+        public DFA260(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 260;
+            this.eot = DFA260_eot;
+            this.eof = DFA260_eof;
+            this.min = DFA260_min;
+            this.max = DFA260_max;
+            this.accept = DFA260_accept;
+            this.special = DFA260_special;
+            this.transition = DFA260_transition;
+        }
+        public String getDescription() {
+            return "24198:2: ( rule__AttributeCS__UnorderedGroup_5__1 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA260_0 = input.LA(1);
+
+                         
+                        int index260_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA260_0==108) ) {s = 1;}
+
+                        else if ( LA260_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 2;}
+
+                        else if ( LA260_0 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA260_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 4;}
+
+                        else if ( LA260_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA260_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( LA260_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA260_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 8;}
+
+                        else if ( LA260_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA260_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 10;}
+
+                        else if ( LA260_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA260_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 12;}
+
+                        else if ( LA260_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA260_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 14;}
+
+                        else if ( LA260_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA260_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( (LA260_0==EOF||LA260_0==53) ) {s = 17;}
+
+                         
+                        input.seek(index260_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA260_1 = input.LA(1);
+
+                         
+                        int index260_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred360_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 16;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()) ) {s = 17;}
+
+                         
+                        input.seek(index260_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 260, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA261_eotS =
+        "\23\uffff";
+    static final String DFA261_eofS =
+        "\1\21\22\uffff";
+    static final String DFA261_minS =
+        "\1\35\1\0\21\uffff";
+    static final String DFA261_maxS =
+        "\1\u0081\1\0\21\uffff";
+    static final String DFA261_acceptS =
+        "\2\uffff\17\1\1\2\1\uffff";
+    static final String DFA261_specialS =
+        "\1\0\1\1\21\uffff}>";
+    static final String[] DFA261_transitionS = {
+            "\1\2\7\uffff\1\4\5\uffff\1\6\5\uffff\1\10\1\13\1\14\1\16\1"+
+            "\21\1\uffff\1\3\1\5\1\7\1\11\1\15\1\17\57\uffff\1\1\1\20\23"+
+            "\uffff\1\12",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA261_eot = DFA.unpackEncodedString(DFA261_eotS);
+    static final short[] DFA261_eof = DFA.unpackEncodedString(DFA261_eofS);
+    static final char[] DFA261_min = DFA.unpackEncodedStringToUnsignedChars(DFA261_minS);
+    static final char[] DFA261_max = DFA.unpackEncodedStringToUnsignedChars(DFA261_maxS);
+    static final short[] DFA261_accept = DFA.unpackEncodedString(DFA261_acceptS);
+    static final short[] DFA261_special = DFA.unpackEncodedString(DFA261_specialS);
+    static final short[][] DFA261_transition;
+
+    static {
+        int numStates = DFA261_transitionS.length;
+        DFA261_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA261_transition[i] = DFA.unpackEncodedString(DFA261_transitionS[i]);
+        }
+    }
+
+    class DFA261 extends DFA {
+
+        public DFA261(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 261;
+            this.eot = DFA261_eot;
+            this.eof = DFA261_eof;
+            this.min = DFA261_min;
+            this.max = DFA261_max;
+            this.accept = DFA261_accept;
+            this.special = DFA261_special;
+            this.transition = DFA261_transition;
+        }
+        public String getDescription() {
+            return "24211:2: ( rule__AttributeCS__UnorderedGroup_5__2 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA261_0 = input.LA(1);
+
+                         
+                        int index261_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA261_0==108) ) {s = 1;}
+
+                        else if ( LA261_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 2;}
+
+                        else if ( LA261_0 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA261_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 4;}
+
+                        else if ( LA261_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA261_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( LA261_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA261_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 8;}
+
+                        else if ( LA261_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA261_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 10;}
+
+                        else if ( LA261_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA261_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 12;}
+
+                        else if ( LA261_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA261_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 14;}
+
+                        else if ( LA261_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA261_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( (LA261_0==EOF||LA261_0==53) ) {s = 17;}
+
+                         
+                        input.seek(index261_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA261_1 = input.LA(1);
+
+                         
+                        int index261_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred361_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 16;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()) ) {s = 17;}
+
+                         
+                        input.seek(index261_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 261, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA262_eotS =
+        "\23\uffff";
+    static final String DFA262_eofS =
+        "\1\21\22\uffff";
+    static final String DFA262_minS =
+        "\1\35\1\0\21\uffff";
+    static final String DFA262_maxS =
+        "\1\u0081\1\0\21\uffff";
+    static final String DFA262_acceptS =
+        "\2\uffff\17\1\1\2\1\uffff";
+    static final String DFA262_specialS =
+        "\1\0\1\1\21\uffff}>";
+    static final String[] DFA262_transitionS = {
+            "\1\2\7\uffff\1\4\5\uffff\1\6\5\uffff\1\10\1\13\1\14\1\16\1"+
+            "\21\1\uffff\1\3\1\5\1\7\1\11\1\15\1\17\57\uffff\1\1\1\20\23"+
+            "\uffff\1\12",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA262_eot = DFA.unpackEncodedString(DFA262_eotS);
+    static final short[] DFA262_eof = DFA.unpackEncodedString(DFA262_eofS);
+    static final char[] DFA262_min = DFA.unpackEncodedStringToUnsignedChars(DFA262_minS);
+    static final char[] DFA262_max = DFA.unpackEncodedStringToUnsignedChars(DFA262_maxS);
+    static final short[] DFA262_accept = DFA.unpackEncodedString(DFA262_acceptS);
+    static final short[] DFA262_special = DFA.unpackEncodedString(DFA262_specialS);
+    static final short[][] DFA262_transition;
+
+    static {
+        int numStates = DFA262_transitionS.length;
+        DFA262_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA262_transition[i] = DFA.unpackEncodedString(DFA262_transitionS[i]);
+        }
+    }
+
+    class DFA262 extends DFA {
+
+        public DFA262(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 262;
+            this.eot = DFA262_eot;
+            this.eof = DFA262_eof;
+            this.min = DFA262_min;
+            this.max = DFA262_max;
+            this.accept = DFA262_accept;
+            this.special = DFA262_special;
+            this.transition = DFA262_transition;
+        }
+        public String getDescription() {
+            return "24224:2: ( rule__AttributeCS__UnorderedGroup_5__3 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA262_0 = input.LA(1);
+
+                         
+                        int index262_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA262_0==108) ) {s = 1;}
+
+                        else if ( LA262_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 2;}
+
+                        else if ( LA262_0 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA262_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 4;}
+
+                        else if ( LA262_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA262_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( LA262_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA262_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 8;}
+
+                        else if ( LA262_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA262_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 10;}
+
+                        else if ( LA262_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA262_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 12;}
+
+                        else if ( LA262_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA262_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 14;}
+
+                        else if ( LA262_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA262_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( (LA262_0==EOF||LA262_0==53) ) {s = 17;}
+
+                         
+                        input.seek(index262_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA262_1 = input.LA(1);
+
+                         
+                        int index262_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred362_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 16;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()) ) {s = 17;}
+
+                         
+                        input.seek(index262_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 262, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA263_eotS =
+        "\23\uffff";
+    static final String DFA263_eofS =
+        "\1\21\22\uffff";
+    static final String DFA263_minS =
+        "\1\35\1\0\21\uffff";
+    static final String DFA263_maxS =
+        "\1\u0081\1\0\21\uffff";
+    static final String DFA263_acceptS =
+        "\2\uffff\17\1\1\2\1\uffff";
+    static final String DFA263_specialS =
+        "\1\0\1\1\21\uffff}>";
+    static final String[] DFA263_transitionS = {
+            "\1\2\7\uffff\1\4\5\uffff\1\6\5\uffff\1\10\1\13\1\14\1\16\1"+
+            "\21\1\uffff\1\3\1\5\1\7\1\11\1\15\1\17\57\uffff\1\1\1\20\23"+
+            "\uffff\1\12",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA263_eot = DFA.unpackEncodedString(DFA263_eotS);
+    static final short[] DFA263_eof = DFA.unpackEncodedString(DFA263_eofS);
+    static final char[] DFA263_min = DFA.unpackEncodedStringToUnsignedChars(DFA263_minS);
+    static final char[] DFA263_max = DFA.unpackEncodedStringToUnsignedChars(DFA263_maxS);
+    static final short[] DFA263_accept = DFA.unpackEncodedString(DFA263_acceptS);
+    static final short[] DFA263_special = DFA.unpackEncodedString(DFA263_specialS);
+    static final short[][] DFA263_transition;
+
+    static {
+        int numStates = DFA263_transitionS.length;
+        DFA263_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA263_transition[i] = DFA.unpackEncodedString(DFA263_transitionS[i]);
+        }
+    }
+
+    class DFA263 extends DFA {
+
+        public DFA263(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 263;
+            this.eot = DFA263_eot;
+            this.eof = DFA263_eof;
+            this.min = DFA263_min;
+            this.max = DFA263_max;
+            this.accept = DFA263_accept;
+            this.special = DFA263_special;
+            this.transition = DFA263_transition;
+        }
+        public String getDescription() {
+            return "24237:2: ( rule__AttributeCS__UnorderedGroup_5__4 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA263_0 = input.LA(1);
+
+                         
+                        int index263_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA263_0==108) ) {s = 1;}
+
+                        else if ( LA263_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 2;}
+
+                        else if ( LA263_0 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA263_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 4;}
+
+                        else if ( LA263_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA263_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( LA263_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA263_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 8;}
+
+                        else if ( LA263_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA263_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 10;}
+
+                        else if ( LA263_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA263_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 12;}
+
+                        else if ( LA263_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA263_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 14;}
+
+                        else if ( LA263_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA263_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( (LA263_0==EOF||LA263_0==53) ) {s = 17;}
+
+                         
+                        input.seek(index263_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA263_1 = input.LA(1);
+
+                         
+                        int index263_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred363_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 16;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()) ) {s = 17;}
+
+                         
+                        input.seek(index263_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 263, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA264_eotS =
+        "\23\uffff";
+    static final String DFA264_eofS =
+        "\1\21\22\uffff";
+    static final String DFA264_minS =
+        "\1\35\1\0\21\uffff";
+    static final String DFA264_maxS =
+        "\1\u0081\1\0\21\uffff";
+    static final String DFA264_acceptS =
+        "\2\uffff\17\1\1\2\1\uffff";
+    static final String DFA264_specialS =
+        "\1\0\1\1\21\uffff}>";
+    static final String[] DFA264_transitionS = {
+            "\1\2\7\uffff\1\4\5\uffff\1\6\5\uffff\1\10\1\13\1\14\1\16\1"+
+            "\21\1\uffff\1\3\1\5\1\7\1\11\1\15\1\17\57\uffff\1\1\1\20\23"+
+            "\uffff\1\12",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA264_eot = DFA.unpackEncodedString(DFA264_eotS);
+    static final short[] DFA264_eof = DFA.unpackEncodedString(DFA264_eofS);
+    static final char[] DFA264_min = DFA.unpackEncodedStringToUnsignedChars(DFA264_minS);
+    static final char[] DFA264_max = DFA.unpackEncodedStringToUnsignedChars(DFA264_maxS);
+    static final short[] DFA264_accept = DFA.unpackEncodedString(DFA264_acceptS);
+    static final short[] DFA264_special = DFA.unpackEncodedString(DFA264_specialS);
+    static final short[][] DFA264_transition;
+
+    static {
+        int numStates = DFA264_transitionS.length;
+        DFA264_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA264_transition[i] = DFA.unpackEncodedString(DFA264_transitionS[i]);
+        }
+    }
+
+    class DFA264 extends DFA {
+
+        public DFA264(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 264;
+            this.eot = DFA264_eot;
+            this.eof = DFA264_eof;
+            this.min = DFA264_min;
+            this.max = DFA264_max;
+            this.accept = DFA264_accept;
+            this.special = DFA264_special;
+            this.transition = DFA264_transition;
+        }
+        public String getDescription() {
+            return "24250:2: ( rule__AttributeCS__UnorderedGroup_5__5 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA264_0 = input.LA(1);
+
+                         
+                        int index264_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA264_0==108) ) {s = 1;}
+
+                        else if ( LA264_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 2;}
+
+                        else if ( LA264_0 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA264_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 4;}
+
+                        else if ( LA264_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA264_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( LA264_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA264_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 8;}
+
+                        else if ( LA264_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA264_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 10;}
+
+                        else if ( LA264_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA264_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 12;}
+
+                        else if ( LA264_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA264_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 14;}
+
+                        else if ( LA264_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA264_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( (LA264_0==EOF||LA264_0==53) ) {s = 17;}
+
+                         
+                        input.seek(index264_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA264_1 = input.LA(1);
+
+                         
+                        int index264_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred364_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 16;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()) ) {s = 17;}
+
+                         
+                        input.seek(index264_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 264, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA265_eotS =
+        "\50\uffff";
+    static final String DFA265_eofS =
+        "\1\21\1\45\20\uffff\1\47\24\uffff\1\21";
+    static final String DFA265_minS =
+        "\1\35\1\31\20\uffff\1\7\24\uffff\1\0";
+    static final String DFA265_maxS =
+        "\2\u0081\20\uffff\1\155\24\uffff\1\0";
+    static final String DFA265_acceptS =
+        "\2\uffff\17\1\1\2\1\uffff\24\1\1\uffff";
+    static final String DFA265_specialS =
+        "\1\2\1\1\20\uffff\1\0\25\uffff}>";
+    static final String[] DFA265_transitionS = {
+            "\1\2\7\uffff\1\4\5\uffff\1\6\5\uffff\1\10\1\13\1\14\1\16\1"+
+            "\21\1\uffff\1\3\1\5\1\7\1\11\1\15\1\17\57\uffff\1\1\1\20\23"+
+            "\uffff\1\12",
+            "\1\21\1\23\2\uffff\1\26\1\uffff\1\21\5\uffff\1\30\5\uffff"+
+            "\1\32\5\uffff\1\34\1\37\1\40\1\42\1\44\1\24\1\27\1\31\1\33\1"+
+            "\35\1\41\1\43\3\uffff\2\21\3\uffff\1\21\46\uffff\1\25\1\22\23"+
+            "\uffff\1\36",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\2\21\10\uffff\44\21\1\44\12\uffff\4\21\1\uffff\1\21\46\uffff"+
+            "\1\46\1\21",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\uffff"
+    };
+
+    static final short[] DFA265_eot = DFA.unpackEncodedString(DFA265_eotS);
+    static final short[] DFA265_eof = DFA.unpackEncodedString(DFA265_eofS);
+    static final char[] DFA265_min = DFA.unpackEncodedStringToUnsignedChars(DFA265_minS);
+    static final char[] DFA265_max = DFA.unpackEncodedStringToUnsignedChars(DFA265_maxS);
+    static final short[] DFA265_accept = DFA.unpackEncodedString(DFA265_acceptS);
+    static final short[] DFA265_special = DFA.unpackEncodedString(DFA265_specialS);
+    static final short[][] DFA265_transition;
+
+    static {
+        int numStates = DFA265_transitionS.length;
+        DFA265_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA265_transition[i] = DFA.unpackEncodedString(DFA265_transitionS[i]);
+        }
+    }
+
+    class DFA265 extends DFA {
+
+        public DFA265(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 265;
+            this.eot = DFA265_eot;
+            this.eof = DFA265_eof;
+            this.min = DFA265_min;
+            this.max = DFA265_max;
+            this.accept = DFA265_accept;
+            this.special = DFA265_special;
+            this.transition = DFA265_transition;
+        }
+        public String getDescription() {
+            return "24263:2: ( rule__AttributeCS__UnorderedGroup_5__6 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA265_18 = input.LA(1);
+
+                         
+                        int index265_18 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( LA265_18 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 38;}
+
+                        else if ( LA265_18 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 36;}
+
+                        else if ( (LA265_18==EOF) ) {s = 39;}
+
+                        else if ( ((LA265_18>=RULE_SIMPLE_ID && LA265_18<=RULE_ESCAPED_ID)||(LA265_18>=17 && LA265_18<=52)||(LA265_18>=64 && LA265_18<=67)||LA265_18==69||LA265_18==109) ) {s = 17;}
+
+                         
+                        input.seek(index265_18);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA265_1 = input.LA(1);
+
+                         
+                        int index265_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA265_1==25||LA265_1==31||(LA265_1>=64 && LA265_1<=65)||LA265_1==69) ) {s = 17;}
+
+                        else if ( (LA265_1==109) ) {s = 18;}
+
+                        else if ( LA265_1 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 19;}
+
+                        else if ( LA265_1 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 20;}
+
+                        else if ( LA265_1 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 21;}
+
+                        else if ( LA265_1 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 22;}
+
+                        else if ( LA265_1 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 23;}
+
+                        else if ( LA265_1 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 24;}
+
+                        else if ( LA265_1 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 25;}
+
+                        else if ( LA265_1 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 26;}
+
+                        else if ( LA265_1 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 27;}
+
+                        else if ( LA265_1 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 28;}
+
+                        else if ( LA265_1 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 29;}
+
+                        else if ( LA265_1 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 30;}
+
+                        else if ( LA265_1 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 31;}
+
+                        else if ( LA265_1 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 32;}
+
+                        else if ( LA265_1 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 33;}
+
+                        else if ( LA265_1 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 34;}
+
+                        else if ( LA265_1 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 35;}
+
+                        else if ( LA265_1 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 36;}
+
+                        else if ( LA265_1 ==EOF && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 37;}
+
+                         
+                        input.seek(index265_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA265_0 = input.LA(1);
+
+                         
+                        int index265_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA265_0==108) ) {s = 1;}
+
+                        else if ( LA265_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 2;}
+
+                        else if ( LA265_0 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA265_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 4;}
+
+                        else if ( LA265_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA265_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( LA265_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA265_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 8;}
+
+                        else if ( LA265_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA265_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 10;}
+
+                        else if ( LA265_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA265_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 12;}
+
+                        else if ( LA265_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA265_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 14;}
+
+                        else if ( LA265_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA265_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( (LA265_0==EOF||LA265_0==53) ) {s = 17;}
+
+                         
+                        input.seek(index265_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 265, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA266_eotS =
+        "\27\uffff";
+    static final String DFA266_eofS =
+        "\1\21\1\26\25\uffff";
+    static final String DFA266_minS =
+        "\1\35\1\31\25\uffff";
+    static final String DFA266_maxS =
+        "\1\u0081\1\155\25\uffff";
+    static final String DFA266_acceptS =
+        "\2\uffff\17\1\1\2\5\1";
+    static final String DFA266_specialS =
+        "\1\1\1\0\25\uffff}>";
+    static final String[] DFA266_transitionS = {
+            "\1\2\7\uffff\1\4\5\uffff\1\6\5\uffff\1\10\1\13\1\14\1\16\1"+
+            "\21\1\uffff\1\3\1\5\1\7\1\11\1\15\1\17\57\uffff\1\1\1\20\23"+
+            "\uffff\1\12",
+            "\1\21\1\22\4\uffff\1\21\25\uffff\1\25\1\23\11\uffff\2\21\3"+
+            "\uffff\1\21\46\uffff\1\24\1\21",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA266_eot = DFA.unpackEncodedString(DFA266_eotS);
+    static final short[] DFA266_eof = DFA.unpackEncodedString(DFA266_eofS);
+    static final char[] DFA266_min = DFA.unpackEncodedStringToUnsignedChars(DFA266_minS);
+    static final char[] DFA266_max = DFA.unpackEncodedStringToUnsignedChars(DFA266_maxS);
+    static final short[] DFA266_accept = DFA.unpackEncodedString(DFA266_acceptS);
+    static final short[] DFA266_special = DFA.unpackEncodedString(DFA266_specialS);
+    static final short[][] DFA266_transition;
+
+    static {
+        int numStates = DFA266_transitionS.length;
+        DFA266_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA266_transition[i] = DFA.unpackEncodedString(DFA266_transitionS[i]);
+        }
+    }
+
+    class DFA266 extends DFA {
+
+        public DFA266(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 266;
+            this.eot = DFA266_eot;
+            this.eof = DFA266_eof;
+            this.min = DFA266_min;
+            this.max = DFA266_max;
+            this.accept = DFA266_accept;
+            this.special = DFA266_special;
+            this.transition = DFA266_transition;
+        }
+        public String getDescription() {
+            return "24276:2: ( rule__AttributeCS__UnorderedGroup_5__7 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA266_1 = input.LA(1);
+
+                         
+                        int index266_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( LA266_1 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 18;}
+
+                        else if ( LA266_1 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 19;}
+
+                        else if ( LA266_1 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 20;}
+
+                        else if ( LA266_1 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 21;}
+
+                        else if ( LA266_1 ==EOF && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 22;}
+
+                        else if ( (LA266_1==25||LA266_1==31||(LA266_1>=64 && LA266_1<=65)||LA266_1==69||LA266_1==109) ) {s = 17;}
+
+                         
+                        input.seek(index266_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA266_0 = input.LA(1);
+
+                         
+                        int index266_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA266_0==108) ) {s = 1;}
+
+                        else if ( LA266_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 2;}
+
+                        else if ( LA266_0 ==55 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA266_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 4;}
+
+                        else if ( LA266_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA266_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( LA266_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA266_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 8;}
+
+                        else if ( LA266_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA266_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 10;}
+
+                        else if ( LA266_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA266_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 12;}
+
+                        else if ( LA266_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA266_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 14;}
+
+                        else if ( LA266_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA266_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( (LA266_0==EOF||LA266_0==53) ) {s = 17;}
+
+                         
+                        input.seek(index266_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 266, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA271_eotS =
+        "\24\uffff";
+    static final String DFA271_eofS =
+        "\1\7\1\21\15\uffff\1\22\2\uffff\1\7\1\uffff";
+    static final String DFA271_minS =
+        "\1\45\1\23\15\uffff\1\7\2\uffff\1\0\1\uffff";
+    static final String DFA271_maxS =
+        "\2\u0081\15\uffff\1\155\2\uffff\1\0\1\uffff";
+    static final String DFA271_acceptS =
+        "\2\uffff\5\1\1\2\7\1\1\uffff\2\1\1\uffff\1\1";
+    static final String DFA271_specialS =
+        "\1\2\1\1\15\uffff\1\0\4\uffff}>";
+    static final String[] DFA271_transitionS = {
+            "\1\2\14\uffff\1\5\2\uffff\1\7\2\uffff\1\3\63\uffff\1\1\1\6"+
+            "\23\uffff\1\4",
+            "\1\7\6\uffff\1\10\12\uffff\1\13\1\uffff\2\7\11\uffff\1\16"+
+            "\2\uffff\1\20\1\11\1\uffff\1\14\7\uffff\2\7\3\uffff\1\7\46\uffff"+
+            "\1\12\1\17\23\uffff\1\15",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\2\7\10\uffff\44\7\1\20\12\uffff\4\7\1\uffff\1\7\46\uffff"+
+            "\1\23\1\7",
+            "",
+            "",
+            "\1\uffff",
+            ""
+    };
+
+    static final short[] DFA271_eot = DFA.unpackEncodedString(DFA271_eotS);
+    static final short[] DFA271_eof = DFA.unpackEncodedString(DFA271_eofS);
+    static final char[] DFA271_min = DFA.unpackEncodedStringToUnsignedChars(DFA271_minS);
+    static final char[] DFA271_max = DFA.unpackEncodedStringToUnsignedChars(DFA271_maxS);
+    static final short[] DFA271_accept = DFA.unpackEncodedString(DFA271_acceptS);
+    static final short[] DFA271_special = DFA.unpackEncodedString(DFA271_specialS);
+    static final short[][] DFA271_transition;
+
+    static {
+        int numStates = DFA271_transitionS.length;
+        DFA271_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA271_transition[i] = DFA.unpackEncodedString(DFA271_transitionS[i]);
+        }
+    }
+
+    class DFA271 extends DFA {
+
+        public DFA271(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 271;
+            this.eot = DFA271_eot;
+            this.eof = DFA271_eof;
+            this.min = DFA271_min;
+            this.max = DFA271_max;
+            this.accept = DFA271_accept;
+            this.special = DFA271_special;
+            this.transition = DFA271_transition;
+        }
+        public String getDescription() {
+            return "24498:2: ( rule__OperationCS__UnorderedGroup_9__1 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA271_15 = input.LA(1);
+
+                         
+                        int index271_15 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA271_15==EOF) ) {s = 18;}
+
+                        else if ( ((LA271_15>=RULE_SIMPLE_ID && LA271_15<=RULE_ESCAPED_ID)||(LA271_15>=17 && LA271_15<=52)||(LA271_15>=64 && LA271_15<=67)||LA271_15==69||LA271_15==109) ) {s = 7;}
+
+                        else if ( LA271_15 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 19;}
+
+                        else if ( LA271_15 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 16;}
+
+                         
+                        input.seek(index271_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA271_1 = input.LA(1);
+
+                         
+                        int index271_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( LA271_1 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 8;}
+
+                        else if ( LA271_1 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 9;}
+
+                        else if ( LA271_1 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 10;}
+
+                        else if ( LA271_1 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 11;}
+
+                        else if ( LA271_1 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 12;}
+
+                        else if ( LA271_1 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 13;}
+
+                        else if ( LA271_1 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 14;}
+
+                        else if ( (LA271_1==109) ) {s = 15;}
+
+                        else if ( LA271_1 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 16;}
+
+                        else if ( LA271_1 ==EOF && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 17;}
+
+                        else if ( (LA271_1==19||(LA271_1>=39 && LA271_1<=40)||(LA271_1>=64 && LA271_1<=65)||LA271_1==69) ) {s = 7;}
+
+                         
+                        input.seek(index271_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA271_0 = input.LA(1);
+
+                         
+                        int index271_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA271_0==108) ) {s = 1;}
+
+                        else if ( LA271_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {s = 2;}
+
+                        else if ( LA271_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {s = 3;}
+
+                        else if ( LA271_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {s = 4;}
+
+                        else if ( LA271_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {s = 5;}
+
+                        else if ( LA271_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {s = 6;}
+
+                        else if ( (LA271_0==EOF||LA271_0==53) ) {s = 7;}
+
+                         
+                        input.seek(index271_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 271, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA272_eotS =
+        "\15\uffff";
+    static final String DFA272_eofS =
+        "\1\7\1\14\13\uffff";
+    static final String DFA272_minS =
+        "\1\45\1\23\13\uffff";
+    static final String DFA272_maxS =
+        "\1\u0081\1\155\13\uffff";
+    static final String DFA272_acceptS =
+        "\2\uffff\5\1\1\2\5\1";
+    static final String DFA272_specialS =
+        "\1\0\1\1\13\uffff}>";
+    static final String[] DFA272_transitionS = {
+            "\1\2\14\uffff\1\5\2\uffff\1\7\2\uffff\1\3\63\uffff\1\1\1\6"+
+            "\23\uffff\1\4",
+            "\1\7\6\uffff\1\10\14\uffff\2\7\14\uffff\1\13\1\11\11\uffff"+
+            "\2\7\3\uffff\1\7\46\uffff\1\12\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA272_eot = DFA.unpackEncodedString(DFA272_eotS);
+    static final short[] DFA272_eof = DFA.unpackEncodedString(DFA272_eofS);
+    static final char[] DFA272_min = DFA.unpackEncodedStringToUnsignedChars(DFA272_minS);
+    static final char[] DFA272_max = DFA.unpackEncodedStringToUnsignedChars(DFA272_maxS);
+    static final short[] DFA272_accept = DFA.unpackEncodedString(DFA272_acceptS);
+    static final short[] DFA272_special = DFA.unpackEncodedString(DFA272_specialS);
+    static final short[][] DFA272_transition;
+
+    static {
+        int numStates = DFA272_transitionS.length;
+        DFA272_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA272_transition[i] = DFA.unpackEncodedString(DFA272_transitionS[i]);
+        }
+    }
+
+    class DFA272 extends DFA {
+
+        public DFA272(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 272;
+            this.eot = DFA272_eot;
+            this.eof = DFA272_eof;
+            this.min = DFA272_min;
+            this.max = DFA272_max;
+            this.accept = DFA272_accept;
+            this.special = DFA272_special;
+            this.transition = DFA272_transition;
+        }
+        public String getDescription() {
+            return "24511:2: ( rule__OperationCS__UnorderedGroup_9__2 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA272_0 = input.LA(1);
+
+                         
+                        int index272_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA272_0==108) ) {s = 1;}
+
+                        else if ( LA272_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {s = 2;}
+
+                        else if ( LA272_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {s = 3;}
+
+                        else if ( LA272_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {s = 4;}
+
+                        else if ( LA272_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {s = 5;}
+
+                        else if ( LA272_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {s = 6;}
+
+                        else if ( (LA272_0==EOF||LA272_0==53) ) {s = 7;}
+
+                         
+                        input.seek(index272_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA272_1 = input.LA(1);
+
+                         
+                        int index272_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( LA272_1 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 8;}
+
+                        else if ( LA272_1 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 9;}
+
+                        else if ( LA272_1 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 10;}
+
+                        else if ( LA272_1 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 11;}
+
+                        else if ( LA272_1 ==EOF && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {s = 12;}
+
+                        else if ( (LA272_1==19||(LA272_1>=39 && LA272_1<=40)||(LA272_1>=64 && LA272_1<=65)||LA272_1==69||LA272_1==109) ) {s = 7;}
+
+                         
+                        input.seek(index272_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 272, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA274_eotS =
+        "\14\uffff";
+    static final String DFA274_eofS =
+        "\1\5\1\11\12\uffff";
+    static final String DFA274_minS =
+        "\1\62\1\45\12\uffff";
+    static final String DFA274_maxS =
+        "\1\u0081\1\155\12\uffff";
+    static final String DFA274_acceptS =
+        "\2\uffff\3\1\1\2\6\1";
+    static final String DFA274_specialS =
+        "\1\1\1\0\12\uffff}>";
+    static final String[] DFA274_transitionS = {
+            "\1\3\66\uffff\1\5\1\uffff\1\5\1\1\1\4\23\uffff\1\2",
+            "\1\6\22\uffff\1\7\7\uffff\2\5\3\uffff\1\5\43\uffff\1\13\1"+
+            "\uffff\1\12\1\10\1\5",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA274_eot = DFA.unpackEncodedString(DFA274_eotS);
+    static final short[] DFA274_eof = DFA.unpackEncodedString(DFA274_eofS);
+    static final char[] DFA274_min = DFA.unpackEncodedStringToUnsignedChars(DFA274_minS);
+    static final char[] DFA274_max = DFA.unpackEncodedStringToUnsignedChars(DFA274_maxS);
+    static final short[] DFA274_accept = DFA.unpackEncodedString(DFA274_acceptS);
+    static final short[] DFA274_special = DFA.unpackEncodedString(DFA274_specialS);
+    static final short[][] DFA274_transition;
+
+    static {
+        int numStates = DFA274_transitionS.length;
+        DFA274_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA274_transition[i] = DFA.unpackEncodedString(DFA274_transitionS[i]);
+        }
+    }
+
+    class DFA274 extends DFA {
+
+        public DFA274(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 274;
+            this.eot = DFA274_eot;
+            this.eof = DFA274_eof;
+            this.min = DFA274_min;
+            this.max = DFA274_max;
+            this.accept = DFA274_accept;
+            this.special = DFA274_special;
+            this.transition = DFA274_transition;
+        }
+        public String getDescription() {
+            return "24610:2: ( rule__ParameterCS__UnorderedGroup_2__1 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA274_1 = input.LA(1);
+
+                         
+                        int index274_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( LA274_1 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 6;}
+
+                        else if ( LA274_1 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 7;}
+
+                        else if ( LA274_1 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 8;}
+
+                        else if ( LA274_1 ==EOF && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 9;}
+
+                        else if ( LA274_1 ==107 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 10;}
+
+                        else if ( LA274_1 ==105 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 11;}
+
+                        else if ( ((LA274_1>=64 && LA274_1<=65)||LA274_1==69||LA274_1==109) ) {s = 5;}
+
+                         
+                        input.seek(index274_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA274_0 = input.LA(1);
+
+                         
+                        int index274_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA274_0==108) ) {s = 1;}
+
+                        else if ( LA274_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {s = 2;}
+
+                        else if ( LA274_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {s = 3;}
+
+                        else if ( LA274_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {s = 4;}
+
+                        else if ( (LA274_0==EOF||LA274_0==105||LA274_0==107) ) {s = 5;}
+
+                         
+                        input.seek(index274_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 274, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA278_eotS =
+        "\21\uffff";
+    static final String DFA278_eofS =
+        "\21\uffff";
+    static final String DFA278_minS =
+        "\1\32\20\uffff";
+    static final String DFA278_maxS =
+        "\1\u0081\20\uffff";
+    static final String DFA278_acceptS =
+        "\1\uffff\1\1\2\2\2\3\2\4\2\5\2\6\2\7\2\10\1\11";
+    static final String DFA278_specialS =
+        "\1\0\20\uffff}>";
+    static final String[] DFA278_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\uffff\1\3\1\uffff\1\5\1\7\1\13\1\17\1\20\2\uffff"+
+            "\1\11\54\uffff\1\1\1\20\23\uffff\1\14",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA278_eot = DFA.unpackEncodedString(DFA278_eotS);
+    static final short[] DFA278_eof = DFA.unpackEncodedString(DFA278_eofS);
+    static final char[] DFA278_min = DFA.unpackEncodedStringToUnsignedChars(DFA278_minS);
+    static final char[] DFA278_max = DFA.unpackEncodedStringToUnsignedChars(DFA278_maxS);
+    static final short[] DFA278_accept = DFA.unpackEncodedString(DFA278_acceptS);
+    static final short[] DFA278_special = DFA.unpackEncodedString(DFA278_specialS);
+    static final short[][] DFA278_transition;
+
+    static {
+        int numStates = DFA278_transitionS.length;
+        DFA278_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA278_transition[i] = DFA.unpackEncodedString(DFA278_transitionS[i]);
+        }
+    }
+
+    class DFA278 extends DFA {
+
+        public DFA278(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 278;
+            this.eot = DFA278_eot;
+            this.eof = DFA278_eof;
+            this.min = DFA278_min;
+            this.max = DFA278_max;
+            this.accept = DFA278_accept;
+            this.special = DFA278_special;
+            this.transition = DFA278_transition;
+        }
+        public String getDescription() {
+            return "24752:3: ( ({...}? => ( ( ( rule__ReferenceCS__Group_6_0__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_1__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_2__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_3__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_4__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_5__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_6__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_7__0 ) ) ) ) | ({...}? => ( ( ( rule__ReferenceCS__Group_6_8__0 ) ) ) ) )";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA278_0 = input.LA(1);
+
+                         
+                        int index278_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( LA278_0 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 1;}
+
+                        else if ( LA278_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA278_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA278_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA278_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA278_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA278_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA278_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA278_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA278_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA278_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA278_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA278_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA278_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA278_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( (LA278_0==52||LA278_0==60||LA278_0==109) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                         
+                        input.seek(index278_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 278, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA279_eotS =
+        "\25\uffff";
+    static final String DFA279_eofS =
+        "\1\23\24\uffff";
+    static final String DFA279_minS =
+        "\1\32\1\0\23\uffff";
+    static final String DFA279_maxS =
+        "\1\u0081\1\0\23\uffff";
+    static final String DFA279_acceptS =
+        "\2\uffff\21\1\1\2\1\uffff";
+    static final String DFA279_specialS =
+        "\1\0\1\1\23\uffff}>";
+    static final String[] DFA279_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\23\1\3\1\uffff\1\5\1\7\1\13\1\17\1\21\2\uffff\1"+
+            "\11\54\uffff\1\1\1\22\23\uffff\1\14",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA279_eot = DFA.unpackEncodedString(DFA279_eotS);
+    static final short[] DFA279_eof = DFA.unpackEncodedString(DFA279_eofS);
+    static final char[] DFA279_min = DFA.unpackEncodedStringToUnsignedChars(DFA279_minS);
+    static final char[] DFA279_max = DFA.unpackEncodedStringToUnsignedChars(DFA279_maxS);
+    static final short[] DFA279_accept = DFA.unpackEncodedString(DFA279_acceptS);
+    static final short[] DFA279_special = DFA.unpackEncodedString(DFA279_specialS);
+    static final short[][] DFA279_transition;
+
+    static {
+        int numStates = DFA279_transitionS.length;
+        DFA279_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA279_transition[i] = DFA.unpackEncodedString(DFA279_transitionS[i]);
+        }
+    }
+
+    class DFA279 extends DFA {
+
+        public DFA279(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 279;
+            this.eot = DFA279_eot;
+            this.eof = DFA279_eof;
+            this.min = DFA279_min;
+            this.max = DFA279_max;
+            this.accept = DFA279_accept;
+            this.special = DFA279_special;
+            this.transition = DFA279_transition;
+        }
+        public String getDescription() {
+            return "24922:2: ( rule__ReferenceCS__UnorderedGroup_6__1 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA279_0 = input.LA(1);
+
+                         
+                        int index279_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA279_0==108) ) {s = 1;}
+
+                        else if ( LA279_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA279_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA279_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA279_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA279_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA279_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA279_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA279_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA279_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA279_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA279_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA279_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA279_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA279_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA279_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                        else if ( LA279_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA279_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( (LA279_0==EOF||LA279_0==53) ) {s = 19;}
+
+                         
+                        input.seek(index279_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA279_1 = input.LA(1);
+
+                         
+                        int index279_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred387_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 18;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {s = 19;}
+
+                         
+                        input.seek(index279_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 279, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA280_eotS =
+        "\25\uffff";
+    static final String DFA280_eofS =
+        "\1\23\24\uffff";
+    static final String DFA280_minS =
+        "\1\32\1\0\23\uffff";
+    static final String DFA280_maxS =
+        "\1\u0081\1\0\23\uffff";
+    static final String DFA280_acceptS =
+        "\2\uffff\21\1\1\2\1\uffff";
+    static final String DFA280_specialS =
+        "\1\0\1\1\23\uffff}>";
+    static final String[] DFA280_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\23\1\3\1\uffff\1\5\1\7\1\13\1\17\1\21\2\uffff\1"+
+            "\11\54\uffff\1\1\1\22\23\uffff\1\14",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA280_eot = DFA.unpackEncodedString(DFA280_eotS);
+    static final short[] DFA280_eof = DFA.unpackEncodedString(DFA280_eofS);
+    static final char[] DFA280_min = DFA.unpackEncodedStringToUnsignedChars(DFA280_minS);
+    static final char[] DFA280_max = DFA.unpackEncodedStringToUnsignedChars(DFA280_maxS);
+    static final short[] DFA280_accept = DFA.unpackEncodedString(DFA280_acceptS);
+    static final short[] DFA280_special = DFA.unpackEncodedString(DFA280_specialS);
+    static final short[][] DFA280_transition;
+
+    static {
+        int numStates = DFA280_transitionS.length;
+        DFA280_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA280_transition[i] = DFA.unpackEncodedString(DFA280_transitionS[i]);
+        }
+    }
+
+    class DFA280 extends DFA {
+
+        public DFA280(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 280;
+            this.eot = DFA280_eot;
+            this.eof = DFA280_eof;
+            this.min = DFA280_min;
+            this.max = DFA280_max;
+            this.accept = DFA280_accept;
+            this.special = DFA280_special;
+            this.transition = DFA280_transition;
+        }
+        public String getDescription() {
+            return "24935:2: ( rule__ReferenceCS__UnorderedGroup_6__2 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA280_0 = input.LA(1);
+
+                         
+                        int index280_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA280_0==108) ) {s = 1;}
+
+                        else if ( LA280_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA280_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA280_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA280_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA280_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA280_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA280_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA280_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA280_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA280_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA280_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA280_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA280_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA280_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA280_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                        else if ( LA280_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA280_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( (LA280_0==EOF||LA280_0==53) ) {s = 19;}
+
+                         
+                        input.seek(index280_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA280_1 = input.LA(1);
+
+                         
+                        int index280_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred388_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 18;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {s = 19;}
+
+                         
+                        input.seek(index280_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 280, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA281_eotS =
+        "\25\uffff";
+    static final String DFA281_eofS =
+        "\1\23\24\uffff";
+    static final String DFA281_minS =
+        "\1\32\1\0\23\uffff";
+    static final String DFA281_maxS =
+        "\1\u0081\1\0\23\uffff";
+    static final String DFA281_acceptS =
+        "\2\uffff\21\1\1\2\1\uffff";
+    static final String DFA281_specialS =
+        "\1\0\1\1\23\uffff}>";
+    static final String[] DFA281_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\23\1\3\1\uffff\1\5\1\7\1\13\1\17\1\21\2\uffff\1"+
+            "\11\54\uffff\1\1\1\22\23\uffff\1\14",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA281_eot = DFA.unpackEncodedString(DFA281_eotS);
+    static final short[] DFA281_eof = DFA.unpackEncodedString(DFA281_eofS);
+    static final char[] DFA281_min = DFA.unpackEncodedStringToUnsignedChars(DFA281_minS);
+    static final char[] DFA281_max = DFA.unpackEncodedStringToUnsignedChars(DFA281_maxS);
+    static final short[] DFA281_accept = DFA.unpackEncodedString(DFA281_acceptS);
+    static final short[] DFA281_special = DFA.unpackEncodedString(DFA281_specialS);
+    static final short[][] DFA281_transition;
+
+    static {
+        int numStates = DFA281_transitionS.length;
+        DFA281_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA281_transition[i] = DFA.unpackEncodedString(DFA281_transitionS[i]);
+        }
+    }
+
+    class DFA281 extends DFA {
+
+        public DFA281(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 281;
+            this.eot = DFA281_eot;
+            this.eof = DFA281_eof;
+            this.min = DFA281_min;
+            this.max = DFA281_max;
+            this.accept = DFA281_accept;
+            this.special = DFA281_special;
+            this.transition = DFA281_transition;
+        }
+        public String getDescription() {
+            return "24948:2: ( rule__ReferenceCS__UnorderedGroup_6__3 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA281_0 = input.LA(1);
+
+                         
+                        int index281_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA281_0==108) ) {s = 1;}
+
+                        else if ( LA281_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA281_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA281_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA281_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA281_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA281_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA281_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA281_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA281_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA281_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA281_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA281_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA281_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA281_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA281_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                        else if ( LA281_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA281_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( (LA281_0==EOF||LA281_0==53) ) {s = 19;}
+
+                         
+                        input.seek(index281_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA281_1 = input.LA(1);
+
+                         
+                        int index281_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred389_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 18;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {s = 19;}
+
+                         
+                        input.seek(index281_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 281, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA282_eotS =
+        "\25\uffff";
+    static final String DFA282_eofS =
+        "\1\23\24\uffff";
+    static final String DFA282_minS =
+        "\1\32\1\0\23\uffff";
+    static final String DFA282_maxS =
+        "\1\u0081\1\0\23\uffff";
+    static final String DFA282_acceptS =
+        "\2\uffff\21\1\1\2\1\uffff";
+    static final String DFA282_specialS =
+        "\1\0\1\1\23\uffff}>";
+    static final String[] DFA282_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\23\1\3\1\uffff\1\5\1\7\1\13\1\17\1\21\2\uffff\1"+
+            "\11\54\uffff\1\1\1\22\23\uffff\1\14",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA282_eot = DFA.unpackEncodedString(DFA282_eotS);
+    static final short[] DFA282_eof = DFA.unpackEncodedString(DFA282_eofS);
+    static final char[] DFA282_min = DFA.unpackEncodedStringToUnsignedChars(DFA282_minS);
+    static final char[] DFA282_max = DFA.unpackEncodedStringToUnsignedChars(DFA282_maxS);
+    static final short[] DFA282_accept = DFA.unpackEncodedString(DFA282_acceptS);
+    static final short[] DFA282_special = DFA.unpackEncodedString(DFA282_specialS);
+    static final short[][] DFA282_transition;
+
+    static {
+        int numStates = DFA282_transitionS.length;
+        DFA282_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA282_transition[i] = DFA.unpackEncodedString(DFA282_transitionS[i]);
+        }
+    }
+
+    class DFA282 extends DFA {
+
+        public DFA282(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 282;
+            this.eot = DFA282_eot;
+            this.eof = DFA282_eof;
+            this.min = DFA282_min;
+            this.max = DFA282_max;
+            this.accept = DFA282_accept;
+            this.special = DFA282_special;
+            this.transition = DFA282_transition;
+        }
+        public String getDescription() {
+            return "24961:2: ( rule__ReferenceCS__UnorderedGroup_6__4 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA282_0 = input.LA(1);
+
+                         
+                        int index282_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA282_0==108) ) {s = 1;}
+
+                        else if ( LA282_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA282_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA282_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA282_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA282_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA282_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA282_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA282_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA282_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA282_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA282_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA282_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA282_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA282_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA282_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                        else if ( LA282_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA282_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( (LA282_0==EOF||LA282_0==53) ) {s = 19;}
+
+                         
+                        input.seek(index282_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA282_1 = input.LA(1);
+
+                         
+                        int index282_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred390_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 18;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {s = 19;}
+
+                         
+                        input.seek(index282_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 282, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA283_eotS =
+        "\25\uffff";
+    static final String DFA283_eofS =
+        "\1\23\24\uffff";
+    static final String DFA283_minS =
+        "\1\32\1\0\23\uffff";
+    static final String DFA283_maxS =
+        "\1\u0081\1\0\23\uffff";
+    static final String DFA283_acceptS =
+        "\2\uffff\21\1\1\2\1\uffff";
+    static final String DFA283_specialS =
+        "\1\0\1\1\23\uffff}>";
+    static final String[] DFA283_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\23\1\3\1\uffff\1\5\1\7\1\13\1\17\1\21\2\uffff\1"+
+            "\11\54\uffff\1\1\1\22\23\uffff\1\14",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA283_eot = DFA.unpackEncodedString(DFA283_eotS);
+    static final short[] DFA283_eof = DFA.unpackEncodedString(DFA283_eofS);
+    static final char[] DFA283_min = DFA.unpackEncodedStringToUnsignedChars(DFA283_minS);
+    static final char[] DFA283_max = DFA.unpackEncodedStringToUnsignedChars(DFA283_maxS);
+    static final short[] DFA283_accept = DFA.unpackEncodedString(DFA283_acceptS);
+    static final short[] DFA283_special = DFA.unpackEncodedString(DFA283_specialS);
+    static final short[][] DFA283_transition;
+
+    static {
+        int numStates = DFA283_transitionS.length;
+        DFA283_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA283_transition[i] = DFA.unpackEncodedString(DFA283_transitionS[i]);
+        }
+    }
+
+    class DFA283 extends DFA {
+
+        public DFA283(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 283;
+            this.eot = DFA283_eot;
+            this.eof = DFA283_eof;
+            this.min = DFA283_min;
+            this.max = DFA283_max;
+            this.accept = DFA283_accept;
+            this.special = DFA283_special;
+            this.transition = DFA283_transition;
+        }
+        public String getDescription() {
+            return "24974:2: ( rule__ReferenceCS__UnorderedGroup_6__5 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA283_0 = input.LA(1);
+
+                         
+                        int index283_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA283_0==108) ) {s = 1;}
+
+                        else if ( LA283_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA283_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA283_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA283_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA283_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA283_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA283_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA283_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA283_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA283_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA283_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA283_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA283_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA283_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA283_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                        else if ( LA283_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA283_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( (LA283_0==EOF||LA283_0==53) ) {s = 19;}
+
+                         
+                        input.seek(index283_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA283_1 = input.LA(1);
+
+                         
+                        int index283_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred391_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 18;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {s = 19;}
+
+                         
+                        input.seek(index283_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 283, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA284_eotS =
+        "\25\uffff";
+    static final String DFA284_eofS =
+        "\1\23\24\uffff";
+    static final String DFA284_minS =
+        "\1\32\1\0\23\uffff";
+    static final String DFA284_maxS =
+        "\1\u0081\1\0\23\uffff";
+    static final String DFA284_acceptS =
+        "\2\uffff\21\1\1\2\1\uffff";
+    static final String DFA284_specialS =
+        "\1\0\1\1\23\uffff}>";
+    static final String[] DFA284_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\23\1\3\1\uffff\1\5\1\7\1\13\1\17\1\21\2\uffff\1"+
+            "\11\54\uffff\1\1\1\22\23\uffff\1\14",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA284_eot = DFA.unpackEncodedString(DFA284_eotS);
+    static final short[] DFA284_eof = DFA.unpackEncodedString(DFA284_eofS);
+    static final char[] DFA284_min = DFA.unpackEncodedStringToUnsignedChars(DFA284_minS);
+    static final char[] DFA284_max = DFA.unpackEncodedStringToUnsignedChars(DFA284_maxS);
+    static final short[] DFA284_accept = DFA.unpackEncodedString(DFA284_acceptS);
+    static final short[] DFA284_special = DFA.unpackEncodedString(DFA284_specialS);
+    static final short[][] DFA284_transition;
+
+    static {
+        int numStates = DFA284_transitionS.length;
+        DFA284_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA284_transition[i] = DFA.unpackEncodedString(DFA284_transitionS[i]);
+        }
+    }
+
+    class DFA284 extends DFA {
+
+        public DFA284(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 284;
+            this.eot = DFA284_eot;
+            this.eof = DFA284_eof;
+            this.min = DFA284_min;
+            this.max = DFA284_max;
+            this.accept = DFA284_accept;
+            this.special = DFA284_special;
+            this.transition = DFA284_transition;
+        }
+        public String getDescription() {
+            return "24987:2: ( rule__ReferenceCS__UnorderedGroup_6__6 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA284_0 = input.LA(1);
+
+                         
+                        int index284_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA284_0==108) ) {s = 1;}
+
+                        else if ( LA284_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA284_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA284_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA284_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA284_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA284_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA284_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA284_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA284_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA284_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA284_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA284_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA284_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA284_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA284_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                        else if ( LA284_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA284_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( (LA284_0==EOF||LA284_0==53) ) {s = 19;}
+
+                         
+                        input.seek(index284_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA284_1 = input.LA(1);
+
+                         
+                        int index284_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred392_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 18;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {s = 19;}
+
+                         
+                        input.seek(index284_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 284, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA285_eotS =
+        "\54\uffff";
+    static final String DFA285_eofS =
+        "\1\23\1\51\22\uffff\1\53\26\uffff\1\23";
+    static final String DFA285_minS =
+        "\1\32\1\26\22\uffff\1\7\26\uffff\1\0";
+    static final String DFA285_maxS =
+        "\2\u0081\22\uffff\1\155\26\uffff\1\0";
+    static final String DFA285_acceptS =
+        "\2\uffff\21\1\1\2\1\uffff\26\1\1\uffff";
+    static final String DFA285_specialS =
+        "\1\0\1\2\22\uffff\1\1\27\uffff}>";
+    static final String[] DFA285_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\23\1\3\1\uffff\1\5\1\7\1\13\1\17\1\21\2\uffff\1"+
+            "\11\54\uffff\1\1\1\22\23\uffff\1\14",
+            "\1\25\2\uffff\1\23\1\30\4\uffff\1\23\1\uffff\1\23\3\uffff"+
+            "\1\32\5\uffff\1\34\1\uffff\1\36\3\uffff\1\40\1\43\1\44\1\46"+
+            "\1\50\1\31\1\uffff\1\33\1\35\1\41\1\45\1\47\1\uffff\1\26\1\37"+
+            "\2\23\3\uffff\1\23\46\uffff\1\27\1\24\23\uffff\1\42",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\2\23\10\uffff\44\23\1\50\12\uffff\4\23\1\uffff\1\23\46\uffff"+
+            "\1\52\1\23",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\uffff"
+    };
+
+    static final short[] DFA285_eot = DFA.unpackEncodedString(DFA285_eotS);
+    static final short[] DFA285_eof = DFA.unpackEncodedString(DFA285_eofS);
+    static final char[] DFA285_min = DFA.unpackEncodedStringToUnsignedChars(DFA285_minS);
+    static final char[] DFA285_max = DFA.unpackEncodedStringToUnsignedChars(DFA285_maxS);
+    static final short[] DFA285_accept = DFA.unpackEncodedString(DFA285_acceptS);
+    static final short[] DFA285_special = DFA.unpackEncodedString(DFA285_specialS);
+    static final short[][] DFA285_transition;
+
+    static {
+        int numStates = DFA285_transitionS.length;
+        DFA285_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA285_transition[i] = DFA.unpackEncodedString(DFA285_transitionS[i]);
+        }
+    }
+
+    class DFA285 extends DFA {
+
+        public DFA285(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 285;
+            this.eot = DFA285_eot;
+            this.eof = DFA285_eof;
+            this.min = DFA285_min;
+            this.max = DFA285_max;
+            this.accept = DFA285_accept;
+            this.special = DFA285_special;
+            this.transition = DFA285_transition;
+        }
+        public String getDescription() {
+            return "25000:2: ( rule__ReferenceCS__UnorderedGroup_6__7 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA285_0 = input.LA(1);
+
+                         
+                        int index285_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA285_0==108) ) {s = 1;}
+
+                        else if ( LA285_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA285_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA285_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA285_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA285_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA285_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA285_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA285_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA285_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA285_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA285_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA285_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA285_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA285_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA285_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                        else if ( LA285_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA285_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( (LA285_0==EOF||LA285_0==53) ) {s = 19;}
+
+                         
+                        input.seek(index285_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA285_20 = input.LA(1);
+
+                         
+                        int index285_20 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( LA285_20 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 42;}
+
+                        else if ( LA285_20 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 40;}
+
+                        else if ( (LA285_20==EOF) ) {s = 43;}
+
+                        else if ( ((LA285_20>=RULE_SIMPLE_ID && LA285_20<=RULE_ESCAPED_ID)||(LA285_20>=17 && LA285_20<=52)||(LA285_20>=64 && LA285_20<=67)||LA285_20==69||LA285_20==109) ) {s = 19;}
+
+                         
+                        input.seek(index285_20);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA285_1 = input.LA(1);
+
+                         
+                        int index285_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA285_1==25||LA285_1==31||LA285_1==33||(LA285_1>=64 && LA285_1<=65)||LA285_1==69) ) {s = 19;}
+
+                        else if ( (LA285_1==109) ) {s = 20;}
+
+                        else if ( LA285_1 ==22 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 21;}
+
+                        else if ( LA285_1 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 22;}
+
+                        else if ( LA285_1 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 23;}
+
+                        else if ( LA285_1 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 24;}
+
+                        else if ( LA285_1 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 25;}
+
+                        else if ( LA285_1 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 26;}
+
+                        else if ( LA285_1 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 27;}
+
+                        else if ( LA285_1 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 28;}
+
+                        else if ( LA285_1 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 29;}
+
+                        else if ( LA285_1 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 30;}
+
+                        else if ( LA285_1 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 31;}
+
+                        else if ( LA285_1 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 32;}
+
+                        else if ( LA285_1 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 33;}
+
+                        else if ( LA285_1 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 34;}
+
+                        else if ( LA285_1 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 35;}
+
+                        else if ( LA285_1 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 36;}
+
+                        else if ( LA285_1 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 37;}
+
+                        else if ( LA285_1 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 38;}
+
+                        else if ( LA285_1 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 39;}
+
+                        else if ( LA285_1 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 40;}
+
+                        else if ( LA285_1 ==EOF && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 41;}
+
+                         
+                        input.seek(index285_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 285, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA286_eotS =
+        "\31\uffff";
+    static final String DFA286_eofS =
+        "\1\23\1\30\27\uffff";
+    static final String DFA286_minS =
+        "\1\32\1\26\27\uffff";
+    static final String DFA286_maxS =
+        "\1\u0081\1\155\27\uffff";
+    static final String DFA286_acceptS =
+        "\2\uffff\21\1\1\2\5\1";
+    static final String DFA286_specialS =
+        "\1\0\1\1\27\uffff}>";
+    static final String[] DFA286_transitionS = {
+            "\1\2\12\uffff\1\4\5\uffff\1\6\1\uffff\1\10\3\uffff\1\12\1\15"+
+            "\1\16\1\20\1\23\1\3\1\uffff\1\5\1\7\1\13\1\17\1\21\2\uffff\1"+
+            "\11\54\uffff\1\1\1\22\23\uffff\1\14",
+            "\1\24\2\uffff\1\23\5\uffff\1\23\1\uffff\1\23\23\uffff\1\27"+
+            "\10\uffff\1\25\1\uffff\2\23\3\uffff\1\23\46\uffff\1\26\1\23",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA286_eot = DFA.unpackEncodedString(DFA286_eotS);
+    static final short[] DFA286_eof = DFA.unpackEncodedString(DFA286_eofS);
+    static final char[] DFA286_min = DFA.unpackEncodedStringToUnsignedChars(DFA286_minS);
+    static final char[] DFA286_max = DFA.unpackEncodedStringToUnsignedChars(DFA286_maxS);
+    static final short[] DFA286_accept = DFA.unpackEncodedString(DFA286_acceptS);
+    static final short[] DFA286_special = DFA.unpackEncodedString(DFA286_specialS);
+    static final short[][] DFA286_transition;
+
+    static {
+        int numStates = DFA286_transitionS.length;
+        DFA286_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA286_transition[i] = DFA.unpackEncodedString(DFA286_transitionS[i]);
+        }
+    }
+
+    class DFA286 extends DFA {
+
+        public DFA286(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 286;
+            this.eot = DFA286_eot;
+            this.eof = DFA286_eof;
+            this.min = DFA286_min;
+            this.max = DFA286_max;
+            this.accept = DFA286_accept;
+            this.special = DFA286_special;
+            this.transition = DFA286_transition;
+        }
+        public String getDescription() {
+            return "25013:2: ( rule__ReferenceCS__UnorderedGroup_6__8 )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA286_0 = input.LA(1);
+
+                         
+                        int index286_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA286_0==108) ) {s = 1;}
+
+                        else if ( LA286_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 2;}
+
+                        else if ( LA286_0 ==54 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA286_0 ==37 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 4;}
+
+                        else if ( LA286_0 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA286_0 ==43 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( LA286_0 ==57 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA286_0 ==45 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 8;}
+
+                        else if ( LA286_0 ==63 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA286_0 ==49 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 10;}
+
+                        else if ( LA286_0 ==58 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA286_0 ==129 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 12;}
+
+                        else if ( LA286_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA286_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 14;}
+
+                        else if ( LA286_0 ==59 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA286_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 16;}
+
+                        else if ( LA286_0 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA286_0 ==109 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( (LA286_0==EOF||LA286_0==53) ) {s = 19;}
+
+                         
+                        input.seek(index286_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA286_1 = input.LA(1);
+
+                         
+                        int index286_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA286_1==25||LA286_1==31||LA286_1==33||(LA286_1>=64 && LA286_1<=65)||LA286_1==69||LA286_1==109) ) {s = 19;}
+
+                        else if ( LA286_1 ==22 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 20;}
+
+                        else if ( LA286_1 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 21;}
+
+                        else if ( LA286_1 ==108 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 22;}
+
+                        else if ( LA286_1 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 23;}
+
+                        else if ( LA286_1 ==EOF && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 24;}
+
+                         
+                        input.seek(index286_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 286, _s, input);
+            error(nvae);
+            throw nvae;
         }
     }
  
@@ -82686,1968 +92519,2132 @@
         public static final BitSet FOLLOW_ruleAnnotationCS_in_rule__AnnotationElementCS__Alternatives7486 = new BitSet(new long[]{0x0000000000000002L});
         public static final BitSet FOLLOW_ruleDocumentationCS_in_rule__AnnotationElementCS__Alternatives7503 = new BitSet(new long[]{0x0000000000000002L});
         public static final BitSet FOLLOW_ruleSysMLCS_in_rule__AnnotationElementCS__Alternatives7520 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_0_0__0_in_rule__AttributeCS__Alternatives_07552 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_0_1__0_in_rule__AttributeCS__Alternatives_07570 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_0_in_rule__AttributeCS__Alternatives_5_1_07603 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_1_in_rule__AttributeCS__Alternatives_5_1_07621 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_2_in_rule__AttributeCS__Alternatives_5_1_07639 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_3_in_rule__AttributeCS__Alternatives_5_1_07657 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_4_in_rule__AttributeCS__Alternatives_5_1_07675 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_5_in_rule__AttributeCS__Alternatives_5_1_07693 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_6_in_rule__AttributeCS__Alternatives_5_1_07711 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_7_in_rule__AttributeCS__Alternatives_5_1_07729 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_8_in_rule__AttributeCS__Alternatives_5_1_07747 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_9_in_rule__AttributeCS__Alternatives_5_1_07765 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_10_in_rule__AttributeCS__Alternatives_5_1_07783 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_11_in_rule__AttributeCS__Alternatives_5_1_07801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_12_in_rule__AttributeCS__Alternatives_5_1_07819 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_13_in_rule__AttributeCS__Alternatives_5_1_07837 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_14_in_rule__AttributeCS__Alternatives_5_1_07855 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_5_1_0_15_in_rule__AttributeCS__Alternatives_5_1_07873 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__0_in_rule__AttributeCS__Alternatives_67906 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__AttributeCS__Alternatives_67925 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0_in_rule__AttributeCS__Alternatives_6_0_17959 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__0_in_rule__AttributeCS__Alternatives_6_0_17977 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__0_in_rule__AttributeCS__Alternatives_6_0_17995 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStructuredClassCS_in_rule__ClassCS__Alternatives8028 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDataTypeCS_in_rule__ClassCS__Alternatives8045 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationCS_in_rule__ClassCS__Alternatives8062 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__IsSerializableAssignment_5_1_0_in_rule__DataTypeCS__Alternatives_5_18094 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_54_in_rule__DataTypeCS__Alternatives_5_18113 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__0_in_rule__DataTypeCS__Alternatives_68147 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__DataTypeCS__Alternatives_68166 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0_in_rule__DataTypeCS__Alternatives_6_0_18200 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1_in_rule__DataTypeCS__Alternatives_6_0_18218 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__DetailCS__NameAlternatives_0_08251 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DetailCS__NameAlternatives_0_08268 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DetailCS__ValuesAlternatives_2_08300 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ML_SINGLE_QUOTED_STRING_in_rule__DetailCS__ValuesAlternatives_2_08317 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__IsSerializableAssignment_4_1_0_in_rule__EnumerationCS__Alternatives_4_18349 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_54_in_rule__EnumerationCS__Alternatives_4_18368 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__0_in_rule__EnumerationCS__Alternatives_58402 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__EnumerationCS__Alternatives_58421 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0_in_rule__EnumerationCS__Alternatives_5_0_18455 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1_in_rule__EnumerationCS__Alternatives_5_0_18473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2_in_rule__EnumerationCS__Alternatives_5_0_18491 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_0_0__0_in_rule__EnumerationLiteralCS__Alternatives_08524 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__NameAssignment_0_1_in_rule__EnumerationLiteralCS__Alternatives_08542 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__0_in_rule__EnumerationLiteralCS__Alternatives_28575 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__EnumerationLiteralCS__Alternatives_28594 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleClassCS_in_rule__ModelElementCS__Alternatives8628 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_rule__ModelElementCS__Alternatives8645 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOperationCS_in_rule__ModelElementCS__Alternatives8662 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePackageCS_in_rule__ModelElementCS__Alternatives8679 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_rule__ModelElementCS__Alternatives8696 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_0_0__0_in_rule__OperationCS__Alternatives_08728 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_0_1__0_in_rule__OperationCS__Alternatives_08746 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_0_in_rule__OperationCS__Alternatives_9_1_08779 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_1_in_rule__OperationCS__Alternatives_9_1_08797 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_2_in_rule__OperationCS__Alternatives_9_1_08815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_3_in_rule__OperationCS__Alternatives_9_1_08833 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_4_in_rule__OperationCS__Alternatives_9_1_08851 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_9_1_0_5_in_rule__OperationCS__Alternatives_9_1_08869 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__0_in_rule__OperationCS__Alternatives_108902 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__OperationCS__Alternatives_108921 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0_in_rule__OperationCS__Alternatives_10_0_18955 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1_in_rule__OperationCS__Alternatives_10_0_18973 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__0_in_rule__OperationCS__Alternatives_10_0_18991 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3_in_rule__OperationCS__Alternatives_10_0_19009 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__0_in_rule__PackageCS__Alternatives_49042 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__PackageCS__Alternatives_49061 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0_in_rule__PackageCS__Alternatives_4_0_19095 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__OwnedPackagesAssignment_4_0_1_1_in_rule__PackageCS__Alternatives_4_0_19113 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__OwnedClassesAssignment_4_0_1_2_in_rule__PackageCS__Alternatives_4_0_19131 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__QualifiersAssignment_2_1_0_0_in_rule__ParameterCS__Alternatives_2_1_09164 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__QualifiersAssignment_2_1_0_1_in_rule__ParameterCS__Alternatives_2_1_09182 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__QualifiersAssignment_2_1_0_2_in_rule__ParameterCS__Alternatives_2_1_09200 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__QualifiersAssignment_2_1_0_3_in_rule__ParameterCS__Alternatives_2_1_09218 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_0_0__0_in_rule__ReferenceCS__Alternatives_09251 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_0_1__0_in_rule__ReferenceCS__Alternatives_09269 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_0_in_rule__ReferenceCS__Alternatives_6_1_09302 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_1_in_rule__ReferenceCS__Alternatives_6_1_09320 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_2_in_rule__ReferenceCS__Alternatives_6_1_09338 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_3_in_rule__ReferenceCS__Alternatives_6_1_09356 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_4_in_rule__ReferenceCS__Alternatives_6_1_09374 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_5_in_rule__ReferenceCS__Alternatives_6_1_09392 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_6_in_rule__ReferenceCS__Alternatives_6_1_09410 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_7_in_rule__ReferenceCS__Alternatives_6_1_09428 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_8_in_rule__ReferenceCS__Alternatives_6_1_09446 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_9_in_rule__ReferenceCS__Alternatives_6_1_09464 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_10_in_rule__ReferenceCS__Alternatives_6_1_09482 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_11_in_rule__ReferenceCS__Alternatives_6_1_09500 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_12_in_rule__ReferenceCS__Alternatives_6_1_09518 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_13_in_rule__ReferenceCS__Alternatives_6_1_09536 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_14_in_rule__ReferenceCS__Alternatives_6_1_09554 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_15_in_rule__ReferenceCS__Alternatives_6_1_09572 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_16_in_rule__ReferenceCS__Alternatives_6_1_09590 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_6_1_0_17_in_rule__ReferenceCS__Alternatives_6_1_09608 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__0_in_rule__ReferenceCS__Alternatives_79641 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__ReferenceCS__Alternatives_79660 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0_in_rule__ReferenceCS__Alternatives_7_0_19694 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__0_in_rule__ReferenceCS__Alternatives_7_0_19712 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__0_in_rule__ReferenceCS__Alternatives_7_0_19730 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__0_in_rule__ReferenceCS__Alternatives_7_0_19748 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SpecificationCS__OwnedExpressionAssignment_0_in_rule__SpecificationCS__Alternatives9781 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SpecificationCS__ExprStringAssignment_1_in_rule__SpecificationCS__Alternatives9799 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__0_in_rule__StructuredClassCS__Alternatives_79832 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__StructuredClassCS__Alternatives_79851 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0_in_rule__StructuredClassCS__Alternatives_7_0_19885 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1_in_rule__StructuredClassCS__Alternatives_7_0_19903 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2_in_rule__StructuredClassCS__Alternatives_7_0_19921 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3_in_rule__StructuredClassCS__Alternatives_7_0_19939 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAttributeCS_in_rule__StructuralFeatureCS__Alternatives9972 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleReferenceCS_in_rule__StructuralFeatureCS__Alternatives9989 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_0__0_in_rule__SysMLCS__Alternatives_210021 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__0_in_rule__SysMLCS__Alternatives_210039 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__0_in_rule__TemplateBindingCS__Alternatives10073 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__0_in_rule__TemplateBindingCS__Alternatives10091 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__0_in_rule__TemplateSignatureCS__Alternatives10124 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__0_in_rule__TemplateSignatureCS__Alternatives10142 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_rule__TypedRefCS__Alternatives10175 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedTypeRefCS_in_rule__TypedRefCS__Alternatives10192 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationLiteralName_in_rule__UnrestrictedName__Alternatives10224 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_55_in_rule__UnrestrictedName__Alternatives10242 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_56_in_rule__UnrestrictedName__Alternatives10262 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_57_in_rule__UnrestrictedName__Alternatives10282 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_rule__UnrestrictedName__Alternatives10302 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_59_in_rule__UnrestrictedName__Alternatives10322 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_60_in_rule__UnrestrictedName__Alternatives10342 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_61_in_rule__EssentialOCLUnaryOperatorName__Alternatives10378 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_62_in_rule__EssentialOCLUnaryOperatorName__Alternatives10398 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_63_in_rule__EssentialOCLInfixOperatorName__Alternatives10433 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_64_in_rule__EssentialOCLInfixOperatorName__Alternatives10453 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_65_in_rule__EssentialOCLInfixOperatorName__Alternatives10473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_61_in_rule__EssentialOCLInfixOperatorName__Alternatives10493 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_66_in_rule__EssentialOCLInfixOperatorName__Alternatives10513 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_67_in_rule__EssentialOCLInfixOperatorName__Alternatives10533 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_68_in_rule__EssentialOCLInfixOperatorName__Alternatives10553 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_69_in_rule__EssentialOCLInfixOperatorName__Alternatives10573 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__EssentialOCLInfixOperatorName__Alternatives10593 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_71_in_rule__EssentialOCLInfixOperatorName__Alternatives10613 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_72_in_rule__EssentialOCLInfixOperatorName__Alternatives10633 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_73_in_rule__EssentialOCLInfixOperatorName__Alternatives10653 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_74_in_rule__EssentialOCLInfixOperatorName__Alternatives10673 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_75_in_rule__EssentialOCLInfixOperatorName__Alternatives10693 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_76_in_rule__EssentialOCLNavigationOperatorName__Alternatives10728 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_77_in_rule__EssentialOCLNavigationOperatorName__Alternatives10748 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_78_in_rule__EssentialOCLNavigationOperatorName__Alternatives10768 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_79_in_rule__EssentialOCLNavigationOperatorName__Alternatives10788 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleInfixOperatorName_in_rule__BinaryOperatorName__Alternatives10822 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigationOperatorName_in_rule__BinaryOperatorName__Alternatives10839 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__EssentialOCLUnreservedName__Alternatives10871 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_rule__EssentialOCLUnreservedName__Alternatives10888 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_rule__EssentialOCLUnreservedName__Alternatives10905 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_80_in_rule__EssentialOCLUnreservedName__Alternatives10923 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__ReferredElementAssignment_0_in_rule__URIFirstPathElementCS__Alternatives10957 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__Group_1__0_in_rule__URIFirstPathElementCS__Alternatives10975 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_81_in_rule__PrimitiveTypeIdentifier__Alternatives11009 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_82_in_rule__PrimitiveTypeIdentifier__Alternatives11029 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_83_in_rule__PrimitiveTypeIdentifier__Alternatives11049 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_84_in_rule__PrimitiveTypeIdentifier__Alternatives11069 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_85_in_rule__PrimitiveTypeIdentifier__Alternatives11089 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_86_in_rule__PrimitiveTypeIdentifier__Alternatives11109 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_87_in_rule__PrimitiveTypeIdentifier__Alternatives11129 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_88_in_rule__PrimitiveTypeIdentifier__Alternatives11149 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_89_in_rule__CollectionTypeIdentifier__Alternatives11184 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_90_in_rule__CollectionTypeIdentifier__Alternatives11204 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_91_in_rule__CollectionTypeIdentifier__Alternatives11224 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_92_in_rule__CollectionTypeIdentifier__Alternatives11244 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_93_in_rule__CollectionTypeIdentifier__Alternatives11264 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0__0_in_rule__CollectionLiteralPartCS__Alternatives11298 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1_in_rule__CollectionLiteralPartCS__Alternatives11316 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_011349 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_011366 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNumberLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11398 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStringLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11415 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleBooleanLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11432 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11449 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleInvalidLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11466 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNullLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11483 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__BooleanLiteralExpCS__SymbolAssignment_0_in_rule__BooleanLiteralExpCS__Alternatives11515 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__BooleanLiteralExpCS__SymbolAssignment_1_in_rule__BooleanLiteralExpCS__Alternatives11533 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveTypeCS_in_rule__TypeLiteralCS__Alternatives11566 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_rule__TypeLiteralCS__Alternatives11583 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleTypeCS_in_rule__TypeLiteralCS__Alternatives11600 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeNameExpCS_in_rule__TypeExpCS__Alternatives_011632 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_rule__TypeExpCS__Alternatives_011649 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionPatternCS_in_rule__TypeExpCS__Alternatives_011666 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0__0_in_rule__ExpCS__Alternatives11698 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_rule__ExpCS__Alternatives11716 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__0_in_rule__PrefixedLetExpCS__Alternatives11748 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLetExpCS_in_rule__PrefixedLetExpCS__Alternatives11766 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__0_in_rule__PrefixedPrimaryExpCS__Alternatives11798 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimaryExpCS_in_rule__PrefixedPrimaryExpCS__Alternatives11816 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNestedExpCS_in_rule__PrimaryExpCS__Alternatives11848 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleIfExpCS_in_rule__PrimaryExpCS__Alternatives11865 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSelfExpCS_in_rule__PrimaryExpCS__Alternatives11882 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11899 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11916 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11933 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLambdaLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11950 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_rule__PrimaryExpCS__Alternatives11967 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNameExpCS_in_rule__PrimaryExpCS__Alternatives11984 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__0_in_rule__CurlyBracketedClauseCS__Alternatives_212016 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__ValueAssignment_2_1_in_rule__CurlyBracketedClauseCS__Alternatives_212035 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0__0_in_rule__NavigatingArgCS__Alternatives12068 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_1__0_in_rule__NavigatingArgCS__Alternatives12086 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__0_in_rule__NavigatingArgCS__Alternatives_0_112119 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_1__0_in_rule__NavigatingArgCS__Alternatives_0_112137 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__0_in_rule__NavigatingCommaArgCS__Alternatives_212170 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__0_in_rule__NavigatingCommaArgCS__Alternatives_212188 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedConditionAlternatives_1_012221 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__IfExpCS__OwnedConditionAlternatives_1_012238 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleMultiplicityBoundsCS_in_rule__MultiplicityCS__Alternatives_112270 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleMultiplicityStringCS_in_rule__MultiplicityCS__Alternatives_112287 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_63_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012320 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_65_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012340 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_94_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012360 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__0_in_rule__TypeParameterCS__Alternatives_112394 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_1__0_in_rule__TypeParameterCS__Alternatives_112412 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypeRefCS__Alternatives12445 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleWildcardTypeRefCS_in_rule__TypeRefCS__Alternatives12462 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_0__0_in_rule__WildcardTypeRefCS__Alternatives_212494 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_1__0_in_rule__WildcardTypeRefCS__Alternatives_212512 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SIMPLE_ID_in_rule__ID__Alternatives12545 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ESCAPED_ID_in_rule__ID__Alternatives12562 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__UPPER__Alternatives12594 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_63_in_rule__UPPER__Alternatives12612 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group__0__Impl_in_rule__TopLevelCS__Group__012644 = new BitSet(new long[]{0x0000004C40000000L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group__1_in_rule__TopLevelCS__Group__012647 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group__1__Impl_in_rule__TopLevelCS__Group__112705 = new BitSet(new long[]{0x0000004C40000000L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group__2_in_rule__TopLevelCS__Group__112708 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group_1__0_in_rule__TopLevelCS__Group__1__Impl12735 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group__2__Impl_in_rule__TopLevelCS__Group__212766 = new BitSet(new long[]{0x0000004C40000000L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group__3_in_rule__TopLevelCS__Group__212769 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__OwnedLibrariesAssignment_2_in_rule__TopLevelCS__Group__2__Impl12796 = new BitSet(new long[]{0x0000000400000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group__3__Impl_in_rule__TopLevelCS__Group__312827 = new BitSet(new long[]{0x0000004C40000000L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group__4_in_rule__TopLevelCS__Group__312830 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__OwnedImportsAssignment_3_in_rule__TopLevelCS__Group__3__Impl12857 = new BitSet(new long[]{0x0000000040000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group__4__Impl_in_rule__TopLevelCS__Group__412888 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__OwnedPackagesAssignment_4_in_rule__TopLevelCS__Group__4__Impl12915 = new BitSet(new long[]{0x0000004000000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group_1__0__Impl_in_rule__TopLevelCS__Group_1__012956 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group_1__1_in_rule__TopLevelCS__Group_1__012959 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_35_in_rule__TopLevelCS__Group_1__0__Impl12987 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TopLevelCS__Group_1__1__Impl_in_rule__TopLevelCS__Group_1__113018 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__TopLevelCS__Group_1__1__Impl13045 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SIGNED__Group__0__Impl_in_rule__SIGNED__Group__013078 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__SIGNED__Group__1_in_rule__SIGNED__Group__013081 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_61_in_rule__SIGNED__Group__0__Impl13110 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SIGNED__Group__1__Impl_in_rule__SIGNED__Group__113143 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__SIGNED__Group__1__Impl13170 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__0__Impl_in_rule__InvariantConstraintCS__Group__013203 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__1_in_rule__InvariantConstraintCS__Group__013206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__IsCallableAssignment_0_in_rule__InvariantConstraintCS__Group__0__Impl13233 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__1__Impl_in_rule__InvariantConstraintCS__Group__113264 = new BitSet(new long[]{0x1FBFFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__2_in_rule__InvariantConstraintCS__Group__113267 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__StereotypeAssignment_1_in_rule__InvariantConstraintCS__Group__1__Impl13294 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__2__Impl_in_rule__InvariantConstraintCS__Group__213324 = new BitSet(new long[]{0x1FBFFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__3_in_rule__InvariantConstraintCS__Group__213327 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2__0_in_rule__InvariantConstraintCS__Group__2__Impl13354 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__3__Impl_in_rule__InvariantConstraintCS__Group__313385 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Alternatives_3_in_rule__InvariantConstraintCS__Group__3__Impl13412 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2__0__Impl_in_rule__InvariantConstraintCS__Group_2__013450 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2__1_in_rule__InvariantConstraintCS__Group_2__013453 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__NameAssignment_2_0_in_rule__InvariantConstraintCS__Group_2__0__Impl13480 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2__1__Impl_in_rule__InvariantConstraintCS__Group_2__113510 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__0_in_rule__InvariantConstraintCS__Group_2__1__Impl13537 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__0__Impl_in_rule__InvariantConstraintCS__Group_2_1__013572 = new BitSet(new long[]{0xFF9FFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__1_in_rule__InvariantConstraintCS__Group_2_1__013575 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__InvariantConstraintCS__Group_2_1__0__Impl13603 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__1__Impl_in_rule__InvariantConstraintCS__Group_2_1__113634 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__2_in_rule__InvariantConstraintCS__Group_2_1__113637 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1_in_rule__InvariantConstraintCS__Group_2_1__1__Impl13664 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__2__Impl_in_rule__InvariantConstraintCS__Group_2_1__213694 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__InvariantConstraintCS__Group_2_1__2__Impl13722 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__0__Impl_in_rule__InvariantConstraintCS__Group_3_0__013759 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__1_in_rule__InvariantConstraintCS__Group_3_0__013762 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__InvariantConstraintCS__Group_3_0__0__Impl13790 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__1__Impl_in_rule__InvariantConstraintCS__Group_3_0__113821 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__2_in_rule__InvariantConstraintCS__Group_3_0__113824 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1_in_rule__InvariantConstraintCS__Group_3_0__1__Impl13851 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__2__Impl_in_rule__InvariantConstraintCS__Group_3_0__213882 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__InvariantConstraintCS__Group_3_0__2__Impl13910 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__0__Impl_in_rule__PostconditionConstraintCS__Group__013947 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__1_in_rule__PostconditionConstraintCS__Group__013950 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__StereotypeAssignment_0_in_rule__PostconditionConstraintCS__Group__0__Impl13977 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__1__Impl_in_rule__PostconditionConstraintCS__Group__114007 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__2_in_rule__PostconditionConstraintCS__Group__114010 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1__0_in_rule__PostconditionConstraintCS__Group__1__Impl14037 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__2__Impl_in_rule__PostconditionConstraintCS__Group__214068 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__3_in_rule__PostconditionConstraintCS__Group__214071 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__PostconditionConstraintCS__Group__2__Impl14099 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__3__Impl_in_rule__PostconditionConstraintCS__Group__314130 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__4_in_rule__PostconditionConstraintCS__Group__314133 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3_in_rule__PostconditionConstraintCS__Group__3__Impl14160 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__4__Impl_in_rule__PostconditionConstraintCS__Group__414191 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__PostconditionConstraintCS__Group__4__Impl14219 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1__0__Impl_in_rule__PostconditionConstraintCS__Group_1__014260 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1__1_in_rule__PostconditionConstraintCS__Group_1__014263 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__NameAssignment_1_0_in_rule__PostconditionConstraintCS__Group_1__0__Impl14290 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1__1__Impl_in_rule__PostconditionConstraintCS__Group_1__114320 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__0_in_rule__PostconditionConstraintCS__Group_1__1__Impl14347 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__0__Impl_in_rule__PostconditionConstraintCS__Group_1_1__014382 = new BitSet(new long[]{0xFF9FFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__1_in_rule__PostconditionConstraintCS__Group_1_1__014385 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__PostconditionConstraintCS__Group_1_1__0__Impl14413 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__1__Impl_in_rule__PostconditionConstraintCS__Group_1_1__114444 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__2_in_rule__PostconditionConstraintCS__Group_1_1__114447 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1_in_rule__PostconditionConstraintCS__Group_1_1__1__Impl14474 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__2__Impl_in_rule__PostconditionConstraintCS__Group_1_1__214504 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__PostconditionConstraintCS__Group_1_1__2__Impl14532 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__0__Impl_in_rule__PreconditionConstraintCS__Group__014569 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__1_in_rule__PreconditionConstraintCS__Group__014572 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__StereotypeAssignment_0_in_rule__PreconditionConstraintCS__Group__0__Impl14599 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__1__Impl_in_rule__PreconditionConstraintCS__Group__114629 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__2_in_rule__PreconditionConstraintCS__Group__114632 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1__0_in_rule__PreconditionConstraintCS__Group__1__Impl14659 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__2__Impl_in_rule__PreconditionConstraintCS__Group__214690 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__3_in_rule__PreconditionConstraintCS__Group__214693 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__PreconditionConstraintCS__Group__2__Impl14721 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__3__Impl_in_rule__PreconditionConstraintCS__Group__314752 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__4_in_rule__PreconditionConstraintCS__Group__314755 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3_in_rule__PreconditionConstraintCS__Group__3__Impl14782 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__4__Impl_in_rule__PreconditionConstraintCS__Group__414813 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__PreconditionConstraintCS__Group__4__Impl14841 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1__0__Impl_in_rule__PreconditionConstraintCS__Group_1__014882 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1__1_in_rule__PreconditionConstraintCS__Group_1__014885 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__NameAssignment_1_0_in_rule__PreconditionConstraintCS__Group_1__0__Impl14912 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1__1__Impl_in_rule__PreconditionConstraintCS__Group_1__114942 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__0_in_rule__PreconditionConstraintCS__Group_1__1__Impl14969 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__0__Impl_in_rule__PreconditionConstraintCS__Group_1_1__015004 = new BitSet(new long[]{0xFF9FFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__1_in_rule__PreconditionConstraintCS__Group_1_1__015007 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__PreconditionConstraintCS__Group_1_1__0__Impl15035 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__1__Impl_in_rule__PreconditionConstraintCS__Group_1_1__115066 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__2_in_rule__PreconditionConstraintCS__Group_1_1__115069 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1_in_rule__PreconditionConstraintCS__Group_1_1__1__Impl15096 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__2__Impl_in_rule__PreconditionConstraintCS__Group_1_1__215126 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__PreconditionConstraintCS__Group_1_1__2__Impl15154 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group__0__Impl_in_rule__AnnotationCS__Group__015191 = new BitSet(new long[]{0x0080000000000000L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group__1_in_rule__AnnotationCS__Group__015194 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group__1__Impl_in_rule__AnnotationCS__Group__115252 = new BitSet(new long[]{0x1FBFFFFFFFFE01A0L,0x0000000880000000L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group__2_in_rule__AnnotationCS__Group__115255 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_55_in_rule__AnnotationCS__Group__1__Impl15283 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group__2__Impl_in_rule__AnnotationCS__Group__215314 = new BitSet(new long[]{0x1FBFFFFFFFFE01A0L,0x0000000880000000L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group__3_in_rule__AnnotationCS__Group__215317 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__NameAssignment_2_in_rule__AnnotationCS__Group__2__Impl15344 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group__3__Impl_in_rule__AnnotationCS__Group__315375 = new BitSet(new long[]{0x1FBFFFFFFFFE01A0L,0x0000000880000000L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group__4_in_rule__AnnotationCS__Group__315378 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__0_in_rule__AnnotationCS__Group__3__Impl15405 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group__4__Impl_in_rule__AnnotationCS__Group__415436 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Alternatives_4_in_rule__AnnotationCS__Group__4__Impl15463 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__0__Impl_in_rule__AnnotationCS__Group_3__015503 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__1_in_rule__AnnotationCS__Group_3__015506 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__AnnotationCS__Group_3__0__Impl15534 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__1__Impl_in_rule__AnnotationCS__Group_3__115565 = new BitSet(new long[]{0x0000000000000000L,0x0000000500000000L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__2_in_rule__AnnotationCS__Group_3__115568 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__OwnedDetailsAssignment_3_1_in_rule__AnnotationCS__Group_3__1__Impl15595 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__2__Impl_in_rule__AnnotationCS__Group_3__215625 = new BitSet(new long[]{0x0000000000000000L,0x0000000500000000L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__3_in_rule__AnnotationCS__Group_3__215628 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3_2__0_in_rule__AnnotationCS__Group_3__2__Impl15655 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__3__Impl_in_rule__AnnotationCS__Group_3__315686 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__AnnotationCS__Group_3__3__Impl15714 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3_2__0__Impl_in_rule__AnnotationCS__Group_3_2__015753 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3_2__1_in_rule__AnnotationCS__Group_3_2__015756 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__AnnotationCS__Group_3_2__0__Impl15784 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3_2__1__Impl_in_rule__AnnotationCS__Group_3_2__115815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__OwnedDetailsAssignment_3_2_1_in_rule__AnnotationCS__Group_3_2__1__Impl15842 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__0__Impl_in_rule__AnnotationCS__Group_4_0__015876 = new BitSet(new long[]{0x159FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__1_in_rule__AnnotationCS__Group_4_0__015879 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__AnnotationCS__Group_4_0__0__Impl15907 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__1__Impl_in_rule__AnnotationCS__Group_4_0__115938 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__2_in_rule__AnnotationCS__Group_4_0__115941 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Alternatives_4_0_1_in_rule__AnnotationCS__Group_4_0__1__Impl15970 = new BitSet(new long[]{0x159FFFFFFFFE0182L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Alternatives_4_0_1_in_rule__AnnotationCS__Group_4_0__1__Impl15982 = new BitSet(new long[]{0x159FFFFFFFFE0182L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__2__Impl_in_rule__AnnotationCS__Group_4_0__216015 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__AnnotationCS__Group_4_0__2__Impl16043 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__0__Impl_in_rule__AttributeCS__Group__016080 = new BitSet(new long[]{0x0000400001040000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__1_in_rule__AttributeCS__Group__016083 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_0_in_rule__AttributeCS__Group__0__Impl16110 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__1__Impl_in_rule__AttributeCS__Group__116141 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__2_in_rule__AttributeCS__Group__116144 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_18_in_rule__AttributeCS__Group__1__Impl16172 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__2__Impl_in_rule__AttributeCS__Group__216203 = new BitSet(new long[]{0x0020000000000000L,0x0000000A00000040L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__3_in_rule__AttributeCS__Group__216206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__NameAssignment_2_in_rule__AttributeCS__Group__2__Impl16233 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__3__Impl_in_rule__AttributeCS__Group__316263 = new BitSet(new long[]{0x0020000000000000L,0x0000000A00000040L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__4_in_rule__AttributeCS__Group__316266 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_3__0_in_rule__AttributeCS__Group__3__Impl16293 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__4__Impl_in_rule__AttributeCS__Group__416324 = new BitSet(new long[]{0x0020000000000000L,0x0000000A00000040L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__5_in_rule__AttributeCS__Group__416327 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_4__0_in_rule__AttributeCS__Group__4__Impl16354 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__5__Impl_in_rule__AttributeCS__Group__516385 = new BitSet(new long[]{0x0020000000000000L,0x0000000A00000040L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__6_in_rule__AttributeCS__Group__516388 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5__0_in_rule__AttributeCS__Group__5__Impl16415 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group__6__Impl_in_rule__AttributeCS__Group__616446 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_6_in_rule__AttributeCS__Group__6__Impl16473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_0_0__0__Impl_in_rule__AttributeCS__Group_0_0__016517 = new BitSet(new long[]{0x0000000001000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_0_0__1_in_rule__AttributeCS__Group_0_0__016520 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_0_0_0_in_rule__AttributeCS__Group_0_0__0__Impl16547 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_0_0__1__Impl_in_rule__AttributeCS__Group_0_0__116577 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_0_0_1_in_rule__AttributeCS__Group_0_0__1__Impl16604 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_0_1__0__Impl_in_rule__AttributeCS__Group_0_1__016639 = new BitSet(new long[]{0x0000400000000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_0_1__1_in_rule__AttributeCS__Group_0_1__016642 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_0_1_0_in_rule__AttributeCS__Group_0_1__0__Impl16669 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_0_1__1__Impl_in_rule__AttributeCS__Group_0_1__116699 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__QualifiersAssignment_0_1_1_in_rule__AttributeCS__Group_0_1__1__Impl16726 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_3__0__Impl_in_rule__AttributeCS__Group_3__016761 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_3__1_in_rule__AttributeCS__Group_3__016764 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__AttributeCS__Group_3__0__Impl16792 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_3__1__Impl_in_rule__AttributeCS__Group_3__116823 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__OwnedTypeAssignment_3_1_in_rule__AttributeCS__Group_3__1__Impl16850 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_4__0__Impl_in_rule__AttributeCS__Group_4__016884 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_4__1_in_rule__AttributeCS__Group_4__016887 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__AttributeCS__Group_4__0__Impl16915 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_4__1__Impl_in_rule__AttributeCS__Group_4__116946 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__DefaultAssignment_4_1_in_rule__AttributeCS__Group_4__1__Impl16973 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5__0__Impl_in_rule__AttributeCS__Group_5__017007 = new BitSet(new long[]{0x001E082024000000L,0xFF00000000000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5__1_in_rule__AttributeCS__Group_5__017010 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__AttributeCS__Group_5__0__Impl17038 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5__1__Impl_in_rule__AttributeCS__Group_5__117069 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5__2_in_rule__AttributeCS__Group_5__117072 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__0_in_rule__AttributeCS__Group_5__1__Impl17101 = new BitSet(new long[]{0x001E082024000002L,0xFF00000000000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__0_in_rule__AttributeCS__Group_5__1__Impl17113 = new BitSet(new long[]{0x001E082024000002L,0xFF00000000000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5__2__Impl_in_rule__AttributeCS__Group_5__217146 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__AttributeCS__Group_5__2__Impl17174 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__0__Impl_in_rule__AttributeCS__Group_5_1__017211 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__1_in_rule__AttributeCS__Group_5_1__017214 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_5_1_0_in_rule__AttributeCS__Group_5_1__0__Impl17241 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__1__Impl_in_rule__AttributeCS__Group_5_1__117271 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__AttributeCS__Group_5_1__1__Impl17300 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__0__Impl_in_rule__AttributeCS__Group_6_0__017337 = new BitSet(new long[]{0x1180000082000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__1_in_rule__AttributeCS__Group_6_0__017340 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__AttributeCS__Group_6_0__0__Impl17368 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__1__Impl_in_rule__AttributeCS__Group_6_0__117399 = new BitSet(new long[]{0x1180000082000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__2_in_rule__AttributeCS__Group_6_0__117402 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_6_0_1_in_rule__AttributeCS__Group_6_0__1__Impl17429 = new BitSet(new long[]{0x1180000082000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__2__Impl_in_rule__AttributeCS__Group_6_0__217460 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__AttributeCS__Group_6_0__2__Impl17488 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__0__Impl_in_rule__AttributeCS__Group_6_0_1_1__017525 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__1_in_rule__AttributeCS__Group_6_0_1_1__017528 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_25_in_rule__AttributeCS__Group_6_0_1_1__0__Impl17556 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__1__Impl_in_rule__AttributeCS__Group_6_0_1_1__117587 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__2_in_rule__AttributeCS__Group_6_0_1_1__117590 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__Group_6_0_1_1__1__Impl17618 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__2__Impl_in_rule__AttributeCS__Group_6_0_1_1__217649 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__3_in_rule__AttributeCS__Group_6_0_1_1__217652 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__AttributeCS__Group_6_0_1_1__2__Impl17680 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__3__Impl_in_rule__AttributeCS__Group_6_0_1_1__317711 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__4_in_rule__AttributeCS__Group_6_0_1_1__317714 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3_in_rule__AttributeCS__Group_6_0_1_1__3__Impl17741 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__4__Impl_in_rule__AttributeCS__Group_6_0_1_1__417772 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__AttributeCS__Group_6_0_1_1__4__Impl17800 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__0__Impl_in_rule__AttributeCS__Group_6_0_1_2__017841 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__1_in_rule__AttributeCS__Group_6_0_1_2__017844 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_31_in_rule__AttributeCS__Group_6_0_1_2__0__Impl17872 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__1__Impl_in_rule__AttributeCS__Group_6_0_1_2__117903 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__2_in_rule__AttributeCS__Group_6_0_1_2__117906 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__Group_6_0_1_2__1__Impl17934 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__2__Impl_in_rule__AttributeCS__Group_6_0_1_2__217965 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__3_in_rule__AttributeCS__Group_6_0_1_2__217968 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__AttributeCS__Group_6_0_1_2__2__Impl17996 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__3__Impl_in_rule__AttributeCS__Group_6_0_1_2__318027 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__4_in_rule__AttributeCS__Group_6_0_1_2__318030 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3_in_rule__AttributeCS__Group_6_0_1_2__3__Impl18057 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__4__Impl_in_rule__AttributeCS__Group_6_0_1_2__418088 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__AttributeCS__Group_6_0_1_2__4__Impl18116 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__0__Impl_in_rule__DataTypeCS__Group__018157 = new BitSet(new long[]{0x0000020000800000L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__1_in_rule__DataTypeCS__Group__018160 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__IsPrimitiveAssignment_0_in_rule__DataTypeCS__Group__0__Impl18187 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__1__Impl_in_rule__DataTypeCS__Group__118218 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__2_in_rule__DataTypeCS__Group__118221 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_23_in_rule__DataTypeCS__Group__1__Impl18249 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__2__Impl_in_rule__DataTypeCS__Group__218280 = new BitSet(new long[]{0x0020000000000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__3_in_rule__DataTypeCS__Group__218283 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__NameAssignment_2_in_rule__DataTypeCS__Group__2__Impl18310 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__3__Impl_in_rule__DataTypeCS__Group__318340 = new BitSet(new long[]{0x0020000000000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__4_in_rule__DataTypeCS__Group__318343 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__OwnedSignatureAssignment_3_in_rule__DataTypeCS__Group__3__Impl18370 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__4__Impl_in_rule__DataTypeCS__Group__418401 = new BitSet(new long[]{0x0020000000000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__5_in_rule__DataTypeCS__Group__418404 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_4__0_in_rule__DataTypeCS__Group__4__Impl18431 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__5__Impl_in_rule__DataTypeCS__Group__518462 = new BitSet(new long[]{0x0020000000000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__6_in_rule__DataTypeCS__Group__518465 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__0_in_rule__DataTypeCS__Group__5__Impl18492 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group__6__Impl_in_rule__DataTypeCS__Group__618523 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Alternatives_6_in_rule__DataTypeCS__Group__6__Impl18550 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_4__0__Impl_in_rule__DataTypeCS__Group_4__018594 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_4__1_in_rule__DataTypeCS__Group_4__018597 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__DataTypeCS__Group_4__0__Impl18625 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_4__1__Impl_in_rule__DataTypeCS__Group_4__118656 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__InstanceClassNameAssignment_4_1_in_rule__DataTypeCS__Group_4__1__Impl18683 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__0__Impl_in_rule__DataTypeCS__Group_5__018717 = new BitSet(new long[]{0x0840000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__1_in_rule__DataTypeCS__Group_5__018720 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__DataTypeCS__Group_5__0__Impl18748 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__1__Impl_in_rule__DataTypeCS__Group_5__118779 = new BitSet(new long[]{0x0840000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__2_in_rule__DataTypeCS__Group_5__118782 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Alternatives_5_1_in_rule__DataTypeCS__Group_5__1__Impl18809 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__2__Impl_in_rule__DataTypeCS__Group_5__218840 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__DataTypeCS__Group_5__2__Impl18868 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__0__Impl_in_rule__DataTypeCS__Group_6_0__018905 = new BitSet(new long[]{0x1380000000100000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__1_in_rule__DataTypeCS__Group_6_0__018908 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__DataTypeCS__Group_6_0__0__Impl18936 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__1__Impl_in_rule__DataTypeCS__Group_6_0__118967 = new BitSet(new long[]{0x1380000000100000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__2_in_rule__DataTypeCS__Group_6_0__118970 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Alternatives_6_0_1_in_rule__DataTypeCS__Group_6_0__1__Impl18997 = new BitSet(new long[]{0x1380000000100002L});
-        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__2__Impl_in_rule__DataTypeCS__Group_6_0__219028 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__DataTypeCS__Group_6_0__2__Impl19056 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DetailCS__Group__0__Impl_in_rule__DetailCS__Group__019093 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__DetailCS__Group__1_in_rule__DetailCS__Group__019096 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DetailCS__NameAssignment_0_in_rule__DetailCS__Group__0__Impl19123 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DetailCS__Group__1__Impl_in_rule__DetailCS__Group__119153 = new BitSet(new long[]{0x0000000000000060L});
-        public static final BitSet FOLLOW_rule__DetailCS__Group__2_in_rule__DetailCS__Group__119156 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__DetailCS__Group__1__Impl19184 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DetailCS__Group__2__Impl_in_rule__DetailCS__Group__219215 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DetailCS__ValuesAssignment_2_in_rule__DetailCS__Group__2__Impl19242 = new BitSet(new long[]{0x0000000000000062L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group__0__Impl_in_rule__DocumentationCS__Group__019279 = new BitSet(new long[]{0x0100000000000000L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group__1_in_rule__DocumentationCS__Group__019282 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group__1__Impl_in_rule__DocumentationCS__Group__119340 = new BitSet(new long[]{0x0020000000000020L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group__2_in_rule__DocumentationCS__Group__119343 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_56_in_rule__DocumentationCS__Group__1__Impl19371 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group__2__Impl_in_rule__DocumentationCS__Group__219402 = new BitSet(new long[]{0x0020000000000020L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group__3_in_rule__DocumentationCS__Group__219405 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__ValueAssignment_2_in_rule__DocumentationCS__Group__2__Impl19432 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group__3__Impl_in_rule__DocumentationCS__Group__319463 = new BitSet(new long[]{0x0020000000000020L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group__4_in_rule__DocumentationCS__Group__319466 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__0_in_rule__DocumentationCS__Group__3__Impl19493 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group__4__Impl_in_rule__DocumentationCS__Group__419524 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__DocumentationCS__Group__4__Impl19552 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__0__Impl_in_rule__DocumentationCS__Group_3__019593 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__1_in_rule__DocumentationCS__Group_3__019596 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__DocumentationCS__Group_3__0__Impl19624 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__1__Impl_in_rule__DocumentationCS__Group_3__119655 = new BitSet(new long[]{0x0000000000000000L,0x0000000500000000L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__2_in_rule__DocumentationCS__Group_3__119658 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__OwnedDetailsAssignment_3_1_in_rule__DocumentationCS__Group_3__1__Impl19685 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__2__Impl_in_rule__DocumentationCS__Group_3__219715 = new BitSet(new long[]{0x0000000000000000L,0x0000000500000000L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__3_in_rule__DocumentationCS__Group_3__219718 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3_2__0_in_rule__DocumentationCS__Group_3__2__Impl19745 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__3__Impl_in_rule__DocumentationCS__Group_3__319776 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__DocumentationCS__Group_3__3__Impl19804 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3_2__0__Impl_in_rule__DocumentationCS__Group_3_2__019843 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3_2__1_in_rule__DocumentationCS__Group_3_2__019846 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__DocumentationCS__Group_3_2__0__Impl19874 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3_2__1__Impl_in_rule__DocumentationCS__Group_3_2__119905 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DocumentationCS__OwnedDetailsAssignment_3_2_1_in_rule__DocumentationCS__Group_3_2__1__Impl19932 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__0__Impl_in_rule__EnumerationCS__Group__019966 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__1_in_rule__EnumerationCS__Group__019969 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__EnumerationCS__Group__0__Impl19997 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__1__Impl_in_rule__EnumerationCS__Group__120028 = new BitSet(new long[]{0x0020000000000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__2_in_rule__EnumerationCS__Group__120031 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__NameAssignment_1_in_rule__EnumerationCS__Group__1__Impl20058 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__2__Impl_in_rule__EnumerationCS__Group__220088 = new BitSet(new long[]{0x0020000000000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__3_in_rule__EnumerationCS__Group__220091 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__OwnedSignatureAssignment_2_in_rule__EnumerationCS__Group__2__Impl20118 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__3__Impl_in_rule__EnumerationCS__Group__320149 = new BitSet(new long[]{0x0020000000000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__4_in_rule__EnumerationCS__Group__320152 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_3__0_in_rule__EnumerationCS__Group__3__Impl20179 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__4__Impl_in_rule__EnumerationCS__Group__420210 = new BitSet(new long[]{0x0020000000000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__5_in_rule__EnumerationCS__Group__420213 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__0_in_rule__EnumerationCS__Group__4__Impl20240 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group__5__Impl_in_rule__EnumerationCS__Group__520271 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Alternatives_5_in_rule__EnumerationCS__Group__5__Impl20298 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_3__0__Impl_in_rule__EnumerationCS__Group_3__020340 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_3__1_in_rule__EnumerationCS__Group_3__020343 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__EnumerationCS__Group_3__0__Impl20371 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_3__1__Impl_in_rule__EnumerationCS__Group_3__120402 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__InstanceClassNameAssignment_3_1_in_rule__EnumerationCS__Group_3__1__Impl20429 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__0__Impl_in_rule__EnumerationCS__Group_4__020463 = new BitSet(new long[]{0x0840000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__1_in_rule__EnumerationCS__Group_4__020466 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__EnumerationCS__Group_4__0__Impl20494 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__1__Impl_in_rule__EnumerationCS__Group_4__120525 = new BitSet(new long[]{0x0840000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__2_in_rule__EnumerationCS__Group_4__120528 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Alternatives_4_1_in_rule__EnumerationCS__Group_4__1__Impl20555 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__2__Impl_in_rule__EnumerationCS__Group_4__220586 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__EnumerationCS__Group_4__2__Impl20614 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__0__Impl_in_rule__EnumerationCS__Group_5_0__020651 = new BitSet(new long[]{0x179FFFFFFFFE0180L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__1_in_rule__EnumerationCS__Group_5_0__020654 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__EnumerationCS__Group_5_0__0__Impl20682 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__1__Impl_in_rule__EnumerationCS__Group_5_0__120713 = new BitSet(new long[]{0x179FFFFFFFFE0180L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__2_in_rule__EnumerationCS__Group_5_0__120716 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Alternatives_5_0_1_in_rule__EnumerationCS__Group_5_0__1__Impl20743 = new BitSet(new long[]{0x179FFFFFFFFE0182L});
-        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__2__Impl_in_rule__EnumerationCS__Group_5_0__220774 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__EnumerationCS__Group_5_0__2__Impl20802 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__0__Impl_in_rule__EnumerationLiteralCS__Group__020839 = new BitSet(new long[]{0x0020000000000000L,0x0000000800000040L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__1_in_rule__EnumerationLiteralCS__Group__020842 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Alternatives_0_in_rule__EnumerationLiteralCS__Group__0__Impl20869 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__1__Impl_in_rule__EnumerationLiteralCS__Group__120899 = new BitSet(new long[]{0x0020000000000000L,0x0000000800000040L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__2_in_rule__EnumerationLiteralCS__Group__120902 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_1__0_in_rule__EnumerationLiteralCS__Group__1__Impl20929 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__2__Impl_in_rule__EnumerationLiteralCS__Group__220960 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Alternatives_2_in_rule__EnumerationLiteralCS__Group__2__Impl20987 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_0_0__0__Impl_in_rule__EnumerationLiteralCS__Group_0_0__021023 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_0_0__1_in_rule__EnumerationLiteralCS__Group_0_0__021026 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_rule__EnumerationLiteralCS__Group_0_0__0__Impl21054 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_0_0__1__Impl_in_rule__EnumerationLiteralCS__Group_0_0__121085 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__NameAssignment_0_0_1_in_rule__EnumerationLiteralCS__Group_0_0__1__Impl21112 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_1__0__Impl_in_rule__EnumerationLiteralCS__Group_1__021146 = new BitSet(new long[]{0x2000000000000010L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_1__1_in_rule__EnumerationLiteralCS__Group_1__021149 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__EnumerationLiteralCS__Group_1__0__Impl21177 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_1__1__Impl_in_rule__EnumerationLiteralCS__Group_1__121208 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__ValueAssignment_1_1_in_rule__EnumerationLiteralCS__Group_1__1__Impl21235 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__0__Impl_in_rule__EnumerationLiteralCS__Group_2_0__021269 = new BitSet(new long[]{0x1180000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__1_in_rule__EnumerationLiteralCS__Group_2_0__021272 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__EnumerationLiteralCS__Group_2_0__0__Impl21300 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__1__Impl_in_rule__EnumerationLiteralCS__Group_2_0__121331 = new BitSet(new long[]{0x1180000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__2_in_rule__EnumerationLiteralCS__Group_2_0__121334 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1_in_rule__EnumerationLiteralCS__Group_2_0__1__Impl21361 = new BitSet(new long[]{0x1180000000000002L});
-        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__2__Impl_in_rule__EnumerationLiteralCS__Group_2_0__221392 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__EnumerationLiteralCS__Group_2_0__2__Impl21420 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group__0__Impl_in_rule__ImportCS__Group__021457 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group__1_in_rule__ImportCS__Group__021460 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_30_in_rule__ImportCS__Group__0__Impl21488 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group__1__Impl_in_rule__ImportCS__Group__121519 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group__2_in_rule__ImportCS__Group__121522 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group_1__0_in_rule__ImportCS__Group__1__Impl21549 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group__2__Impl_in_rule__ImportCS__Group__221580 = new BitSet(new long[]{0x0020000000000000L,0x0000000000000000L,0x0000000000000001L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group__3_in_rule__ImportCS__Group__221583 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__OwnedPathNameAssignment_2_in_rule__ImportCS__Group__2__Impl21610 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group__3__Impl_in_rule__ImportCS__Group__321640 = new BitSet(new long[]{0x0020000000000000L,0x0000000000000000L,0x0000000000000001L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group__4_in_rule__ImportCS__Group__321643 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__IsAllAssignment_3_in_rule__ImportCS__Group__3__Impl21670 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group__4__Impl_in_rule__ImportCS__Group__421701 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__ImportCS__Group__4__Impl21729 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group_1__0__Impl_in_rule__ImportCS__Group_1__021770 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group_1__1_in_rule__ImportCS__Group_1__021773 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__NameAssignment_1_0_in_rule__ImportCS__Group_1__0__Impl21800 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ImportCS__Group_1__1__Impl_in_rule__ImportCS__Group_1__121830 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__ImportCS__Group_1__1__Impl21858 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group__0__Impl_in_rule__LibraryCS__Group__021893 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group__1_in_rule__LibraryCS__Group__021896 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_34_in_rule__LibraryCS__Group__0__Impl21924 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group__1__Impl_in_rule__LibraryCS__Group__121955 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group__2_in_rule__LibraryCS__Group__121958 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group_1__0_in_rule__LibraryCS__Group__1__Impl21985 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsDerivedAssignment_5_0_1_0_0_in_rule__AttributeCS__Alternatives_5_0_1_07552 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_54_in_rule__AttributeCS__Alternatives_5_0_1_07571 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsIdAssignment_5_1_0_0_in_rule__AttributeCS__Alternatives_5_1_07605 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_55_in_rule__AttributeCS__Alternatives_5_1_07624 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsOrderedAssignment_5_2_0_0_in_rule__AttributeCS__Alternatives_5_2_07658 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_56_in_rule__AttributeCS__Alternatives_5_2_07677 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsReadonlyAssignment_5_3_0_0_in_rule__AttributeCS__Alternatives_5_3_07711 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_57_in_rule__AttributeCS__Alternatives_5_3_07730 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsTransientAssignment_5_4_0_0_in_rule__AttributeCS__Alternatives_5_4_07764 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_rule__AttributeCS__Alternatives_5_4_07783 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsNotUniqueAssignment_5_5_0_0_in_rule__AttributeCS__Alternatives_5_5_07817 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_50_in_rule__AttributeCS__Alternatives_5_5_07836 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsUnsettableAssignment_5_6_0_0_in_rule__AttributeCS__Alternatives_5_6_07870 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_59_in_rule__AttributeCS__Alternatives_5_6_07889 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsVolatileAssignment_5_7_0_0_0_in_rule__AttributeCS__Alternatives_5_7_0_07923 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_60_in_rule__AttributeCS__Alternatives_5_7_0_07942 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__0_in_rule__AttributeCS__Alternatives_67976 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__AttributeCS__Alternatives_67995 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_0_in_rule__AttributeCS__Alternatives_6_0_18029 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__0_in_rule__AttributeCS__Alternatives_6_0_18047 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__0_in_rule__AttributeCS__Alternatives_6_0_18065 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStructuredClassCS_in_rule__ClassCS__Alternatives8098 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDataTypeCS_in_rule__ClassCS__Alternatives8115 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationCS_in_rule__ClassCS__Alternatives8132 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__IsSerializableAssignment_5_1_0_in_rule__DataTypeCS__Alternatives_5_18164 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_rule__DataTypeCS__Alternatives_5_18183 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__0_in_rule__DataTypeCS__Alternatives_68217 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__DataTypeCS__Alternatives_68236 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_0_in_rule__DataTypeCS__Alternatives_6_0_18270 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_1_in_rule__DataTypeCS__Alternatives_6_0_18288 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__DetailCS__NameAlternatives_0_08321 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DetailCS__NameAlternatives_0_08338 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DetailCS__ValuesAlternatives_2_08370 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_ML_SINGLE_QUOTED_STRING_in_rule__DetailCS__ValuesAlternatives_2_08387 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__IsSerializableAssignment_4_1_0_in_rule__EnumerationCS__Alternatives_4_18419 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_rule__EnumerationCS__Alternatives_4_18438 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__0_in_rule__EnumerationCS__Alternatives_58472 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__EnumerationCS__Alternatives_58491 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_0_in_rule__EnumerationCS__Alternatives_5_0_18525 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_1_in_rule__EnumerationCS__Alternatives_5_0_18543 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_2_in_rule__EnumerationCS__Alternatives_5_0_18561 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_0_0__0_in_rule__EnumerationLiteralCS__Alternatives_08594 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__NameAssignment_0_1_in_rule__EnumerationLiteralCS__Alternatives_08612 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__0_in_rule__EnumerationLiteralCS__Alternatives_28645 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__EnumerationLiteralCS__Alternatives_28664 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleClassCS_in_rule__ModelElementCS__Alternatives8698 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_rule__ModelElementCS__Alternatives8715 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleOperationCS_in_rule__ModelElementCS__Alternatives8732 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePackageCS_in_rule__ModelElementCS__Alternatives8749 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_rule__ModelElementCS__Alternatives8766 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__IsDerivedAssignment_9_0_1_0_0_in_rule__OperationCS__Alternatives_9_0_1_08798 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_54_in_rule__OperationCS__Alternatives_9_0_1_08817 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__IsOrderedAssignment_9_1_0_0_in_rule__OperationCS__Alternatives_9_1_08851 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_56_in_rule__OperationCS__Alternatives_9_1_08870 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_0_in_rule__OperationCS__Alternatives_9_2_0_08904 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_50_in_rule__OperationCS__Alternatives_9_2_0_08923 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__0_in_rule__OperationCS__Alternatives_108957 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__OperationCS__Alternatives_108976 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_0_in_rule__OperationCS__Alternatives_10_0_19010 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_1_in_rule__OperationCS__Alternatives_10_0_19028 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__0_in_rule__OperationCS__Alternatives_10_0_19046 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_3_in_rule__OperationCS__Alternatives_10_0_19064 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__0_in_rule__PackageCS__Alternatives_49097 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__PackageCS__Alternatives_49116 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_0_in_rule__PackageCS__Alternatives_4_0_19150 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__OwnedPackagesAssignment_4_0_1_1_in_rule__PackageCS__Alternatives_4_0_19168 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__OwnedClassesAssignment_4_0_1_2_in_rule__PackageCS__Alternatives_4_0_19186 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__IsOrderedAssignment_2_0_1_0_0_in_rule__ParameterCS__Alternatives_2_0_1_09219 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_56_in_rule__ParameterCS__Alternatives_2_0_1_09238 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_0_in_rule__ParameterCS__Alternatives_2_1_0_09272 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_50_in_rule__ParameterCS__Alternatives_2_1_0_09291 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsComposesAssignment_6_0_1_0_0_in_rule__ReferenceCS__Alternatives_6_0_1_09325 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_62_in_rule__ReferenceCS__Alternatives_6_0_1_09344 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsDerivedAssignment_6_1_0_0_in_rule__ReferenceCS__Alternatives_6_1_09378 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_54_in_rule__ReferenceCS__Alternatives_6_1_09397 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsOrderedAssignment_6_2_0_0_in_rule__ReferenceCS__Alternatives_6_2_09431 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_56_in_rule__ReferenceCS__Alternatives_6_2_09450 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsReadonlyAssignment_6_3_0_0_in_rule__ReferenceCS__Alternatives_6_3_09484 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_57_in_rule__ReferenceCS__Alternatives_6_3_09503 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsResolveAssignment_6_4_0_0_in_rule__ReferenceCS__Alternatives_6_4_09537 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_63_in_rule__ReferenceCS__Alternatives_6_4_09556 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsTransientAssignment_6_5_0_0_in_rule__ReferenceCS__Alternatives_6_5_09590 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_rule__ReferenceCS__Alternatives_6_5_09609 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_0_in_rule__ReferenceCS__Alternatives_6_6_09643 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_50_in_rule__ReferenceCS__Alternatives_6_6_09662 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsUnsettableAssignment_6_7_0_0_in_rule__ReferenceCS__Alternatives_6_7_09696 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_59_in_rule__ReferenceCS__Alternatives_6_7_09715 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_0_in_rule__ReferenceCS__Alternatives_6_8_0_09749 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_60_in_rule__ReferenceCS__Alternatives_6_8_0_09768 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__0_in_rule__ReferenceCS__Alternatives_79802 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__ReferenceCS__Alternatives_79821 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_0_in_rule__ReferenceCS__Alternatives_7_0_19855 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__0_in_rule__ReferenceCS__Alternatives_7_0_19873 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__0_in_rule__ReferenceCS__Alternatives_7_0_19891 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__0_in_rule__ReferenceCS__Alternatives_7_0_19909 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SpecificationCS__OwnedExpressionAssignment_0_in_rule__SpecificationCS__Alternatives9942 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SpecificationCS__ExprStringAssignment_1_in_rule__SpecificationCS__Alternatives9960 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__0_in_rule__StructuredClassCS__Alternatives_79993 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__StructuredClassCS__Alternatives_710012 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_0_in_rule__StructuredClassCS__Alternatives_7_0_110046 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_1_in_rule__StructuredClassCS__Alternatives_7_0_110064 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_2_in_rule__StructuredClassCS__Alternatives_7_0_110082 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_3_in_rule__StructuredClassCS__Alternatives_7_0_110100 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAttributeCS_in_rule__StructuralFeatureCS__Alternatives10133 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleReferenceCS_in_rule__StructuralFeatureCS__Alternatives10150 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_0__0_in_rule__SysMLCS__Alternatives_210182 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__0_in_rule__SysMLCS__Alternatives_210200 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__0_in_rule__TemplateBindingCS__Alternatives10234 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__0_in_rule__TemplateBindingCS__Alternatives10252 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__0_in_rule__TemplateSignatureCS__Alternatives10285 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__0_in_rule__TemplateSignatureCS__Alternatives10303 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_rule__TypedRefCS__Alternatives10336 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedTypeRefCS_in_rule__TypedRefCS__Alternatives10353 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationLiteralName_in_rule__UnrestrictedName__Alternatives10385 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_64_in_rule__UnrestrictedName__Alternatives10403 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_65_in_rule__UnrestrictedName__Alternatives10423 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_66_in_rule__UnrestrictedName__Alternatives10443 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_67_in_rule__UnrestrictedName__Alternatives10463 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_68_in_rule__UnrestrictedName__Alternatives10483 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_69_in_rule__UnrestrictedName__Alternatives10503 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_70_in_rule__EssentialOCLUnaryOperatorName__Alternatives10539 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_71_in_rule__EssentialOCLUnaryOperatorName__Alternatives10559 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_72_in_rule__EssentialOCLInfixOperatorName__Alternatives10594 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_73_in_rule__EssentialOCLInfixOperatorName__Alternatives10614 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_74_in_rule__EssentialOCLInfixOperatorName__Alternatives10634 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_70_in_rule__EssentialOCLInfixOperatorName__Alternatives10654 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_75_in_rule__EssentialOCLInfixOperatorName__Alternatives10674 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_76_in_rule__EssentialOCLInfixOperatorName__Alternatives10694 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_77_in_rule__EssentialOCLInfixOperatorName__Alternatives10714 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_78_in_rule__EssentialOCLInfixOperatorName__Alternatives10734 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__EssentialOCLInfixOperatorName__Alternatives10754 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_80_in_rule__EssentialOCLInfixOperatorName__Alternatives10774 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_81_in_rule__EssentialOCLInfixOperatorName__Alternatives10794 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_82_in_rule__EssentialOCLInfixOperatorName__Alternatives10814 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_83_in_rule__EssentialOCLInfixOperatorName__Alternatives10834 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_84_in_rule__EssentialOCLInfixOperatorName__Alternatives10854 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_85_in_rule__EssentialOCLNavigationOperatorName__Alternatives10889 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_86_in_rule__EssentialOCLNavigationOperatorName__Alternatives10909 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_87_in_rule__EssentialOCLNavigationOperatorName__Alternatives10929 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_88_in_rule__EssentialOCLNavigationOperatorName__Alternatives10949 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInfixOperatorName_in_rule__BinaryOperatorName__Alternatives10983 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigationOperatorName_in_rule__BinaryOperatorName__Alternatives11000 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__EssentialOCLUnreservedName__Alternatives11032 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_rule__EssentialOCLUnreservedName__Alternatives11049 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_rule__EssentialOCLUnreservedName__Alternatives11066 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_89_in_rule__EssentialOCLUnreservedName__Alternatives11084 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__ReferredElementAssignment_0_in_rule__URIFirstPathElementCS__Alternatives11118 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__Group_1__0_in_rule__URIFirstPathElementCS__Alternatives11136 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_90_in_rule__PrimitiveTypeIdentifier__Alternatives11170 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_91_in_rule__PrimitiveTypeIdentifier__Alternatives11190 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_92_in_rule__PrimitiveTypeIdentifier__Alternatives11210 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_93_in_rule__PrimitiveTypeIdentifier__Alternatives11230 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_94_in_rule__PrimitiveTypeIdentifier__Alternatives11250 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_95_in_rule__PrimitiveTypeIdentifier__Alternatives11270 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_96_in_rule__PrimitiveTypeIdentifier__Alternatives11290 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_97_in_rule__PrimitiveTypeIdentifier__Alternatives11310 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_98_in_rule__CollectionTypeIdentifier__Alternatives11345 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_99_in_rule__CollectionTypeIdentifier__Alternatives11365 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_100_in_rule__CollectionTypeIdentifier__Alternatives11385 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_101_in_rule__CollectionTypeIdentifier__Alternatives11405 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_102_in_rule__CollectionTypeIdentifier__Alternatives11425 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0__0_in_rule__CollectionLiteralPartCS__Alternatives11459 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_1_in_rule__CollectionLiteralPartCS__Alternatives11477 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_011510 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_011527 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNumberLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11559 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStringLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11576 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleBooleanLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11593 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11610 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInvalidLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11627 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNullLiteralExpCS_in_rule__PrimitiveLiteralExpCS__Alternatives11644 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__BooleanLiteralExpCS__SymbolAssignment_0_in_rule__BooleanLiteralExpCS__Alternatives11676 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__BooleanLiteralExpCS__SymbolAssignment_1_in_rule__BooleanLiteralExpCS__Alternatives11694 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveTypeCS_in_rule__TypeLiteralCS__Alternatives11727 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_rule__TypeLiteralCS__Alternatives11744 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleTypeCS_in_rule__TypeLiteralCS__Alternatives11761 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeNameExpCS_in_rule__TypeExpCS__Alternatives_011793 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_rule__TypeExpCS__Alternatives_011810 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionPatternCS_in_rule__TypeExpCS__Alternatives_011827 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0__0_in_rule__ExpCS__Alternatives11859 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_rule__ExpCS__Alternatives11877 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__0_in_rule__PrefixedLetExpCS__Alternatives11909 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLetExpCS_in_rule__PrefixedLetExpCS__Alternatives11927 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__0_in_rule__PrefixedPrimaryExpCS__Alternatives11959 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimaryExpCS_in_rule__PrefixedPrimaryExpCS__Alternatives11977 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNestedExpCS_in_rule__PrimaryExpCS__Alternatives12009 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleIfExpCS_in_rule__PrimaryExpCS__Alternatives12026 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSelfExpCS_in_rule__PrimaryExpCS__Alternatives12043 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12060 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12077 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12094 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLambdaLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12111 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_rule__PrimaryExpCS__Alternatives12128 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNameExpCS_in_rule__PrimaryExpCS__Alternatives12145 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__0_in_rule__CurlyBracketedClauseCS__Alternatives_212177 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__ValueAssignment_2_1_in_rule__CurlyBracketedClauseCS__Alternatives_212196 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0__0_in_rule__NavigatingArgCS__Alternatives12229 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_1__0_in_rule__NavigatingArgCS__Alternatives12247 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__0_in_rule__NavigatingArgCS__Alternatives_0_112280 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_1__0_in_rule__NavigatingArgCS__Alternatives_0_112298 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__0_in_rule__NavigatingCommaArgCS__Alternatives_212331 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__0_in_rule__NavigatingCommaArgCS__Alternatives_212349 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedConditionAlternatives_1_012382 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__IfExpCS__OwnedConditionAlternatives_1_012399 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleMultiplicityBoundsCS_in_rule__MultiplicityCS__Alternatives_112431 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleMultiplicityStringCS_in_rule__MultiplicityCS__Alternatives_112448 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_72_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012481 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_74_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012501 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_103_in_rule__MultiplicityStringCS__StringBoundsAlternatives_012521 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__0_in_rule__TypeParameterCS__Alternatives_112555 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_1__0_in_rule__TypeParameterCS__Alternatives_112573 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypeRefCS__Alternatives12606 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleWildcardTypeRefCS_in_rule__TypeRefCS__Alternatives12623 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_0__0_in_rule__WildcardTypeRefCS__Alternatives_212655 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_1__0_in_rule__WildcardTypeRefCS__Alternatives_212673 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SIMPLE_ID_in_rule__ID__Alternatives12706 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_ESCAPED_ID_in_rule__ID__Alternatives12723 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_INT_in_rule__UPPER__Alternatives12755 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_72_in_rule__UPPER__Alternatives12773 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group__0__Impl_in_rule__TopLevelCS__Group__012805 = new BitSet(new long[]{0x0000004C40000000L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group__1_in_rule__TopLevelCS__Group__012808 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group__1__Impl_in_rule__TopLevelCS__Group__112866 = new BitSet(new long[]{0x0000004C40000000L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group__2_in_rule__TopLevelCS__Group__112869 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group_1__0_in_rule__TopLevelCS__Group__1__Impl12896 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group__2__Impl_in_rule__TopLevelCS__Group__212927 = new BitSet(new long[]{0x0000004C40000000L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group__3_in_rule__TopLevelCS__Group__212930 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__OwnedLibrariesAssignment_2_in_rule__TopLevelCS__Group__2__Impl12957 = new BitSet(new long[]{0x0000000400000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group__3__Impl_in_rule__TopLevelCS__Group__312988 = new BitSet(new long[]{0x0000004C40000000L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group__4_in_rule__TopLevelCS__Group__312991 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__OwnedImportsAssignment_3_in_rule__TopLevelCS__Group__3__Impl13018 = new BitSet(new long[]{0x0000000040000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group__4__Impl_in_rule__TopLevelCS__Group__413049 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__OwnedPackagesAssignment_4_in_rule__TopLevelCS__Group__4__Impl13076 = new BitSet(new long[]{0x0000004000000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group_1__0__Impl_in_rule__TopLevelCS__Group_1__013117 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group_1__1_in_rule__TopLevelCS__Group_1__013120 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_35_in_rule__TopLevelCS__Group_1__0__Impl13148 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TopLevelCS__Group_1__1__Impl_in_rule__TopLevelCS__Group_1__113179 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__TopLevelCS__Group_1__1__Impl13206 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SIGNED__Group__0__Impl_in_rule__SIGNED__Group__013239 = new BitSet(new long[]{0x0000000000000010L});
+        public static final BitSet FOLLOW_rule__SIGNED__Group__1_in_rule__SIGNED__Group__013242 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_70_in_rule__SIGNED__Group__0__Impl13271 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SIGNED__Group__1__Impl_in_rule__SIGNED__Group__113304 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_INT_in_rule__SIGNED__Group__1__Impl13331 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__0__Impl_in_rule__InvariantConstraintCS__Group__013364 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__1_in_rule__InvariantConstraintCS__Group__013367 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__IsCallableAssignment_0_in_rule__InvariantConstraintCS__Group__0__Impl13394 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__1__Impl_in_rule__InvariantConstraintCS__Group__113425 = new BitSet(new long[]{0x003FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__2_in_rule__InvariantConstraintCS__Group__113428 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__StereotypeAssignment_1_in_rule__InvariantConstraintCS__Group__1__Impl13455 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__2__Impl_in_rule__InvariantConstraintCS__Group__213485 = new BitSet(new long[]{0x003FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__3_in_rule__InvariantConstraintCS__Group__213488 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2__0_in_rule__InvariantConstraintCS__Group__2__Impl13515 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group__3__Impl_in_rule__InvariantConstraintCS__Group__313546 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Alternatives_3_in_rule__InvariantConstraintCS__Group__3__Impl13573 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2__0__Impl_in_rule__InvariantConstraintCS__Group_2__013611 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2__1_in_rule__InvariantConstraintCS__Group_2__013614 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__NameAssignment_2_0_in_rule__InvariantConstraintCS__Group_2__0__Impl13641 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2__1__Impl_in_rule__InvariantConstraintCS__Group_2__113671 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__0_in_rule__InvariantConstraintCS__Group_2__1__Impl13698 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__0__Impl_in_rule__InvariantConstraintCS__Group_2_1__013733 = new BitSet(new long[]{0x001FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__1_in_rule__InvariantConstraintCS__Group_2_1__013736 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__InvariantConstraintCS__Group_2_1__0__Impl13764 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__1__Impl_in_rule__InvariantConstraintCS__Group_2_1__113795 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__2_in_rule__InvariantConstraintCS__Group_2_1__113798 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_1_in_rule__InvariantConstraintCS__Group_2_1__1__Impl13825 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_2_1__2__Impl_in_rule__InvariantConstraintCS__Group_2_1__213855 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__InvariantConstraintCS__Group_2_1__2__Impl13883 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__0__Impl_in_rule__InvariantConstraintCS__Group_3_0__013920 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__1_in_rule__InvariantConstraintCS__Group_3_0__013923 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__InvariantConstraintCS__Group_3_0__0__Impl13951 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__1__Impl_in_rule__InvariantConstraintCS__Group_3_0__113982 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__2_in_rule__InvariantConstraintCS__Group_3_0__113985 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_1_in_rule__InvariantConstraintCS__Group_3_0__1__Impl14012 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvariantConstraintCS__Group_3_0__2__Impl_in_rule__InvariantConstraintCS__Group_3_0__214043 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__InvariantConstraintCS__Group_3_0__2__Impl14071 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__0__Impl_in_rule__PostconditionConstraintCS__Group__014108 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__1_in_rule__PostconditionConstraintCS__Group__014111 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__StereotypeAssignment_0_in_rule__PostconditionConstraintCS__Group__0__Impl14138 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__1__Impl_in_rule__PostconditionConstraintCS__Group__114168 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__2_in_rule__PostconditionConstraintCS__Group__114171 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1__0_in_rule__PostconditionConstraintCS__Group__1__Impl14198 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__2__Impl_in_rule__PostconditionConstraintCS__Group__214229 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__3_in_rule__PostconditionConstraintCS__Group__214232 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__PostconditionConstraintCS__Group__2__Impl14260 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__3__Impl_in_rule__PostconditionConstraintCS__Group__314291 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__4_in_rule__PostconditionConstraintCS__Group__314294 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__OwnedSpecificationAssignment_3_in_rule__PostconditionConstraintCS__Group__3__Impl14321 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group__4__Impl_in_rule__PostconditionConstraintCS__Group__414352 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__PostconditionConstraintCS__Group__4__Impl14380 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1__0__Impl_in_rule__PostconditionConstraintCS__Group_1__014421 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1__1_in_rule__PostconditionConstraintCS__Group_1__014424 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__NameAssignment_1_0_in_rule__PostconditionConstraintCS__Group_1__0__Impl14451 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1__1__Impl_in_rule__PostconditionConstraintCS__Group_1__114481 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__0_in_rule__PostconditionConstraintCS__Group_1__1__Impl14508 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__0__Impl_in_rule__PostconditionConstraintCS__Group_1_1__014543 = new BitSet(new long[]{0x001FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__1_in_rule__PostconditionConstraintCS__Group_1_1__014546 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__PostconditionConstraintCS__Group_1_1__0__Impl14574 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__1__Impl_in_rule__PostconditionConstraintCS__Group_1_1__114605 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__2_in_rule__PostconditionConstraintCS__Group_1_1__114608 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1_in_rule__PostconditionConstraintCS__Group_1_1__1__Impl14635 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PostconditionConstraintCS__Group_1_1__2__Impl_in_rule__PostconditionConstraintCS__Group_1_1__214665 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__PostconditionConstraintCS__Group_1_1__2__Impl14693 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__0__Impl_in_rule__PreconditionConstraintCS__Group__014730 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__1_in_rule__PreconditionConstraintCS__Group__014733 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__StereotypeAssignment_0_in_rule__PreconditionConstraintCS__Group__0__Impl14760 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__1__Impl_in_rule__PreconditionConstraintCS__Group__114790 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__2_in_rule__PreconditionConstraintCS__Group__114793 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1__0_in_rule__PreconditionConstraintCS__Group__1__Impl14820 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__2__Impl_in_rule__PreconditionConstraintCS__Group__214851 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__3_in_rule__PreconditionConstraintCS__Group__214854 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__PreconditionConstraintCS__Group__2__Impl14882 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__3__Impl_in_rule__PreconditionConstraintCS__Group__314913 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__4_in_rule__PreconditionConstraintCS__Group__314916 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__OwnedSpecificationAssignment_3_in_rule__PreconditionConstraintCS__Group__3__Impl14943 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group__4__Impl_in_rule__PreconditionConstraintCS__Group__414974 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__PreconditionConstraintCS__Group__4__Impl15002 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1__0__Impl_in_rule__PreconditionConstraintCS__Group_1__015043 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1__1_in_rule__PreconditionConstraintCS__Group_1__015046 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__NameAssignment_1_0_in_rule__PreconditionConstraintCS__Group_1__0__Impl15073 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1__1__Impl_in_rule__PreconditionConstraintCS__Group_1__115103 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__0_in_rule__PreconditionConstraintCS__Group_1__1__Impl15130 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__0__Impl_in_rule__PreconditionConstraintCS__Group_1_1__015165 = new BitSet(new long[]{0x001FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__1_in_rule__PreconditionConstraintCS__Group_1_1__015168 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__PreconditionConstraintCS__Group_1_1__0__Impl15196 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__1__Impl_in_rule__PreconditionConstraintCS__Group_1_1__115227 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__2_in_rule__PreconditionConstraintCS__Group_1_1__115230 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_1_in_rule__PreconditionConstraintCS__Group_1_1__1__Impl15257 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PreconditionConstraintCS__Group_1_1__2__Impl_in_rule__PreconditionConstraintCS__Group_1_1__215287 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__PreconditionConstraintCS__Group_1_1__2__Impl15315 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group__0__Impl_in_rule__AnnotationCS__Group__015352 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group__1_in_rule__AnnotationCS__Group__015355 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group__1__Impl_in_rule__AnnotationCS__Group__115413 = new BitSet(new long[]{0x003FFFFFFFFE01A0L,0x000011000000003FL});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group__2_in_rule__AnnotationCS__Group__115416 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_64_in_rule__AnnotationCS__Group__1__Impl15444 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group__2__Impl_in_rule__AnnotationCS__Group__215475 = new BitSet(new long[]{0x003FFFFFFFFE01A0L,0x000011000000003FL});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group__3_in_rule__AnnotationCS__Group__215478 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__NameAssignment_2_in_rule__AnnotationCS__Group__2__Impl15505 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group__3__Impl_in_rule__AnnotationCS__Group__315536 = new BitSet(new long[]{0x003FFFFFFFFE01A0L,0x000011000000003FL});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group__4_in_rule__AnnotationCS__Group__315539 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__0_in_rule__AnnotationCS__Group__3__Impl15566 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group__4__Impl_in_rule__AnnotationCS__Group__415597 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Alternatives_4_in_rule__AnnotationCS__Group__4__Impl15624 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__0__Impl_in_rule__AnnotationCS__Group_3__015664 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__1_in_rule__AnnotationCS__Group_3__015667 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__AnnotationCS__Group_3__0__Impl15695 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__1__Impl_in_rule__AnnotationCS__Group_3__115726 = new BitSet(new long[]{0x0000000000000000L,0x00000A0000000000L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__2_in_rule__AnnotationCS__Group_3__115729 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__OwnedDetailsAssignment_3_1_in_rule__AnnotationCS__Group_3__1__Impl15756 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__2__Impl_in_rule__AnnotationCS__Group_3__215786 = new BitSet(new long[]{0x0000000000000000L,0x00000A0000000000L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__3_in_rule__AnnotationCS__Group_3__215789 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3_2__0_in_rule__AnnotationCS__Group_3__2__Impl15816 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3__3__Impl_in_rule__AnnotationCS__Group_3__315847 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__AnnotationCS__Group_3__3__Impl15875 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3_2__0__Impl_in_rule__AnnotationCS__Group_3_2__015914 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3_2__1_in_rule__AnnotationCS__Group_3_2__015917 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__AnnotationCS__Group_3_2__0__Impl15945 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_3_2__1__Impl_in_rule__AnnotationCS__Group_3_2__115976 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__OwnedDetailsAssignment_3_2_1_in_rule__AnnotationCS__Group_3_2__1__Impl16003 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__0__Impl_in_rule__AnnotationCS__Group_4_0__016037 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000002BL});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__1_in_rule__AnnotationCS__Group_4_0__016040 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__AnnotationCS__Group_4_0__0__Impl16068 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__1__Impl_in_rule__AnnotationCS__Group_4_0__116099 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__2_in_rule__AnnotationCS__Group_4_0__116102 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Alternatives_4_0_1_in_rule__AnnotationCS__Group_4_0__1__Impl16131 = new BitSet(new long[]{0x001FFFFFFFFE0182L,0x000000000000002BL});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Alternatives_4_0_1_in_rule__AnnotationCS__Group_4_0__1__Impl16143 = new BitSet(new long[]{0x001FFFFFFFFE0182L,0x000000000000002BL});
+        public static final BitSet FOLLOW_rule__AnnotationCS__Group_4_0__2__Impl_in_rule__AnnotationCS__Group_4_0__216176 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__AnnotationCS__Group_4_0__2__Impl16204 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__0__Impl_in_rule__AttributeCS__Group__016241 = new BitSet(new long[]{0x0000000000040000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__1_in_rule__AttributeCS__Group__016244 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_0_in_rule__AttributeCS__Group__0__Impl16271 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__1__Impl_in_rule__AttributeCS__Group__116301 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__2_in_rule__AttributeCS__Group__116304 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_18_in_rule__AttributeCS__Group__1__Impl16332 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__2__Impl_in_rule__AttributeCS__Group__216363 = new BitSet(new long[]{0x1FBE082020000000L,0x0000340000008000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__3_in_rule__AttributeCS__Group__216366 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__NameAssignment_2_in_rule__AttributeCS__Group__2__Impl16393 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__3__Impl_in_rule__AttributeCS__Group__316423 = new BitSet(new long[]{0x1FBE082020000000L,0x0000340000008000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__4_in_rule__AttributeCS__Group__316426 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_3__0_in_rule__AttributeCS__Group__3__Impl16453 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__4__Impl_in_rule__AttributeCS__Group__416484 = new BitSet(new long[]{0x1FBE082020000000L,0x0000340000008000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__5_in_rule__AttributeCS__Group__416487 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_4__0_in_rule__AttributeCS__Group__4__Impl16514 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__5__Impl_in_rule__AttributeCS__Group__516545 = new BitSet(new long[]{0x1FBE082020000000L,0x0000340000008000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__6_in_rule__AttributeCS__Group__516548 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5_in_rule__AttributeCS__Group__5__Impl16575 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group__6__Impl_in_rule__AttributeCS__Group__616606 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_6_in_rule__AttributeCS__Group__6__Impl16633 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_3__0__Impl_in_rule__AttributeCS__Group_3__016677 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_3__1_in_rule__AttributeCS__Group_3__016680 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__AttributeCS__Group_3__0__Impl16708 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_3__1__Impl_in_rule__AttributeCS__Group_3__116739 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__OwnedTypeAssignment_3_1_in_rule__AttributeCS__Group_3__1__Impl16766 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_4__0__Impl_in_rule__AttributeCS__Group_4__016800 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_4__1_in_rule__AttributeCS__Group_4__016803 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__AttributeCS__Group_4__0__Impl16831 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_4__1__Impl_in_rule__AttributeCS__Group_4__116862 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__DefaultAssignment_4_1_in_rule__AttributeCS__Group_4__1__Impl16889 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_0__0__Impl_in_rule__AttributeCS__Group_5_0__016923 = new BitSet(new long[]{0x0040000004000000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_0__1_in_rule__AttributeCS__Group_5_0__016926 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__AttributeCS__Group_5_0__0__Impl16954 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_0__1__Impl_in_rule__AttributeCS__Group_5_0__116985 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_0_1__0_in_rule__AttributeCS__Group_5_0__1__Impl17012 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_0_1__0__Impl_in_rule__AttributeCS__Group_5_0_1__017047 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_0_1__1_in_rule__AttributeCS__Group_5_0_1__017050 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_5_0_1_0_in_rule__AttributeCS__Group_5_0_1__0__Impl17077 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_0_1__1__Impl_in_rule__AttributeCS__Group_5_0_1__117107 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__AttributeCS__Group_5_0_1__1__Impl17136 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__0__Impl_in_rule__AttributeCS__Group_5_1__017173 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__1_in_rule__AttributeCS__Group_5_1__017176 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_5_1_0_in_rule__AttributeCS__Group_5_1__0__Impl17203 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__1__Impl_in_rule__AttributeCS__Group_5_1__117233 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__AttributeCS__Group_5_1__1__Impl17262 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_2__0__Impl_in_rule__AttributeCS__Group_5_2__017299 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_2__1_in_rule__AttributeCS__Group_5_2__017302 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_5_2_0_in_rule__AttributeCS__Group_5_2__0__Impl17329 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_2__1__Impl_in_rule__AttributeCS__Group_5_2__117359 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__AttributeCS__Group_5_2__1__Impl17388 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_3__0__Impl_in_rule__AttributeCS__Group_5_3__017425 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_3__1_in_rule__AttributeCS__Group_5_3__017428 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_5_3_0_in_rule__AttributeCS__Group_5_3__0__Impl17455 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_3__1__Impl_in_rule__AttributeCS__Group_5_3__117485 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__AttributeCS__Group_5_3__1__Impl17514 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_4__0__Impl_in_rule__AttributeCS__Group_5_4__017551 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_4__1_in_rule__AttributeCS__Group_5_4__017554 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_5_4_0_in_rule__AttributeCS__Group_5_4__0__Impl17581 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_4__1__Impl_in_rule__AttributeCS__Group_5_4__117611 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__AttributeCS__Group_5_4__1__Impl17640 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_5__0__Impl_in_rule__AttributeCS__Group_5_5__017677 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_5__1_in_rule__AttributeCS__Group_5_5__017680 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_5_5_0_in_rule__AttributeCS__Group_5_5__0__Impl17707 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_5__1__Impl_in_rule__AttributeCS__Group_5_5__117737 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__AttributeCS__Group_5_5__1__Impl17766 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_6__0__Impl_in_rule__AttributeCS__Group_5_6__017803 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_6__1_in_rule__AttributeCS__Group_5_6__017806 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_5_6_0_in_rule__AttributeCS__Group_5_6__0__Impl17833 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_6__1__Impl_in_rule__AttributeCS__Group_5_6__117863 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__AttributeCS__Group_5_6__1__Impl17892 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_7__0__Impl_in_rule__AttributeCS__Group_5_7__017929 = new BitSet(new long[]{0x1F9E082020000000L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_7__1_in_rule__AttributeCS__Group_5_7__017932 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_7_0__0_in_rule__AttributeCS__Group_5_7__0__Impl17959 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_7__1__Impl_in_rule__AttributeCS__Group_5_7__117990 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__AttributeCS__Group_5_7__1__Impl18018 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_7_0__0__Impl_in_rule__AttributeCS__Group_5_7_0__018053 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_7_0__1_in_rule__AttributeCS__Group_5_7_0__018056 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_5_7_0_0_in_rule__AttributeCS__Group_5_7_0__0__Impl18083 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_7_0__1__Impl_in_rule__AttributeCS__Group_5_7_0__118113 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__AttributeCS__Group_5_7_0__1__Impl18142 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__0__Impl_in_rule__AttributeCS__Group_6_0__018179 = new BitSet(new long[]{0x0000000082000000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__1_in_rule__AttributeCS__Group_6_0__018182 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__AttributeCS__Group_6_0__0__Impl18210 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__1__Impl_in_rule__AttributeCS__Group_6_0__118241 = new BitSet(new long[]{0x0000000082000000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__2_in_rule__AttributeCS__Group_6_0__118244 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Alternatives_6_0_1_in_rule__AttributeCS__Group_6_0__1__Impl18271 = new BitSet(new long[]{0x0000000082000002L,0x0000000000000023L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0__2__Impl_in_rule__AttributeCS__Group_6_0__218302 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__AttributeCS__Group_6_0__2__Impl18330 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__0__Impl_in_rule__AttributeCS__Group_6_0_1_1__018367 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__1_in_rule__AttributeCS__Group_6_0_1_1__018370 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_25_in_rule__AttributeCS__Group_6_0_1_1__0__Impl18398 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__1__Impl_in_rule__AttributeCS__Group_6_0_1_1__118429 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__2_in_rule__AttributeCS__Group_6_0_1_1__118432 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__Group_6_0_1_1__1__Impl18460 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__2__Impl_in_rule__AttributeCS__Group_6_0_1_1__218491 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__3_in_rule__AttributeCS__Group_6_0_1_1__218494 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__AttributeCS__Group_6_0_1_1__2__Impl18522 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__3__Impl_in_rule__AttributeCS__Group_6_0_1_1__318553 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__4_in_rule__AttributeCS__Group_6_0_1_1__318556 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_3_in_rule__AttributeCS__Group_6_0_1_1__3__Impl18583 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_1__4__Impl_in_rule__AttributeCS__Group_6_0_1_1__418614 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__AttributeCS__Group_6_0_1_1__4__Impl18642 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__0__Impl_in_rule__AttributeCS__Group_6_0_1_2__018683 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__1_in_rule__AttributeCS__Group_6_0_1_2__018686 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_31_in_rule__AttributeCS__Group_6_0_1_2__0__Impl18714 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__1__Impl_in_rule__AttributeCS__Group_6_0_1_2__118745 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__2_in_rule__AttributeCS__Group_6_0_1_2__118748 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__Group_6_0_1_2__1__Impl18776 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__2__Impl_in_rule__AttributeCS__Group_6_0_1_2__218807 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__3_in_rule__AttributeCS__Group_6_0_1_2__218810 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__AttributeCS__Group_6_0_1_2__2__Impl18838 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__3__Impl_in_rule__AttributeCS__Group_6_0_1_2__318869 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__4_in_rule__AttributeCS__Group_6_0_1_2__318872 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_3_in_rule__AttributeCS__Group_6_0_1_2__3__Impl18899 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_6_0_1_2__4__Impl_in_rule__AttributeCS__Group_6_0_1_2__418930 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__AttributeCS__Group_6_0_1_2__4__Impl18958 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__0__Impl_in_rule__DataTypeCS__Group__018999 = new BitSet(new long[]{0x0000020000800000L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__1_in_rule__DataTypeCS__Group__019002 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__IsPrimitiveAssignment_0_in_rule__DataTypeCS__Group__0__Impl19029 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__1__Impl_in_rule__DataTypeCS__Group__119060 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__2_in_rule__DataTypeCS__Group__119063 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_23_in_rule__DataTypeCS__Group__1__Impl19091 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__2__Impl_in_rule__DataTypeCS__Group__219122 = new BitSet(new long[]{0x0020000000000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__3_in_rule__DataTypeCS__Group__219125 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__NameAssignment_2_in_rule__DataTypeCS__Group__2__Impl19152 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__3__Impl_in_rule__DataTypeCS__Group__319182 = new BitSet(new long[]{0x0020000000000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__4_in_rule__DataTypeCS__Group__319185 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__OwnedSignatureAssignment_3_in_rule__DataTypeCS__Group__3__Impl19212 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__4__Impl_in_rule__DataTypeCS__Group__419243 = new BitSet(new long[]{0x0020000000000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__5_in_rule__DataTypeCS__Group__419246 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_4__0_in_rule__DataTypeCS__Group__4__Impl19273 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__5__Impl_in_rule__DataTypeCS__Group__519304 = new BitSet(new long[]{0x0020000000000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__6_in_rule__DataTypeCS__Group__519307 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__0_in_rule__DataTypeCS__Group__5__Impl19334 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group__6__Impl_in_rule__DataTypeCS__Group__619365 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Alternatives_6_in_rule__DataTypeCS__Group__6__Impl19392 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_4__0__Impl_in_rule__DataTypeCS__Group_4__019436 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_4__1_in_rule__DataTypeCS__Group_4__019439 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__DataTypeCS__Group_4__0__Impl19467 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_4__1__Impl_in_rule__DataTypeCS__Group_4__119498 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__InstanceClassNameAssignment_4_1_in_rule__DataTypeCS__Group_4__1__Impl19525 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__0__Impl_in_rule__DataTypeCS__Group_5__019559 = new BitSet(new long[]{0x2000000000000000L,0x0000200000000010L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__1_in_rule__DataTypeCS__Group_5__019562 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__DataTypeCS__Group_5__0__Impl19590 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__1__Impl_in_rule__DataTypeCS__Group_5__119621 = new BitSet(new long[]{0x2000000000000000L,0x0000200000000010L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__2_in_rule__DataTypeCS__Group_5__119624 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Alternatives_5_1_in_rule__DataTypeCS__Group_5__1__Impl19651 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_5__2__Impl_in_rule__DataTypeCS__Group_5__219682 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__DataTypeCS__Group_5__2__Impl19710 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__0__Impl_in_rule__DataTypeCS__Group_6_0__019747 = new BitSet(new long[]{0x0000000000100000L,0x0000200000000027L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__1_in_rule__DataTypeCS__Group_6_0__019750 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__DataTypeCS__Group_6_0__0__Impl19778 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__1__Impl_in_rule__DataTypeCS__Group_6_0__119809 = new BitSet(new long[]{0x0000000000100000L,0x0000200000000027L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__2_in_rule__DataTypeCS__Group_6_0__119812 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Alternatives_6_0_1_in_rule__DataTypeCS__Group_6_0__1__Impl19839 = new BitSet(new long[]{0x0000000000100002L,0x0000000000000027L});
+        public static final BitSet FOLLOW_rule__DataTypeCS__Group_6_0__2__Impl_in_rule__DataTypeCS__Group_6_0__219870 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__DataTypeCS__Group_6_0__2__Impl19898 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DetailCS__Group__0__Impl_in_rule__DetailCS__Group__019935 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
+        public static final BitSet FOLLOW_rule__DetailCS__Group__1_in_rule__DetailCS__Group__019938 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DetailCS__NameAssignment_0_in_rule__DetailCS__Group__0__Impl19965 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DetailCS__Group__1__Impl_in_rule__DetailCS__Group__119995 = new BitSet(new long[]{0x0000000000000060L});
+        public static final BitSet FOLLOW_rule__DetailCS__Group__2_in_rule__DetailCS__Group__119998 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__DetailCS__Group__1__Impl20026 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DetailCS__Group__2__Impl_in_rule__DetailCS__Group__220057 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DetailCS__ValuesAssignment_2_in_rule__DetailCS__Group__2__Impl20084 = new BitSet(new long[]{0x0000000000000062L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group__0__Impl_in_rule__DocumentationCS__Group__020121 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group__1_in_rule__DocumentationCS__Group__020124 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group__1__Impl_in_rule__DocumentationCS__Group__120182 = new BitSet(new long[]{0x0020000000000020L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group__2_in_rule__DocumentationCS__Group__120185 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_65_in_rule__DocumentationCS__Group__1__Impl20213 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group__2__Impl_in_rule__DocumentationCS__Group__220244 = new BitSet(new long[]{0x0020000000000020L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group__3_in_rule__DocumentationCS__Group__220247 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__ValueAssignment_2_in_rule__DocumentationCS__Group__2__Impl20274 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group__3__Impl_in_rule__DocumentationCS__Group__320305 = new BitSet(new long[]{0x0020000000000020L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group__4_in_rule__DocumentationCS__Group__320308 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__0_in_rule__DocumentationCS__Group__3__Impl20335 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group__4__Impl_in_rule__DocumentationCS__Group__420366 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__DocumentationCS__Group__4__Impl20394 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__0__Impl_in_rule__DocumentationCS__Group_3__020435 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__1_in_rule__DocumentationCS__Group_3__020438 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__DocumentationCS__Group_3__0__Impl20466 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__1__Impl_in_rule__DocumentationCS__Group_3__120497 = new BitSet(new long[]{0x0000000000000000L,0x00000A0000000000L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__2_in_rule__DocumentationCS__Group_3__120500 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__OwnedDetailsAssignment_3_1_in_rule__DocumentationCS__Group_3__1__Impl20527 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__2__Impl_in_rule__DocumentationCS__Group_3__220557 = new BitSet(new long[]{0x0000000000000000L,0x00000A0000000000L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__3_in_rule__DocumentationCS__Group_3__220560 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3_2__0_in_rule__DocumentationCS__Group_3__2__Impl20587 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3__3__Impl_in_rule__DocumentationCS__Group_3__320618 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__DocumentationCS__Group_3__3__Impl20646 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3_2__0__Impl_in_rule__DocumentationCS__Group_3_2__020685 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3_2__1_in_rule__DocumentationCS__Group_3_2__020688 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__DocumentationCS__Group_3_2__0__Impl20716 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__Group_3_2__1__Impl_in_rule__DocumentationCS__Group_3_2__120747 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DocumentationCS__OwnedDetailsAssignment_3_2_1_in_rule__DocumentationCS__Group_3_2__1__Impl20774 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__0__Impl_in_rule__EnumerationCS__Group__020808 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__1_in_rule__EnumerationCS__Group__020811 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_27_in_rule__EnumerationCS__Group__0__Impl20839 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__1__Impl_in_rule__EnumerationCS__Group__120870 = new BitSet(new long[]{0x0020000000000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__2_in_rule__EnumerationCS__Group__120873 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__NameAssignment_1_in_rule__EnumerationCS__Group__1__Impl20900 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__2__Impl_in_rule__EnumerationCS__Group__220930 = new BitSet(new long[]{0x0020000000000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__3_in_rule__EnumerationCS__Group__220933 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__OwnedSignatureAssignment_2_in_rule__EnumerationCS__Group__2__Impl20960 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__3__Impl_in_rule__EnumerationCS__Group__320991 = new BitSet(new long[]{0x0020000000000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__4_in_rule__EnumerationCS__Group__320994 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_3__0_in_rule__EnumerationCS__Group__3__Impl21021 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__4__Impl_in_rule__EnumerationCS__Group__421052 = new BitSet(new long[]{0x0020000000000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__5_in_rule__EnumerationCS__Group__421055 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__0_in_rule__EnumerationCS__Group__4__Impl21082 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group__5__Impl_in_rule__EnumerationCS__Group__521113 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Alternatives_5_in_rule__EnumerationCS__Group__5__Impl21140 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_3__0__Impl_in_rule__EnumerationCS__Group_3__021182 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_3__1_in_rule__EnumerationCS__Group_3__021185 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__EnumerationCS__Group_3__0__Impl21213 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_3__1__Impl_in_rule__EnumerationCS__Group_3__121244 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__InstanceClassNameAssignment_3_1_in_rule__EnumerationCS__Group_3__1__Impl21271 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__0__Impl_in_rule__EnumerationCS__Group_4__021305 = new BitSet(new long[]{0x2000000000000000L,0x0000200000000010L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__1_in_rule__EnumerationCS__Group_4__021308 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__EnumerationCS__Group_4__0__Impl21336 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__1__Impl_in_rule__EnumerationCS__Group_4__121367 = new BitSet(new long[]{0x2000000000000000L,0x0000200000000010L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__2_in_rule__EnumerationCS__Group_4__121370 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Alternatives_4_1_in_rule__EnumerationCS__Group_4__1__Impl21397 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_4__2__Impl_in_rule__EnumerationCS__Group_4__221428 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__EnumerationCS__Group_4__2__Impl21456 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__0__Impl_in_rule__EnumerationCS__Group_5_0__021493 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000020000000002FL});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__1_in_rule__EnumerationCS__Group_5_0__021496 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__EnumerationCS__Group_5_0__0__Impl21524 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__1__Impl_in_rule__EnumerationCS__Group_5_0__121555 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000020000000002FL});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__2_in_rule__EnumerationCS__Group_5_0__121558 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Alternatives_5_0_1_in_rule__EnumerationCS__Group_5_0__1__Impl21585 = new BitSet(new long[]{0x001FFFFFFFFE0182L,0x000000000000002FL});
+        public static final BitSet FOLLOW_rule__EnumerationCS__Group_5_0__2__Impl_in_rule__EnumerationCS__Group_5_0__221616 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__EnumerationCS__Group_5_0__2__Impl21644 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__0__Impl_in_rule__EnumerationLiteralCS__Group__021681 = new BitSet(new long[]{0x0020000000000000L,0x0000100000008000L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__1_in_rule__EnumerationLiteralCS__Group__021684 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Alternatives_0_in_rule__EnumerationLiteralCS__Group__0__Impl21711 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__1__Impl_in_rule__EnumerationLiteralCS__Group__121741 = new BitSet(new long[]{0x0020000000000000L,0x0000100000008000L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__2_in_rule__EnumerationLiteralCS__Group__121744 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_1__0_in_rule__EnumerationLiteralCS__Group__1__Impl21771 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group__2__Impl_in_rule__EnumerationLiteralCS__Group__221802 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Alternatives_2_in_rule__EnumerationLiteralCS__Group__2__Impl21829 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_0_0__0__Impl_in_rule__EnumerationLiteralCS__Group_0_0__021865 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_0_0__1_in_rule__EnumerationLiteralCS__Group_0_0__021868 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_67_in_rule__EnumerationLiteralCS__Group_0_0__0__Impl21896 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_0_0__1__Impl_in_rule__EnumerationLiteralCS__Group_0_0__121927 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__NameAssignment_0_0_1_in_rule__EnumerationLiteralCS__Group_0_0__1__Impl21954 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_1__0__Impl_in_rule__EnumerationLiteralCS__Group_1__021988 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000040L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_1__1_in_rule__EnumerationLiteralCS__Group_1__021991 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__EnumerationLiteralCS__Group_1__0__Impl22019 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_1__1__Impl_in_rule__EnumerationLiteralCS__Group_1__122050 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__ValueAssignment_1_1_in_rule__EnumerationLiteralCS__Group_1__1__Impl22077 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__0__Impl_in_rule__EnumerationLiteralCS__Group_2_0__022111 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__1_in_rule__EnumerationLiteralCS__Group_2_0__022114 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__EnumerationLiteralCS__Group_2_0__0__Impl22142 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__1__Impl_in_rule__EnumerationLiteralCS__Group_2_0__122173 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__2_in_rule__EnumerationLiteralCS__Group_2_0__122176 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_1_in_rule__EnumerationLiteralCS__Group_2_0__1__Impl22203 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000023L});
+        public static final BitSet FOLLOW_rule__EnumerationLiteralCS__Group_2_0__2__Impl_in_rule__EnumerationLiteralCS__Group_2_0__222234 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__EnumerationLiteralCS__Group_2_0__2__Impl22262 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group__0__Impl_in_rule__ImportCS__Group__022299 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__ImportCS__Group__1_in_rule__ImportCS__Group__022302 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_30_in_rule__ImportCS__Group__0__Impl22330 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group__1__Impl_in_rule__ImportCS__Group__122361 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__ImportCS__Group__2_in_rule__ImportCS__Group__122364 = new BitSet(new long[]{0x0000000000000002L});
     }
 
     private static class FollowSets001 {
-        public static final BitSet FOLLOW_rule__LibraryCS__Group__2__Impl_in_rule__LibraryCS__Group__222016 = new BitSet(new long[]{0x0020000000000000L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group__3_in_rule__LibraryCS__Group__222019 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LibraryCS__ReferredPackageAssignment_2_in_rule__LibraryCS__Group__2__Impl22046 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group__3__Impl_in_rule__LibraryCS__Group__322076 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__LibraryCS__Group__3__Impl22104 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group_1__0__Impl_in_rule__LibraryCS__Group_1__022143 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group_1__1_in_rule__LibraryCS__Group_1__022146 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LibraryCS__NameAssignment_1_0_in_rule__LibraryCS__Group_1__0__Impl22173 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LibraryCS__Group_1__1__Impl_in_rule__LibraryCS__Group_1__122203 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__LibraryCS__Group_1__1__Impl22231 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__0__Impl_in_rule__ModelElementRefCS__Group__022266 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__1_in_rule__ModelElementRefCS__Group__022269 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_44_in_rule__ModelElementRefCS__Group__0__Impl22297 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__1__Impl_in_rule__ModelElementRefCS__Group__122328 = new BitSet(new long[]{0x0020000000000000L});
-        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__2_in_rule__ModelElementRefCS__Group__122331 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ModelElementRefCS__OwnedPathNameAssignment_1_in_rule__ModelElementRefCS__Group__1__Impl22358 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__2__Impl_in_rule__ModelElementRefCS__Group__222388 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__ModelElementRefCS__Group__2__Impl22416 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__0__Impl_in_rule__OperationCS__Group__022453 = new BitSet(new long[]{0x0000401001000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__1_in_rule__OperationCS__Group__022456 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Alternatives_0_in_rule__OperationCS__Group__0__Impl22483 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__1__Impl_in_rule__OperationCS__Group__122514 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000080000008L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__2_in_rule__OperationCS__Group__122517 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_36_in_rule__OperationCS__Group__1__Impl22545 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__2__Impl_in_rule__OperationCS__Group__222576 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000080000008L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__3_in_rule__OperationCS__Group__222579 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedSignatureAssignment_2_in_rule__OperationCS__Group__2__Impl22606 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__3__Impl_in_rule__OperationCS__Group__322637 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__4_in_rule__OperationCS__Group__322640 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__NameAssignment_3_in_rule__OperationCS__Group__3__Impl22667 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__4__Impl_in_rule__OperationCS__Group__422697 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__5_in_rule__OperationCS__Group__422700 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__OperationCS__Group__4__Impl22728 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__5__Impl_in_rule__OperationCS__Group__522759 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__6_in_rule__OperationCS__Group__522762 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_5__0_in_rule__OperationCS__Group__5__Impl22789 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__6__Impl_in_rule__OperationCS__Group__622820 = new BitSet(new long[]{0x0021000000000000L,0x0000000A00000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__7_in_rule__OperationCS__Group__622823 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__OperationCS__Group__6__Impl22851 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__7__Impl_in_rule__OperationCS__Group__722882 = new BitSet(new long[]{0x0021000000000000L,0x0000000A00000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__8_in_rule__OperationCS__Group__722885 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_7__0_in_rule__OperationCS__Group__7__Impl22912 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__8__Impl_in_rule__OperationCS__Group__822943 = new BitSet(new long[]{0x0021000000000000L,0x0000000A00000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__9_in_rule__OperationCS__Group__822946 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8__0_in_rule__OperationCS__Group__8__Impl22973 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__9__Impl_in_rule__OperationCS__Group__923004 = new BitSet(new long[]{0x0021000000000000L,0x0000000A00000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__10_in_rule__OperationCS__Group__923007 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9__0_in_rule__OperationCS__Group__9__Impl23034 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group__10__Impl_in_rule__OperationCS__Group__1023065 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Alternatives_10_in_rule__OperationCS__Group__10__Impl23092 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_0_0__0__Impl_in_rule__OperationCS__Group_0_0__023144 = new BitSet(new long[]{0x0000000001000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_0_0__1_in_rule__OperationCS__Group_0_0__023147 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_0_0_0_in_rule__OperationCS__Group_0_0__0__Impl23174 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_0_0__1__Impl_in_rule__OperationCS__Group_0_0__123204 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_0_0_1_in_rule__OperationCS__Group_0_0__1__Impl23231 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_0_1__0__Impl_in_rule__OperationCS__Group_0_1__023266 = new BitSet(new long[]{0x0000400000000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_0_1__1_in_rule__OperationCS__Group_0_1__023269 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_0_1_0_in_rule__OperationCS__Group_0_1__0__Impl23296 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_0_1__1__Impl_in_rule__OperationCS__Group_0_1__123326 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__QualifiersAssignment_0_1_1_in_rule__OperationCS__Group_0_1__1__Impl23353 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_5__0__Impl_in_rule__OperationCS__Group_5__023388 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_5__1_in_rule__OperationCS__Group_5__023391 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedParametersAssignment_5_0_in_rule__OperationCS__Group_5__0__Impl23418 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_5__1__Impl_in_rule__OperationCS__Group_5__123448 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_5_1__0_in_rule__OperationCS__Group_5__1__Impl23475 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_5_1__0__Impl_in_rule__OperationCS__Group_5_1__023510 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_5_1__1_in_rule__OperationCS__Group_5_1__023513 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__OperationCS__Group_5_1__0__Impl23541 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_5_1__1__Impl_in_rule__OperationCS__Group_5_1__123572 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedParametersAssignment_5_1_1_in_rule__OperationCS__Group_5_1__1__Impl23599 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_7__0__Impl_in_rule__OperationCS__Group_7__023633 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_7__1_in_rule__OperationCS__Group_7__023636 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__OperationCS__Group_7__0__Impl23664 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_7__1__Impl_in_rule__OperationCS__Group_7__123695 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedTypeAssignment_7_1_in_rule__OperationCS__Group_7__1__Impl23722 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8__0__Impl_in_rule__OperationCS__Group_8__023756 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8__1_in_rule__OperationCS__Group_8__023759 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_48_in_rule__OperationCS__Group_8__0__Impl23787 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8__1__Impl_in_rule__OperationCS__Group_8__123818 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8__2_in_rule__OperationCS__Group_8__123821 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedExceptionsAssignment_8_1_in_rule__OperationCS__Group_8__1__Impl23848 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8__2__Impl_in_rule__OperationCS__Group_8__223878 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8_2__0_in_rule__OperationCS__Group_8__2__Impl23905 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8_2__0__Impl_in_rule__OperationCS__Group_8_2__023942 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8_2__1_in_rule__OperationCS__Group_8_2__023945 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__OperationCS__Group_8_2__0__Impl23973 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_8_2__1__Impl_in_rule__OperationCS__Group_8_2__124004 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedExceptionsAssignment_8_2_1_in_rule__OperationCS__Group_8_2__1__Impl24031 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9__0__Impl_in_rule__OperationCS__Group_9__024065 = new BitSet(new long[]{0x0004002004000000L,0x2500000000000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9__1_in_rule__OperationCS__Group_9__024068 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__OperationCS__Group_9__0__Impl24096 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9__1__Impl_in_rule__OperationCS__Group_9__124127 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9__2_in_rule__OperationCS__Group_9__124130 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__0_in_rule__OperationCS__Group_9__1__Impl24159 = new BitSet(new long[]{0x0004002004000002L,0x2500000000000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__0_in_rule__OperationCS__Group_9__1__Impl24171 = new BitSet(new long[]{0x0004002004000002L,0x2500000000000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9__2__Impl_in_rule__OperationCS__Group_9__224204 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__OperationCS__Group_9__2__Impl24232 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__0__Impl_in_rule__OperationCS__Group_9_1__024269 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__1_in_rule__OperationCS__Group_9_1__024272 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Alternatives_9_1_0_in_rule__OperationCS__Group_9_1__0__Impl24299 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__1__Impl_in_rule__OperationCS__Group_9_1__124329 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__OperationCS__Group_9_1__1__Impl24358 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__0__Impl_in_rule__OperationCS__Group_10_0__024395 = new BitSet(new long[]{0x1180018000080000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__1_in_rule__OperationCS__Group_10_0__024398 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__OperationCS__Group_10_0__0__Impl24426 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__1__Impl_in_rule__OperationCS__Group_10_0__124457 = new BitSet(new long[]{0x1180018000080000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__2_in_rule__OperationCS__Group_10_0__124460 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Alternatives_10_0_1_in_rule__OperationCS__Group_10_0__1__Impl24487 = new BitSet(new long[]{0x1180018000080002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__2__Impl_in_rule__OperationCS__Group_10_0__224518 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__OperationCS__Group_10_0__2__Impl24546 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__0__Impl_in_rule__OperationCS__Group_10_0_1_2__024583 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__1_in_rule__OperationCS__Group_10_0_1_2__024586 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_19_in_rule__OperationCS__Group_10_0_1_2__0__Impl24614 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__1__Impl_in_rule__OperationCS__Group_10_0_1_2__124645 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__2_in_rule__OperationCS__Group_10_0_1_2__124648 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__OperationCS__Group_10_0_1_2__1__Impl24676 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__2__Impl_in_rule__OperationCS__Group_10_0_1_2__224707 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__3_in_rule__OperationCS__Group_10_0_1_2__224710 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__OperationCS__Group_10_0_1_2__2__Impl24738 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__3__Impl_in_rule__OperationCS__Group_10_0_1_2__324769 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__4_in_rule__OperationCS__Group_10_0_1_2__324772 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3_in_rule__OperationCS__Group_10_0_1_2__3__Impl24799 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__4__Impl_in_rule__OperationCS__Group_10_0_1_2__424830 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__OperationCS__Group_10_0_1_2__4__Impl24858 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group__0__Impl_in_rule__PackageCS__Group__024899 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group__1_in_rule__PackageCS__Group__024902 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_38_in_rule__PackageCS__Group__0__Impl24930 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group__1__Impl_in_rule__PackageCS__Group__124961 = new BitSet(new long[]{0x0020000000000000L,0x0000000A00000040L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group__2_in_rule__PackageCS__Group__124964 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__NameAssignment_1_in_rule__PackageCS__Group__1__Impl24991 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group__2__Impl_in_rule__PackageCS__Group__225021 = new BitSet(new long[]{0x0020000000000000L,0x0000000A00000040L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group__3_in_rule__PackageCS__Group__225024 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_2__0_in_rule__PackageCS__Group__2__Impl25051 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group__3__Impl_in_rule__PackageCS__Group__325082 = new BitSet(new long[]{0x0020000000000000L,0x0000000A00000040L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group__4_in_rule__PackageCS__Group__325085 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_3__0_in_rule__PackageCS__Group__3__Impl25112 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group__4__Impl_in_rule__PackageCS__Group__425143 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Alternatives_4_in_rule__PackageCS__Group__4__Impl25170 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_2__0__Impl_in_rule__PackageCS__Group_2__025210 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_2__1_in_rule__PackageCS__Group_2__025213 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__PackageCS__Group_2__0__Impl25241 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_2__1__Impl_in_rule__PackageCS__Group_2__125272 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__NsPrefixAssignment_2_1_in_rule__PackageCS__Group_2__1__Impl25299 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_3__0__Impl_in_rule__PackageCS__Group_3__025333 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_3__1_in_rule__PackageCS__Group_3__025336 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__PackageCS__Group_3__0__Impl25364 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_3__1__Impl_in_rule__PackageCS__Group_3__125395 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__NsURIAssignment_3_1_in_rule__PackageCS__Group_3__1__Impl25422 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__0__Impl_in_rule__PackageCS__Group_4_0__025456 = new BitSet(new long[]{0x1180024008A20000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__1_in_rule__PackageCS__Group_4_0__025459 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__PackageCS__Group_4_0__0__Impl25487 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__1__Impl_in_rule__PackageCS__Group_4_0__125518 = new BitSet(new long[]{0x1180024008A20000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__2_in_rule__PackageCS__Group_4_0__125521 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Alternatives_4_0_1_in_rule__PackageCS__Group_4_0__1__Impl25548 = new BitSet(new long[]{0x1180024008A20002L});
-        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__2__Impl_in_rule__PackageCS__Group_4_0__225579 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__PackageCS__Group_4_0__2__Impl25607 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group__0__Impl_in_rule__ParameterCS__Group__025644 = new BitSet(new long[]{0x0000000000000000L,0x0000000A00000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group__1_in_rule__ParameterCS__Group__025647 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__NameAssignment_0_in_rule__ParameterCS__Group__0__Impl25674 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group__1__Impl_in_rule__ParameterCS__Group__125704 = new BitSet(new long[]{0x0000000000000000L,0x0000000A00000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group__2_in_rule__ParameterCS__Group__125707 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_1__0_in_rule__ParameterCS__Group__1__Impl25734 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group__2__Impl_in_rule__ParameterCS__Group__225765 = new BitSet(new long[]{0x0000000000000000L,0x0000000A00000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group__3_in_rule__ParameterCS__Group__225768 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2__0_in_rule__ParameterCS__Group__2__Impl25795 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group__3__Impl_in_rule__ParameterCS__Group__325826 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__0_in_rule__ParameterCS__Group__3__Impl25853 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_1__0__Impl_in_rule__ParameterCS__Group_1__025892 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_1__1_in_rule__ParameterCS__Group_1__025895 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__ParameterCS__Group_1__0__Impl25923 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_1__1__Impl_in_rule__ParameterCS__Group_1__125954 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__OwnedTypeAssignment_1_1_in_rule__ParameterCS__Group_1__1__Impl25981 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2__0__Impl_in_rule__ParameterCS__Group_2__026015 = new BitSet(new long[]{0x0004002000000000L,0x2400000000000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2__1_in_rule__ParameterCS__Group_2__026018 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__ParameterCS__Group_2__0__Impl26046 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2__1__Impl_in_rule__ParameterCS__Group_2__126077 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2__2_in_rule__ParameterCS__Group_2__126080 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1__0_in_rule__ParameterCS__Group_2__1__Impl26109 = new BitSet(new long[]{0x0004002000000002L,0x2400000000000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1__0_in_rule__ParameterCS__Group_2__1__Impl26121 = new BitSet(new long[]{0x0004002000000002L,0x2400000000000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2__2__Impl_in_rule__ParameterCS__Group_2__226154 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__ParameterCS__Group_2__2__Impl26182 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1__0__Impl_in_rule__ParameterCS__Group_2_1__026219 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1__1_in_rule__ParameterCS__Group_2_1__026222 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Alternatives_2_1_0_in_rule__ParameterCS__Group_2_1__0__Impl26249 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1__1__Impl_in_rule__ParameterCS__Group_2_1__126279 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__ParameterCS__Group_2_1__1__Impl26308 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__0__Impl_in_rule__ParameterCS__Group_3__026345 = new BitSet(new long[]{0x1180000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__1_in_rule__ParameterCS__Group_3__026348 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__ParameterCS__Group_3__0__Impl26376 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__1__Impl_in_rule__ParameterCS__Group_3__126407 = new BitSet(new long[]{0x1180000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__2_in_rule__ParameterCS__Group_3__126410 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__OwnedAnnotationsAssignment_3_1_in_rule__ParameterCS__Group_3__1__Impl26437 = new BitSet(new long[]{0x1180000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__2__Impl_in_rule__ParameterCS__Group_3__226468 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__ParameterCS__Group_3__2__Impl26496 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__0__Impl_in_rule__ReferenceCS__Group__026533 = new BitSet(new long[]{0x041FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__1_in_rule__ReferenceCS__Group__026536 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_0_in_rule__ReferenceCS__Group__0__Impl26563 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__1__Impl_in_rule__ReferenceCS__Group__126594 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__2_in_rule__ReferenceCS__Group__126597 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_42_in_rule__ReferenceCS__Group__1__Impl26625 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__2__Impl_in_rule__ReferenceCS__Group__226656 = new BitSet(new long[]{0x0020000000000000L,0x0000002A00000040L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__3_in_rule__ReferenceCS__Group__226659 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__NameAssignment_2_in_rule__ReferenceCS__Group__2__Impl26686 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__3__Impl_in_rule__ReferenceCS__Group__326716 = new BitSet(new long[]{0x0020000000000000L,0x0000002A00000040L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__4_in_rule__ReferenceCS__Group__326719 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_3__0_in_rule__ReferenceCS__Group__3__Impl26746 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__4__Impl_in_rule__ReferenceCS__Group__426777 = new BitSet(new long[]{0x0020000000000000L,0x0000002A00000040L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__5_in_rule__ReferenceCS__Group__426780 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_4__0_in_rule__ReferenceCS__Group__4__Impl26807 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__5__Impl_in_rule__ReferenceCS__Group__526838 = new BitSet(new long[]{0x0020000000000000L,0x0000002A00000040L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__6_in_rule__ReferenceCS__Group__526841 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_5__0_in_rule__ReferenceCS__Group__5__Impl26868 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__6__Impl_in_rule__ReferenceCS__Group__626899 = new BitSet(new long[]{0x0020000000000000L,0x0000002A00000040L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__7_in_rule__ReferenceCS__Group__626902 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6__0_in_rule__ReferenceCS__Group__6__Impl26929 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group__7__Impl_in_rule__ReferenceCS__Group__726960 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_7_in_rule__ReferenceCS__Group__7__Impl26987 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_0_0__0__Impl_in_rule__ReferenceCS__Group_0_0__027033 = new BitSet(new long[]{0x0000000001000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_0_0__1_in_rule__ReferenceCS__Group_0_0__027036 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_0_0_0_in_rule__ReferenceCS__Group_0_0__0__Impl27063 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_0_0__1__Impl_in_rule__ReferenceCS__Group_0_0__127093 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_0_0_1_in_rule__ReferenceCS__Group_0_0__1__Impl27120 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_0_1__0__Impl_in_rule__ReferenceCS__Group_0_1__027155 = new BitSet(new long[]{0x0000400000000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_0_1__1_in_rule__ReferenceCS__Group_0_1__027158 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_0_1_0_in_rule__ReferenceCS__Group_0_1__0__Impl27185 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_0_1__1__Impl_in_rule__ReferenceCS__Group_0_1__127215 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__QualifiersAssignment_0_1_1_in_rule__ReferenceCS__Group_0_1__1__Impl27242 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_3__0__Impl_in_rule__ReferenceCS__Group_3__027277 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_3__1_in_rule__ReferenceCS__Group_3__027280 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_101_in_rule__ReferenceCS__Group_3__0__Impl27308 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_3__1__Impl_in_rule__ReferenceCS__Group_3__127339 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__ReferredOppositeAssignment_3_1_in_rule__ReferenceCS__Group_3__1__Impl27366 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_4__0__Impl_in_rule__ReferenceCS__Group_4__027400 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_4__1_in_rule__ReferenceCS__Group_4__027403 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__ReferenceCS__Group_4__0__Impl27431 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_4__1__Impl_in_rule__ReferenceCS__Group_4__127462 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__OwnedTypeAssignment_4_1_in_rule__ReferenceCS__Group_4__1__Impl27489 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_5__0__Impl_in_rule__ReferenceCS__Group_5__027523 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_5__1_in_rule__ReferenceCS__Group_5__027526 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__ReferenceCS__Group_5__0__Impl27554 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_5__1__Impl_in_rule__ReferenceCS__Group_5__127585 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__DefaultAssignment_5_1_in_rule__ReferenceCS__Group_5__1__Impl27612 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6__0__Impl_in_rule__ReferenceCS__Group_6__027646 = new BitSet(new long[]{0x001E282004400000L,0xFD00000000000000L,0x0000000000000006L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6__1_in_rule__ReferenceCS__Group_6__027649 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__ReferenceCS__Group_6__0__Impl27677 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6__1__Impl_in_rule__ReferenceCS__Group_6__127708 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6__2_in_rule__ReferenceCS__Group_6__127711 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__0_in_rule__ReferenceCS__Group_6__1__Impl27740 = new BitSet(new long[]{0x001E282004400002L,0xFD00000000000000L,0x0000000000000006L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__0_in_rule__ReferenceCS__Group_6__1__Impl27752 = new BitSet(new long[]{0x001E282004400002L,0xFD00000000000000L,0x0000000000000006L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6__2__Impl_in_rule__ReferenceCS__Group_6__227785 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__ReferenceCS__Group_6__2__Impl27813 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__0__Impl_in_rule__ReferenceCS__Group_6_1__027850 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__1_in_rule__ReferenceCS__Group_6_1__027853 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_1_0_in_rule__ReferenceCS__Group_6_1__0__Impl27880 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__1__Impl_in_rule__ReferenceCS__Group_6_1__127910 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__ReferenceCS__Group_6_1__1__Impl27939 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__0__Impl_in_rule__ReferenceCS__Group_7_0__027976 = new BitSet(new long[]{0x1180000282000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__1_in_rule__ReferenceCS__Group_7_0__027979 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__ReferenceCS__Group_7_0__0__Impl28007 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__1__Impl_in_rule__ReferenceCS__Group_7_0__128038 = new BitSet(new long[]{0x1180000282000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__2_in_rule__ReferenceCS__Group_7_0__128041 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_7_0_1_in_rule__ReferenceCS__Group_7_0__1__Impl28068 = new BitSet(new long[]{0x1180000282000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__2__Impl_in_rule__ReferenceCS__Group_7_0__228099 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__ReferenceCS__Group_7_0__2__Impl28127 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__0__Impl_in_rule__ReferenceCS__Group_7_0_1_1__028164 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__1_in_rule__ReferenceCS__Group_7_0_1_1__028167 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_33_in_rule__ReferenceCS__Group_7_0_1_1__0__Impl28195 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__1__Impl_in_rule__ReferenceCS__Group_7_0_1_1__128226 = new BitSet(new long[]{0x0020000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__2_in_rule__ReferenceCS__Group_7_0_1_1__128229 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1_in_rule__ReferenceCS__Group_7_0_1_1__1__Impl28256 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__2__Impl_in_rule__ReferenceCS__Group_7_0_1_1__228286 = new BitSet(new long[]{0x0020000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__3_in_rule__ReferenceCS__Group_7_0_1_1__228289 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__0_in_rule__ReferenceCS__Group_7_0_1_1__2__Impl28316 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__3__Impl_in_rule__ReferenceCS__Group_7_0_1_1__328347 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_1__3__Impl28375 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__0__Impl_in_rule__ReferenceCS__Group_7_0_1_1_2__028414 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__1_in_rule__ReferenceCS__Group_7_0_1_1_2__028417 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__ReferenceCS__Group_7_0_1_1_2__0__Impl28445 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__1__Impl_in_rule__ReferenceCS__Group_7_0_1_1_2__128476 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1_in_rule__ReferenceCS__Group_7_0_1_1_2__1__Impl28503 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__0__Impl_in_rule__ReferenceCS__Group_7_0_1_2__028537 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__1_in_rule__ReferenceCS__Group_7_0_1_2__028540 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_25_in_rule__ReferenceCS__Group_7_0_1_2__0__Impl28568 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__1__Impl_in_rule__ReferenceCS__Group_7_0_1_2__128599 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__2_in_rule__ReferenceCS__Group_7_0_1_2__128602 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__Group_7_0_1_2__1__Impl28630 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__2__Impl_in_rule__ReferenceCS__Group_7_0_1_2__228661 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__3_in_rule__ReferenceCS__Group_7_0_1_2__228664 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__ReferenceCS__Group_7_0_1_2__2__Impl28692 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__3__Impl_in_rule__ReferenceCS__Group_7_0_1_2__328723 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__4_in_rule__ReferenceCS__Group_7_0_1_2__328726 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3_in_rule__ReferenceCS__Group_7_0_1_2__3__Impl28753 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__4__Impl_in_rule__ReferenceCS__Group_7_0_1_2__428784 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_2__4__Impl28812 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__0__Impl_in_rule__ReferenceCS__Group_7_0_1_3__028853 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__1_in_rule__ReferenceCS__Group_7_0_1_3__028856 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_31_in_rule__ReferenceCS__Group_7_0_1_3__0__Impl28884 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__1__Impl_in_rule__ReferenceCS__Group_7_0_1_3__128915 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__2_in_rule__ReferenceCS__Group_7_0_1_3__128918 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__Group_7_0_1_3__1__Impl28946 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__2__Impl_in_rule__ReferenceCS__Group_7_0_1_3__228977 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__3_in_rule__ReferenceCS__Group_7_0_1_3__228980 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__ReferenceCS__Group_7_0_1_3__2__Impl29008 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__3__Impl_in_rule__ReferenceCS__Group_7_0_1_3__329039 = new BitSet(new long[]{0xFFBFFFFFFFFE03B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__4_in_rule__ReferenceCS__Group_7_0_1_3__329042 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3_in_rule__ReferenceCS__Group_7_0_1_3__3__Impl29069 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__4__Impl_in_rule__ReferenceCS__Group_7_0_1_3__429100 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_3__4__Impl29128 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__0__Impl_in_rule__StructuredClassCS__Group__029169 = new BitSet(new long[]{0x0000000000220000L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__1_in_rule__StructuredClassCS__Group__029172 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__IsAbstractAssignment_0_in_rule__StructuredClassCS__Group__0__Impl29199 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__1__Impl_in_rule__StructuredClassCS__Group__129230 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__2_in_rule__StructuredClassCS__Group__129233 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_21_in_rule__StructuredClassCS__Group__1__Impl29261 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__2__Impl_in_rule__StructuredClassCS__Group__229292 = new BitSet(new long[]{0x0020000010000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__3_in_rule__StructuredClassCS__Group__229295 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__NameAssignment_2_in_rule__StructuredClassCS__Group__2__Impl29322 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__3__Impl_in_rule__StructuredClassCS__Group__329352 = new BitSet(new long[]{0x0020000010000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__4_in_rule__StructuredClassCS__Group__329355 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedSignatureAssignment_3_in_rule__StructuredClassCS__Group__3__Impl29382 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__4__Impl_in_rule__StructuredClassCS__Group__429413 = new BitSet(new long[]{0x0020000010000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__5_in_rule__StructuredClassCS__Group__429416 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__0_in_rule__StructuredClassCS__Group__4__Impl29443 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__5__Impl_in_rule__StructuredClassCS__Group__529474 = new BitSet(new long[]{0x0020000010000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__6_in_rule__StructuredClassCS__Group__529477 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_5__0_in_rule__StructuredClassCS__Group__5__Impl29504 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__6__Impl_in_rule__StructuredClassCS__Group__629535 = new BitSet(new long[]{0x0020000010000000L,0x0000000A80000008L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__7_in_rule__StructuredClassCS__Group__629538 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__0_in_rule__StructuredClassCS__Group__6__Impl29565 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__7__Impl_in_rule__StructuredClassCS__Group__729596 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Alternatives_7_in_rule__StructuredClassCS__Group__7__Impl29623 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__0__Impl_in_rule__StructuredClassCS__Group_4__029669 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__1_in_rule__StructuredClassCS__Group_4__029672 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_28_in_rule__StructuredClassCS__Group_4__0__Impl29700 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__1__Impl_in_rule__StructuredClassCS__Group_4__129731 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__2_in_rule__StructuredClassCS__Group_4__129734 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1_in_rule__StructuredClassCS__Group_4__1__Impl29761 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__2__Impl_in_rule__StructuredClassCS__Group_4__229791 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4_2__0_in_rule__StructuredClassCS__Group_4__2__Impl29818 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4_2__0__Impl_in_rule__StructuredClassCS__Group_4_2__029855 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4_2__1_in_rule__StructuredClassCS__Group_4_2__029858 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__StructuredClassCS__Group_4_2__0__Impl29886 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4_2__1__Impl_in_rule__StructuredClassCS__Group_4_2__129917 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1_in_rule__StructuredClassCS__Group_4_2__1__Impl29944 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_5__0__Impl_in_rule__StructuredClassCS__Group_5__029978 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_5__1_in_rule__StructuredClassCS__Group_5__029981 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__StructuredClassCS__Group_5__0__Impl30009 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_5__1__Impl_in_rule__StructuredClassCS__Group_5__130040 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__InstanceClassNameAssignment_5_1_in_rule__StructuredClassCS__Group_5__1__Impl30067 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__0__Impl_in_rule__StructuredClassCS__Group_6__030101 = new BitSet(new long[]{0x0000000100000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__1_in_rule__StructuredClassCS__Group_6__030104 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__StructuredClassCS__Group_6__0__Impl30132 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__1__Impl_in_rule__StructuredClassCS__Group_6__130163 = new BitSet(new long[]{0x0000000100000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__2_in_rule__StructuredClassCS__Group_6__130166 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__IsInterfaceAssignment_6_1_in_rule__StructuredClassCS__Group_6__1__Impl30193 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__2__Impl_in_rule__StructuredClassCS__Group_6__230224 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__StructuredClassCS__Group_6__2__Impl30252 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__0__Impl_in_rule__StructuredClassCS__Group_7_0__030289 = new BitSet(new long[]{0x179FFFFFFFFE0180L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__1_in_rule__StructuredClassCS__Group_7_0__030292 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__StructuredClassCS__Group_7_0__0__Impl30320 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__1__Impl_in_rule__StructuredClassCS__Group_7_0__130351 = new BitSet(new long[]{0x179FFFFFFFFE0180L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__2_in_rule__StructuredClassCS__Group_7_0__130354 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Alternatives_7_0_1_in_rule__StructuredClassCS__Group_7_0__1__Impl30381 = new BitSet(new long[]{0x179FFFFFFFFE0182L});
-        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__2__Impl_in_rule__StructuredClassCS__Group_7_0__230412 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__StructuredClassCS__Group_7_0__2__Impl30440 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group__0__Impl_in_rule__SysMLCS__Group__030477 = new BitSet(new long[]{0x1180000000000000L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group__1_in_rule__SysMLCS__Group__030480 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group__1__Impl_in_rule__SysMLCS__Group__130538 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L,0x0000000800000000L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group__2_in_rule__SysMLCS__Group__130541 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_60_in_rule__SysMLCS__Group__1__Impl30569 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group__2__Impl_in_rule__SysMLCS__Group__230600 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Alternatives_2_in_rule__SysMLCS__Group__2__Impl30627 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_0__0__Impl_in_rule__SysMLCS__Group_2_0__030663 = new BitSet(new long[]{0x0020000000000000L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_0__1_in_rule__SysMLCS__Group_2_0__030666 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__OwnedDetailsAssignment_2_0_0_in_rule__SysMLCS__Group_2_0__0__Impl30693 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_0__1__Impl_in_rule__SysMLCS__Group_2_0__130723 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__SysMLCS__Group_2_0__1__Impl30751 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__0__Impl_in_rule__SysMLCS__Group_2_1__030786 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__1_in_rule__SysMLCS__Group_2_1__030789 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__SysMLCS__Group_2_1__0__Impl30817 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__1__Impl_in_rule__SysMLCS__Group_2_1__130848 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__2_in_rule__SysMLCS__Group_2_1__130851 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1_1__0_in_rule__SysMLCS__Group_2_1__1__Impl30878 = new BitSet(new long[]{0x1F9FFFFFFFFE01A2L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__2__Impl_in_rule__SysMLCS__Group_2_1__230909 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__SysMLCS__Group_2_1__2__Impl30937 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1_1__0__Impl_in_rule__SysMLCS__Group_2_1_1__030974 = new BitSet(new long[]{0x0020000000000000L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1_1__1_in_rule__SysMLCS__Group_2_1_1__030977 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0_in_rule__SysMLCS__Group_2_1_1__0__Impl31004 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1_1__1__Impl_in_rule__SysMLCS__Group_2_1_1__131034 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__SysMLCS__Group_2_1_1__1__Impl31062 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypedMultiplicityRefCS__Group__0__Impl_in_rule__TypedMultiplicityRefCS__Group__031097 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__TypedMultiplicityRefCS__Group__1_in_rule__TypedMultiplicityRefCS__Group__031100 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypedMultiplicityRefCS__Group__0__Impl31127 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypedMultiplicityRefCS__Group__1__Impl_in_rule__TypedMultiplicityRefCS__Group__131156 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1_in_rule__TypedMultiplicityRefCS__Group__1__Impl31183 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__0__Impl_in_rule__TemplateBindingCS__Group_0__031218 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00FFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__1_in_rule__TemplateBindingCS__Group_0__031221 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__TemplateBindingCS__Group_0__0__Impl31249 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__1__Impl_in_rule__TemplateBindingCS__Group_0__131280 = new BitSet(new long[]{0x0000000000000000L,0x0000000500000000L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__2_in_rule__TemplateBindingCS__Group_0__131283 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1_in_rule__TemplateBindingCS__Group_0__1__Impl31310 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__2__Impl_in_rule__TemplateBindingCS__Group_0__231340 = new BitSet(new long[]{0x0000000000000000L,0x0000000500000000L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__3_in_rule__TemplateBindingCS__Group_0__231343 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0_2__0_in_rule__TemplateBindingCS__Group_0__2__Impl31370 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__3__Impl_in_rule__TemplateBindingCS__Group_0__331401 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__TemplateBindingCS__Group_0__3__Impl31429 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0_2__0__Impl_in_rule__TemplateBindingCS__Group_0_2__031468 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00FFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0_2__1_in_rule__TemplateBindingCS__Group_0_2__031471 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__TemplateBindingCS__Group_0_2__0__Impl31499 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0_2__1__Impl_in_rule__TemplateBindingCS__Group_0_2__131530 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1_in_rule__TemplateBindingCS__Group_0_2__1__Impl31557 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__0__Impl_in_rule__TemplateBindingCS__Group_1__031591 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00FFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__1_in_rule__TemplateBindingCS__Group_1__031594 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_67_in_rule__TemplateBindingCS__Group_1__0__Impl31622 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__1__Impl_in_rule__TemplateBindingCS__Group_1__131653 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000004L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__2_in_rule__TemplateBindingCS__Group_1__131656 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1_in_rule__TemplateBindingCS__Group_1__1__Impl31683 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__2__Impl_in_rule__TemplateBindingCS__Group_1__231713 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000004L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__3_in_rule__TemplateBindingCS__Group_1__231716 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1_2__0_in_rule__TemplateBindingCS__Group_1__2__Impl31743 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__3__Impl_in_rule__TemplateBindingCS__Group_1__331774 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_66_in_rule__TemplateBindingCS__Group_1__3__Impl31802 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1_2__0__Impl_in_rule__TemplateBindingCS__Group_1_2__031841 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00FFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1_2__1_in_rule__TemplateBindingCS__Group_1_2__031844 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__TemplateBindingCS__Group_1_2__0__Impl31872 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1_2__1__Impl_in_rule__TemplateBindingCS__Group_1_2__131903 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1_in_rule__TemplateBindingCS__Group_1_2__1__Impl31930 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__0__Impl_in_rule__TemplateSignatureCS__Group_0__031964 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__1_in_rule__TemplateSignatureCS__Group_0__031967 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__TemplateSignatureCS__Group_0__0__Impl31995 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__1__Impl_in_rule__TemplateSignatureCS__Group_0__132026 = new BitSet(new long[]{0x0000000000000000L,0x0000000500000000L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__2_in_rule__TemplateSignatureCS__Group_0__132029 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_0_1_in_rule__TemplateSignatureCS__Group_0__1__Impl32056 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__2__Impl_in_rule__TemplateSignatureCS__Group_0__232086 = new BitSet(new long[]{0x0000000000000000L,0x0000000500000000L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__3_in_rule__TemplateSignatureCS__Group_0__232089 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0_2__0_in_rule__TemplateSignatureCS__Group_0__2__Impl32116 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__3__Impl_in_rule__TemplateSignatureCS__Group_0__332147 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__TemplateSignatureCS__Group_0__3__Impl32175 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0_2__0__Impl_in_rule__TemplateSignatureCS__Group_0_2__032214 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0_2__1_in_rule__TemplateSignatureCS__Group_0_2__032217 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__TemplateSignatureCS__Group_0_2__0__Impl32245 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0_2__1__Impl_in_rule__TemplateSignatureCS__Group_0_2__132276 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1_in_rule__TemplateSignatureCS__Group_0_2__1__Impl32303 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__0__Impl_in_rule__TemplateSignatureCS__Group_1__032337 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__1_in_rule__TemplateSignatureCS__Group_1__032340 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_67_in_rule__TemplateSignatureCS__Group_1__0__Impl32368 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__1__Impl_in_rule__TemplateSignatureCS__Group_1__132399 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000004L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__2_in_rule__TemplateSignatureCS__Group_1__132402 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_1_1_in_rule__TemplateSignatureCS__Group_1__1__Impl32429 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__2__Impl_in_rule__TemplateSignatureCS__Group_1__232459 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000004L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__3_in_rule__TemplateSignatureCS__Group_1__232462 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1_2__0_in_rule__TemplateSignatureCS__Group_1__2__Impl32489 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__3__Impl_in_rule__TemplateSignatureCS__Group_1__332520 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_66_in_rule__TemplateSignatureCS__Group_1__3__Impl32548 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1_2__0__Impl_in_rule__TemplateSignatureCS__Group_1_2__032587 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1_2__1_in_rule__TemplateSignatureCS__Group_1_2__032590 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__TemplateSignatureCS__Group_1_2__0__Impl32618 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1_2__1__Impl_in_rule__TemplateSignatureCS__Group_1_2__132649 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1_in_rule__TemplateSignatureCS__Group_1_2__1__Impl32676 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIPathNameCS__Group__0__Impl_in_rule__URIPathNameCS__Group__032710 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
-        public static final BitSet FOLLOW_rule__URIPathNameCS__Group__1_in_rule__URIPathNameCS__Group__032713 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIPathNameCS__OwnedPathElementsAssignment_0_in_rule__URIPathNameCS__Group__0__Impl32740 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIPathNameCS__Group__1__Impl_in_rule__URIPathNameCS__Group__132770 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIPathNameCS__Group_1__0_in_rule__URIPathNameCS__Group__1__Impl32797 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-        public static final BitSet FOLLOW_rule__URIPathNameCS__Group_1__0__Impl_in_rule__URIPathNameCS__Group_1__032832 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x000000003FFF0000L});
-        public static final BitSet FOLLOW_rule__URIPathNameCS__Group_1__1_in_rule__URIPathNameCS__Group_1__032835 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_102_in_rule__URIPathNameCS__Group_1__0__Impl32863 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIPathNameCS__Group_1__1__Impl_in_rule__URIPathNameCS__Group_1__132894 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIPathNameCS__OwnedPathElementsAssignment_1_1_in_rule__URIPathNameCS__Group_1__1__Impl32921 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__Group_1__0__Impl_in_rule__URIFirstPathElementCS__Group_1__032955 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__Group_1__1_in_rule__URIFirstPathElementCS__Group_1__032958 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__Group_1__1__Impl_in_rule__URIFirstPathElementCS__Group_1__133016 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__ReferredElementAssignment_1_1_in_rule__URIFirstPathElementCS__Group_1__1__Impl33043 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group__0__Impl_in_rule__CollectionTypeCS__Group__033077 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group__1_in_rule__CollectionTypeCS__Group__033080 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__NameAssignment_0_in_rule__CollectionTypeCS__Group__0__Impl33107 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group__1__Impl_in_rule__CollectionTypeCS__Group__133137 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__0_in_rule__CollectionTypeCS__Group__1__Impl33164 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__0__Impl_in_rule__CollectionTypeCS__Group_1__033199 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__1_in_rule__CollectionTypeCS__Group_1__033202 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__CollectionTypeCS__Group_1__0__Impl33230 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__1__Impl_in_rule__CollectionTypeCS__Group_1__133261 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__2_in_rule__CollectionTypeCS__Group_1__133264 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__OwnedTypeAssignment_1_1_in_rule__CollectionTypeCS__Group_1__1__Impl33291 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__2__Impl_in_rule__CollectionTypeCS__Group_1__233321 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__CollectionTypeCS__Group_1__2__Impl33349 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group__0__Impl_in_rule__TupleTypeCS__Group__033386 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group__1_in_rule__TupleTypeCS__Group__033389 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__NameAssignment_0_in_rule__TupleTypeCS__Group__0__Impl33416 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group__1__Impl_in_rule__TupleTypeCS__Group__133446 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__0_in_rule__TupleTypeCS__Group__1__Impl33473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__0__Impl_in_rule__TupleTypeCS__Group_1__033508 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__1_in_rule__TupleTypeCS__Group_1__033511 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__TupleTypeCS__Group_1__0__Impl33539 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__1__Impl_in_rule__TupleTypeCS__Group_1__133570 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__2_in_rule__TupleTypeCS__Group_1__133573 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1__0_in_rule__TupleTypeCS__Group_1__1__Impl33600 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__2__Impl_in_rule__TupleTypeCS__Group_1__233631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__TupleTypeCS__Group_1__2__Impl33659 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1__0__Impl_in_rule__TupleTypeCS__Group_1_1__033696 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1__1_in_rule__TupleTypeCS__Group_1_1__033699 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__OwnedPartsAssignment_1_1_0_in_rule__TupleTypeCS__Group_1_1__0__Impl33726 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1__1__Impl_in_rule__TupleTypeCS__Group_1_1__133756 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1_1__0_in_rule__TupleTypeCS__Group_1_1__1__Impl33783 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1_1__0__Impl_in_rule__TupleTypeCS__Group_1_1_1__033818 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1_1__1_in_rule__TupleTypeCS__Group_1_1_1__033821 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__TupleTypeCS__Group_1_1_1__0__Impl33849 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1_1__1__Impl_in_rule__TupleTypeCS__Group_1_1_1__133880 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1_in_rule__TupleTypeCS__Group_1_1_1__1__Impl33907 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TuplePartCS__Group__0__Impl_in_rule__TuplePartCS__Group__033941 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__TuplePartCS__Group__1_in_rule__TuplePartCS__Group__033944 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TuplePartCS__NameAssignment_0_in_rule__TuplePartCS__Group__0__Impl33971 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TuplePartCS__Group__1__Impl_in_rule__TuplePartCS__Group__134001 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TuplePartCS__Group__2_in_rule__TuplePartCS__Group__134004 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__TuplePartCS__Group__1__Impl34032 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TuplePartCS__Group__2__Impl_in_rule__TuplePartCS__Group__234063 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TuplePartCS__OwnedTypeAssignment_2_in_rule__TuplePartCS__Group__2__Impl34090 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__0__Impl_in_rule__CollectionLiteralExpCS__Group__034126 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__1_in_rule__CollectionLiteralExpCS__Group__034129 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__OwnedTypeAssignment_0_in_rule__CollectionLiteralExpCS__Group__0__Impl34156 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__1__Impl_in_rule__CollectionLiteralExpCS__Group__134186 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E12BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__2_in_rule__CollectionLiteralExpCS__Group__134189 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__CollectionLiteralExpCS__Group__1__Impl34217 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__2__Impl_in_rule__CollectionLiteralExpCS__Group__234248 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E12BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__3_in_rule__CollectionLiteralExpCS__Group__234251 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2__0_in_rule__CollectionLiteralExpCS__Group__2__Impl34278 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__3__Impl_in_rule__CollectionLiteralExpCS__Group__334309 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__CollectionLiteralExpCS__Group__3__Impl34337 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2__0__Impl_in_rule__CollectionLiteralExpCS__Group_2__034376 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2__1_in_rule__CollectionLiteralExpCS__Group_2__034379 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0_in_rule__CollectionLiteralExpCS__Group_2__0__Impl34406 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2__1__Impl_in_rule__CollectionLiteralExpCS__Group_2__134436 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__0_in_rule__CollectionLiteralExpCS__Group_2__1__Impl34463 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__0__Impl_in_rule__CollectionLiteralExpCS__Group_2_1__034498 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E02BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__1_in_rule__CollectionLiteralExpCS__Group_2_1__034501 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__CollectionLiteralExpCS__Group_2_1__0__Impl34529 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__1__Impl_in_rule__CollectionLiteralExpCS__Group_2_1__134560 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1_in_rule__CollectionLiteralExpCS__Group_2_1__1__Impl34587 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0__0__Impl_in_rule__CollectionLiteralPartCS__Group_0__034621 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0__1_in_rule__CollectionLiteralPartCS__Group_0__034624 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0_in_rule__CollectionLiteralPartCS__Group_0__0__Impl34651 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0__1__Impl_in_rule__CollectionLiteralPartCS__Group_0__134681 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__0_in_rule__CollectionLiteralPartCS__Group_0__1__Impl34708 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__0__Impl_in_rule__CollectionLiteralPartCS__Group_0_1__034743 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__1_in_rule__CollectionLiteralPartCS__Group_0_1__034746 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_103_in_rule__CollectionLiteralPartCS__Group_0_1__0__Impl34774 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__1__Impl_in_rule__CollectionLiteralPartCS__Group_0_1__134805 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1_in_rule__CollectionLiteralPartCS__Group_0_1__1__Impl34832 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__0__Impl_in_rule__CollectionPatternCS__Group__034866 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__1_in_rule__CollectionPatternCS__Group__034869 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__OwnedTypeAssignment_0_in_rule__CollectionPatternCS__Group__0__Impl34896 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__1__Impl_in_rule__CollectionPatternCS__Group__134926 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E12BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__2_in_rule__CollectionPatternCS__Group__134929 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__CollectionPatternCS__Group__1__Impl34957 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__2__Impl_in_rule__CollectionPatternCS__Group__234988 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E12BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__3_in_rule__CollectionPatternCS__Group__234991 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__0_in_rule__CollectionPatternCS__Group__2__Impl35018 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__3__Impl_in_rule__CollectionPatternCS__Group__335049 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__CollectionPatternCS__Group__3__Impl35077 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__0__Impl_in_rule__CollectionPatternCS__Group_2__035116 = new BitSet(new long[]{0x0000000000000000L,0x0000010400000000L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__1_in_rule__CollectionPatternCS__Group_2__035119 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__OwnedPartsAssignment_2_0_in_rule__CollectionPatternCS__Group_2__0__Impl35146 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__1__Impl_in_rule__CollectionPatternCS__Group_2__135176 = new BitSet(new long[]{0x0000000000000000L,0x0000010400000000L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__2_in_rule__CollectionPatternCS__Group_2__135179 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_1__0_in_rule__CollectionPatternCS__Group_2__1__Impl35206 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__2__Impl_in_rule__CollectionPatternCS__Group_2__235237 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_2__0_in_rule__CollectionPatternCS__Group_2__2__Impl35264 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_1__0__Impl_in_rule__CollectionPatternCS__Group_2_1__035300 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E02BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_1__1_in_rule__CollectionPatternCS__Group_2_1__035303 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__CollectionPatternCS__Group_2_1__0__Impl35331 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_1__1__Impl_in_rule__CollectionPatternCS__Group_2_1__135362 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1_in_rule__CollectionPatternCS__Group_2_1__1__Impl35389 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_2__0__Impl_in_rule__CollectionPatternCS__Group_2_2__035423 = new BitSet(new long[]{0x0000000000000180L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_2__1_in_rule__CollectionPatternCS__Group_2_2__035426 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_104_in_rule__CollectionPatternCS__Group_2_2__0__Impl35454 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_2__1__Impl_in_rule__CollectionPatternCS__Group_2_2__135485 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1_in_rule__CollectionPatternCS__Group_2_2__1__Impl35512 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__0__Impl_in_rule__ConstructorPartCS__Group__035546 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__1_in_rule__ConstructorPartCS__Group__035549 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ConstructorPartCS__ReferredPropertyAssignment_0_in_rule__ConstructorPartCS__Group__0__Impl35576 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__1__Impl_in_rule__ConstructorPartCS__Group__135606 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E02BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__2_in_rule__ConstructorPartCS__Group__135609 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__ConstructorPartCS__Group__1__Impl35637 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__2__Impl_in_rule__ConstructorPartCS__Group__235668 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ConstructorPartCS__OwnedInitExpressionAssignment_2_in_rule__ConstructorPartCS__Group__2__Impl35695 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PatternExpCS__Group__0__Impl_in_rule__PatternExpCS__Group__035731 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E02BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PatternExpCS__Group__1_in_rule__PatternExpCS__Group__035734 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PatternExpCS__PatternVariableNameAssignment_0_in_rule__PatternExpCS__Group__0__Impl35761 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PatternExpCS__Group__1__Impl_in_rule__PatternExpCS__Group__135792 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PatternExpCS__Group__2_in_rule__PatternExpCS__Group__135795 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__PatternExpCS__Group__1__Impl35823 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PatternExpCS__Group__2__Impl_in_rule__PatternExpCS__Group__235854 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PatternExpCS__OwnedPatternTypeAssignment_2_in_rule__PatternExpCS__Group__2__Impl35881 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__0__Impl_in_rule__LambdaLiteralExpCS__Group__035917 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
-        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__1_in_rule__LambdaLiteralExpCS__Group__035920 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_105_in_rule__LambdaLiteralExpCS__Group__0__Impl35948 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__1__Impl_in_rule__LambdaLiteralExpCS__Group__135979 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__2_in_rule__LambdaLiteralExpCS__Group__135982 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__LambdaLiteralExpCS__Group__1__Impl36010 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__2__Impl_in_rule__LambdaLiteralExpCS__Group__236041 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__3_in_rule__LambdaLiteralExpCS__Group__236044 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2_in_rule__LambdaLiteralExpCS__Group__2__Impl36071 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__3__Impl_in_rule__LambdaLiteralExpCS__Group__336101 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__LambdaLiteralExpCS__Group__3__Impl36129 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__0__Impl_in_rule__TupleLiteralExpCS__Group__036168 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__1_in_rule__TupleLiteralExpCS__Group__036171 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_80_in_rule__TupleLiteralExpCS__Group__0__Impl36199 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__1__Impl_in_rule__TupleLiteralExpCS__Group__136230 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__2_in_rule__TupleLiteralExpCS__Group__136233 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__TupleLiteralExpCS__Group__1__Impl36261 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__2__Impl_in_rule__TupleLiteralExpCS__Group__236292 = new BitSet(new long[]{0x0000000000000000L,0x0000001400000000L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__3_in_rule__TupleLiteralExpCS__Group__236295 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__OwnedPartsAssignment_2_in_rule__TupleLiteralExpCS__Group__2__Impl36322 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__3__Impl_in_rule__TupleLiteralExpCS__Group__336352 = new BitSet(new long[]{0x0000000000000000L,0x0000001400000000L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__4_in_rule__TupleLiteralExpCS__Group__336355 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group_3__0_in_rule__TupleLiteralExpCS__Group__3__Impl36382 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__4__Impl_in_rule__TupleLiteralExpCS__Group__436413 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__TupleLiteralExpCS__Group__4__Impl36441 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group_3__0__Impl_in_rule__TupleLiteralExpCS__Group_3__036482 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group_3__1_in_rule__TupleLiteralExpCS__Group_3__036485 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__TupleLiteralExpCS__Group_3__0__Impl36513 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group_3__1__Impl_in_rule__TupleLiteralExpCS__Group_3__136544 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1_in_rule__TupleLiteralExpCS__Group_3__1__Impl36571 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__0__Impl_in_rule__TupleLiteralPartCS__Group__036605 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000040L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__1_in_rule__TupleLiteralPartCS__Group__036608 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__NameAssignment_0_in_rule__TupleLiteralPartCS__Group__0__Impl36635 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__1__Impl_in_rule__TupleLiteralPartCS__Group__136665 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000040L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__2_in_rule__TupleLiteralPartCS__Group__136668 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group_1__0_in_rule__TupleLiteralPartCS__Group__1__Impl36695 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__2__Impl_in_rule__TupleLiteralPartCS__Group__236726 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__3_in_rule__TupleLiteralPartCS__Group__236729 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__TupleLiteralPartCS__Group__2__Impl36757 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__3__Impl_in_rule__TupleLiteralPartCS__Group__336788 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3_in_rule__TupleLiteralPartCS__Group__3__Impl36815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group_1__0__Impl_in_rule__TupleLiteralPartCS__Group_1__036853 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group_1__1_in_rule__TupleLiteralPartCS__Group_1__036856 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__TupleLiteralPartCS__Group_1__0__Impl36884 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group_1__1__Impl_in_rule__TupleLiteralPartCS__Group_1__136915 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1_in_rule__TupleLiteralPartCS__Group_1__1__Impl36942 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl_in_rule__UnlimitedNaturalLiteralExpCS__Group__036976 = new BitSet(new long[]{0x8000000000000000L});
-        public static final BitSet FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__1_in_rule__UnlimitedNaturalLiteralExpCS__Group__036979 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl_in_rule__UnlimitedNaturalLiteralExpCS__Group__137037 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_63_in_rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl37065 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvalidLiteralExpCS__Group__0__Impl_in_rule__InvalidLiteralExpCS__Group__037100 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
-        public static final BitSet FOLLOW_rule__InvalidLiteralExpCS__Group__1_in_rule__InvalidLiteralExpCS__Group__037103 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__InvalidLiteralExpCS__Group__1__Impl_in_rule__InvalidLiteralExpCS__Group__137161 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_106_in_rule__InvalidLiteralExpCS__Group__1__Impl37189 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NullLiteralExpCS__Group__0__Impl_in_rule__NullLiteralExpCS__Group__037224 = new BitSet(new long[]{0x8000000000000030L,0x00000C0000000000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NullLiteralExpCS__Group__1_in_rule__NullLiteralExpCS__Group__037227 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NullLiteralExpCS__Group__1__Impl_in_rule__NullLiteralExpCS__Group__137285 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_107_in_rule__NullLiteralExpCS__Group__1__Impl37313 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__0__Impl_in_rule__TypeLiteralWithMultiplicityCS__Group__037348 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__1_in_rule__TypeLiteralWithMultiplicityCS__Group__037351 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_rule__TypeLiteralWithMultiplicityCS__Group__0__Impl37378 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__1__Impl_in_rule__TypeLiteralWithMultiplicityCS__Group__137407 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1_in_rule__TypeLiteralWithMultiplicityCS__Group__1__Impl37434 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group__0__Impl_in_rule__TypeNameExpCS__Group__037469 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group__1_in_rule__TypeNameExpCS__Group__037472 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__OwnedPathNameAssignment_0_in_rule__TypeNameExpCS__Group__0__Impl37499 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group__1__Impl_in_rule__TypeNameExpCS__Group__137529 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1__0_in_rule__TypeNameExpCS__Group__1__Impl37556 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1__0__Impl_in_rule__TypeNameExpCS__Group_1__037591 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1__1_in_rule__TypeNameExpCS__Group_1__037594 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0_in_rule__TypeNameExpCS__Group_1__0__Impl37621 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1__1__Impl_in_rule__TypeNameExpCS__Group_1__137651 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__0_in_rule__TypeNameExpCS__Group_1__1__Impl37678 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__0__Impl_in_rule__TypeNameExpCS__Group_1_1__037713 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__1_in_rule__TypeNameExpCS__Group_1_1__037716 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__TypeNameExpCS__Group_1_1__0__Impl37744 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__1__Impl_in_rule__TypeNameExpCS__Group_1_1__137775 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__2_in_rule__TypeNameExpCS__Group_1_1__137778 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1_in_rule__TypeNameExpCS__Group_1_1__1__Impl37805 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__2__Impl_in_rule__TypeNameExpCS__Group_1_1__237835 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__TypeNameExpCS__Group_1_1__2__Impl37863 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeExpCS__Group__0__Impl_in_rule__TypeExpCS__Group__037900 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__TypeExpCS__Group__1_in_rule__TypeExpCS__Group__037903 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeExpCS__Alternatives_0_in_rule__TypeExpCS__Group__0__Impl37930 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeExpCS__Group__1__Impl_in_rule__TypeExpCS__Group__137960 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeExpCS__OwnedMultiplicityAssignment_1_in_rule__TypeExpCS__Group__1__Impl37987 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0__0__Impl_in_rule__ExpCS__Group_0__038022 = new BitSet(new long[]{0xA000000000000000L,0x000000000000FFFFL});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0__1_in_rule__ExpCS__Group_0__038025 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_rule__ExpCS__Group_0__0__Impl38052 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0__1__Impl_in_rule__ExpCS__Group_0__138081 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__0_in_rule__ExpCS__Group_0__1__Impl38108 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__0__Impl_in_rule__ExpCS__Group_0_1__038143 = new BitSet(new long[]{0xA000000000000000L,0x000000000000FFFFL});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__1_in_rule__ExpCS__Group_0_1__038146 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__1__Impl_in_rule__ExpCS__Group_0_1__138204 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__2_in_rule__ExpCS__Group_0_1__138207 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__NameAssignment_0_1_1_in_rule__ExpCS__Group_0_1__1__Impl38234 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__2__Impl_in_rule__ExpCS__Group_0_1__238264 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__OwnedRightAssignment_0_1_2_in_rule__ExpCS__Group_0_1__2__Impl38291 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__0__Impl_in_rule__PrefixedLetExpCS__Group_0__038327 = new BitSet(new long[]{0x6000000000000000L});
-        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__1_in_rule__PrefixedLetExpCS__Group_0__038330 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__1__Impl_in_rule__PrefixedLetExpCS__Group_0__138388 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__2_in_rule__PrefixedLetExpCS__Group_0__138391 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__NameAssignment_0_1_in_rule__PrefixedLetExpCS__Group_0__1__Impl38418 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__2__Impl_in_rule__PrefixedLetExpCS__Group_0__238448 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__OwnedRightAssignment_0_2_in_rule__PrefixedLetExpCS__Group_0__2__Impl38475 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__0__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__038511 = new BitSet(new long[]{0x6000000000000000L});
-        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__1_in_rule__PrefixedPrimaryExpCS__Group_0__038514 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__1__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__138572 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__2_in_rule__PrefixedPrimaryExpCS__Group_0__138575 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__NameAssignment_0_1_in_rule__PrefixedPrimaryExpCS__Group_0__1__Impl38602 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__2__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__238632 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2_in_rule__PrefixedPrimaryExpCS__Group_0__2__Impl38659 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group__0__Impl_in_rule__NameExpCS__Group__038695 = new BitSet(new long[]{0x0000000000000000L,0x0000200880000000L,0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group__1_in_rule__NameExpCS__Group__038698 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__OwnedPathNameAssignment_0_in_rule__NameExpCS__Group__0__Impl38725 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group__1__Impl_in_rule__NameExpCS__Group__138755 = new BitSet(new long[]{0x0000000000000000L,0x0000200880000000L,0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group__2_in_rule__NameExpCS__Group__138758 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1_in_rule__NameExpCS__Group__1__Impl38785 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group__2__Impl_in_rule__NameExpCS__Group__238816 = new BitSet(new long[]{0x0000000000000000L,0x0000200880000000L,0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group__3_in_rule__NameExpCS__Group__238819 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2_in_rule__NameExpCS__Group__2__Impl38846 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group__3__Impl_in_rule__NameExpCS__Group__338877 = new BitSet(new long[]{0x0000000000000000L,0x0000200880000000L,0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group__4_in_rule__NameExpCS__Group__338880 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3_in_rule__NameExpCS__Group__3__Impl38907 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group__4__Impl_in_rule__NameExpCS__Group__438938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group_4__0_in_rule__NameExpCS__Group__4__Impl38965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group_4__0__Impl_in_rule__NameExpCS__Group_4__039006 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group_4__1_in_rule__NameExpCS__Group_4__039009 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__IsPreAssignment_4_0_in_rule__NameExpCS__Group_4__0__Impl39036 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NameExpCS__Group_4__1__Impl_in_rule__NameExpCS__Group_4__139066 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_108_in_rule__NameExpCS__Group_4__1__Impl39094 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__0__Impl_in_rule__CurlyBracketedClauseCS__Group__039129 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__1_in_rule__CurlyBracketedClauseCS__Group__039132 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__1__Impl_in_rule__CurlyBracketedClauseCS__Group__139190 = new BitSet(new long[]{0x1F9FFFFFFFFE01A0L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__2_in_rule__CurlyBracketedClauseCS__Group__139193 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__CurlyBracketedClauseCS__Group__1__Impl39221 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__2__Impl_in_rule__CurlyBracketedClauseCS__Group__239252 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__3_in_rule__CurlyBracketedClauseCS__Group__239255 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Alternatives_2_in_rule__CurlyBracketedClauseCS__Group__2__Impl39282 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__3__Impl_in_rule__CurlyBracketedClauseCS__Group__339312 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__CurlyBracketedClauseCS__Group__3__Impl39340 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__0__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0__039379 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__1_in_rule__CurlyBracketedClauseCS__Group_2_0__039382 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0_in_rule__CurlyBracketedClauseCS__Group_2_0__0__Impl39409 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__1__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0__139439 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__0_in_rule__CurlyBracketedClauseCS__Group_2_0__1__Impl39466 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0_1__039501 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__1_in_rule__CurlyBracketedClauseCS__Group_2_0_1__039504 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl39532 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0_1__139563 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1_in_rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl39590 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__0__Impl_in_rule__RoundBracketedClauseCS__Group__039624 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__1_in_rule__RoundBracketedClauseCS__Group__039627 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__1__Impl_in_rule__RoundBracketedClauseCS__Group__139685 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E03BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__2_in_rule__RoundBracketedClauseCS__Group__139688 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__RoundBracketedClauseCS__Group__1__Impl39716 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__2__Impl_in_rule__RoundBracketedClauseCS__Group__239747 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E03BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__3_in_rule__RoundBracketedClauseCS__Group__239750 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__0_in_rule__RoundBracketedClauseCS__Group__2__Impl39777 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__3__Impl_in_rule__RoundBracketedClauseCS__Group__339808 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__RoundBracketedClauseCS__Group__3__Impl39836 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__0__Impl_in_rule__RoundBracketedClauseCS__Group_2__039875 = new BitSet(new long[]{0x0020000000000000L,0x0000000400000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__1_in_rule__RoundBracketedClauseCS__Group_2__039878 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0_in_rule__RoundBracketedClauseCS__Group_2__0__Impl39905 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__1__Impl_in_rule__RoundBracketedClauseCS__Group_2__139935 = new BitSet(new long[]{0x0020000000000000L,0x0000000400000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__2_in_rule__RoundBracketedClauseCS__Group_2__139938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1_in_rule__RoundBracketedClauseCS__Group_2__1__Impl39965 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__2__Impl_in_rule__RoundBracketedClauseCS__Group_2__239996 = new BitSet(new long[]{0x0020000000000000L,0x0000000400000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__3_in_rule__RoundBracketedClauseCS__Group_2__239999 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__0_in_rule__RoundBracketedClauseCS__Group_2__2__Impl40026 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__3__Impl_in_rule__RoundBracketedClauseCS__Group_2__340057 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__0_in_rule__RoundBracketedClauseCS__Group_2__3__Impl40084 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__0__Impl_in_rule__RoundBracketedClauseCS__Group_2_2__040123 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__1_in_rule__RoundBracketedClauseCS__Group_2_2__040126 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0_in_rule__RoundBracketedClauseCS__Group_2_2__0__Impl40153 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__1__Impl_in_rule__RoundBracketedClauseCS__Group_2_2__140183 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1_in_rule__RoundBracketedClauseCS__Group_2_2__1__Impl40210 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__0__Impl_in_rule__RoundBracketedClauseCS__Group_2_3__040245 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__1_in_rule__RoundBracketedClauseCS__Group_2_3__040248 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0_in_rule__RoundBracketedClauseCS__Group_2_3__0__Impl40275 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__1__Impl_in_rule__RoundBracketedClauseCS__Group_2_3__140305 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1_in_rule__RoundBracketedClauseCS__Group_2_3__1__Impl40332 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__0__Impl_in_rule__SquareBracketedClauseCS__Group__040367 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__1_in_rule__SquareBracketedClauseCS__Group__040370 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_109_in_rule__SquareBracketedClauseCS__Group__0__Impl40398 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__1__Impl_in_rule__SquareBracketedClauseCS__Group__140429 = new BitSet(new long[]{0x0000000000000000L,0x0000400400000000L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__2_in_rule__SquareBracketedClauseCS__Group__140432 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__OwnedTermsAssignment_1_in_rule__SquareBracketedClauseCS__Group__1__Impl40459 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__2__Impl_in_rule__SquareBracketedClauseCS__Group__240489 = new BitSet(new long[]{0x0000000000000000L,0x0000400400000000L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__3_in_rule__SquareBracketedClauseCS__Group__240492 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group_2__0_in_rule__SquareBracketedClauseCS__Group__2__Impl40519 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__3__Impl_in_rule__SquareBracketedClauseCS__Group__340550 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_110_in_rule__SquareBracketedClauseCS__Group__3__Impl40578 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group_2__0__Impl_in_rule__SquareBracketedClauseCS__Group_2__040617 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group_2__1_in_rule__SquareBracketedClauseCS__Group_2__040620 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__SquareBracketedClauseCS__Group_2__0__Impl40648 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group_2__1__Impl_in_rule__SquareBracketedClauseCS__Group_2__140679 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1_in_rule__SquareBracketedClauseCS__Group_2__1__Impl40706 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0__0__Impl_in_rule__NavigatingArgCS__Group_0__040740 = new BitSet(new long[]{0x0000000000000000L,0x0000800200000000L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0__1_in_rule__NavigatingArgCS__Group_0__040743 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0_in_rule__NavigatingArgCS__Group_0__0__Impl40770 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0__1__Impl_in_rule__NavigatingArgCS__Group_0__140800 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Alternatives_0_1_in_rule__NavigatingArgCS__Group_0__1__Impl40827 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__0__Impl_in_rule__NavigatingArgCS__Group_0_1_0__040862 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__1_in_rule__NavigatingArgCS__Group_0_1_0__040865 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__NavigatingArgCS__Group_0_1_0__0__Impl40893 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__1__Impl_in_rule__NavigatingArgCS__Group_0_1_0__140924 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__2_in_rule__NavigatingArgCS__Group_0_1_0__140927 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1_in_rule__NavigatingArgCS__Group_0_1_0__1__Impl40954 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__2__Impl_in_rule__NavigatingArgCS__Group_0_1_0__240984 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__0_in_rule__NavigatingArgCS__Group_0_1_0__2__Impl41011 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__0__Impl_in_rule__NavigatingArgCS__Group_0_1_0_2__041048 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__1_in_rule__NavigatingArgCS__Group_0_1_0_2__041051 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__NavigatingArgCS__Group_0_1_0_2__0__Impl41079 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__1__Impl_in_rule__NavigatingArgCS__Group_0_1_0_2__141110 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1_in_rule__NavigatingArgCS__Group_0_1_0_2__1__Impl41137 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_1__0__Impl_in_rule__NavigatingArgCS__Group_0_1_1__041171 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_1__1_in_rule__NavigatingArgCS__Group_0_1_1__041174 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_111_in_rule__NavigatingArgCS__Group_0_1_1__0__Impl41202 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_1__1__Impl_in_rule__NavigatingArgCS__Group_0_1_1__141233 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1_in_rule__NavigatingArgCS__Group_0_1_1__1__Impl41260 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_1__0__Impl_in_rule__NavigatingArgCS__Group_1__041294 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_1__1_in_rule__NavigatingArgCS__Group_1__041297 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__NavigatingArgCS__Group_1__0__Impl41325 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_1__1__Impl_in_rule__NavigatingArgCS__Group_1__141356 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedTypeAssignment_1_1_in_rule__NavigatingArgCS__Group_1__1__Impl41383 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__0__Impl_in_rule__NavigatingBarArgCS__Group__041417 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__1_in_rule__NavigatingBarArgCS__Group__041420 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__PrefixAssignment_0_in_rule__NavigatingBarArgCS__Group__0__Impl41447 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__1__Impl_in_rule__NavigatingBarArgCS__Group__141477 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__2_in_rule__NavigatingBarArgCS__Group__141480 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingBarArgCS__Group__1__Impl41507 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__2__Impl_in_rule__NavigatingBarArgCS__Group__241537 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__0_in_rule__NavigatingBarArgCS__Group__2__Impl41564 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__0__Impl_in_rule__NavigatingBarArgCS__Group_2__041601 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__1_in_rule__NavigatingBarArgCS__Group_2__041604 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__NavigatingBarArgCS__Group_2__0__Impl41632 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__1__Impl_in_rule__NavigatingBarArgCS__Group_2__141663 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__2_in_rule__NavigatingBarArgCS__Group_2__141666 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1_in_rule__NavigatingBarArgCS__Group_2__1__Impl41693 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__2__Impl_in_rule__NavigatingBarArgCS__Group_2__241723 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2_2__0_in_rule__NavigatingBarArgCS__Group_2__2__Impl41750 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2_2__0__Impl_in_rule__NavigatingBarArgCS__Group_2_2__041787 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2_2__1_in_rule__NavigatingBarArgCS__Group_2_2__041790 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__NavigatingBarArgCS__Group_2_2__0__Impl41818 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2_2__1__Impl_in_rule__NavigatingBarArgCS__Group_2_2__141849 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1_in_rule__NavigatingBarArgCS__Group_2_2__1__Impl41876 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__0__Impl_in_rule__NavigatingCommaArgCS__Group__041910 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__1_in_rule__NavigatingCommaArgCS__Group__041913 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__PrefixAssignment_0_in_rule__NavigatingCommaArgCS__Group__0__Impl41940 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__1__Impl_in_rule__NavigatingCommaArgCS__Group__141970 = new BitSet(new long[]{0x0000000000000000L,0x0000800200000000L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__2_in_rule__NavigatingCommaArgCS__Group__141973 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingCommaArgCS__Group__1__Impl42000 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__2__Impl_in_rule__NavigatingCommaArgCS__Group__242030 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Alternatives_2_in_rule__NavigatingCommaArgCS__Group__2__Impl42057 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__042094 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__1_in_rule__NavigatingCommaArgCS__Group_2_0__042097 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__NavigatingCommaArgCS__Group_2_0__0__Impl42125 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__142156 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__2_in_rule__NavigatingCommaArgCS__Group_2_0__142159 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1_in_rule__NavigatingCommaArgCS__Group_2_0__1__Impl42186 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__2__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__242216 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__0_in_rule__NavigatingCommaArgCS__Group_2_0__2__Impl42243 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_0_2__042280 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__1_in_rule__NavigatingCommaArgCS__Group_2_0_2__042283 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl42311 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_0_2__142342 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1_in_rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl42369 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_1__042403 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__1_in_rule__NavigatingCommaArgCS__Group_2_1__042406 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_111_in_rule__NavigatingCommaArgCS__Group_2_1__0__Impl42434 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_1__142465 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1_in_rule__NavigatingCommaArgCS__Group_2_1__1__Impl42492 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__0__Impl_in_rule__NavigatingSemiArgCS__Group__042526 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__1_in_rule__NavigatingSemiArgCS__Group__042529 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__PrefixAssignment_0_in_rule__NavigatingSemiArgCS__Group__0__Impl42556 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__1__Impl_in_rule__NavigatingSemiArgCS__Group__142586 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__2_in_rule__NavigatingSemiArgCS__Group__142589 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingSemiArgCS__Group__1__Impl42616 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__2__Impl_in_rule__NavigatingSemiArgCS__Group__242646 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__0_in_rule__NavigatingSemiArgCS__Group__2__Impl42673 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__0__Impl_in_rule__NavigatingSemiArgCS__Group_2__042710 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__1_in_rule__NavigatingSemiArgCS__Group_2__042713 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__NavigatingSemiArgCS__Group_2__0__Impl42741 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__1__Impl_in_rule__NavigatingSemiArgCS__Group_2__142772 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__2_in_rule__NavigatingSemiArgCS__Group_2__142775 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1_in_rule__NavigatingSemiArgCS__Group_2__1__Impl42802 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__2__Impl_in_rule__NavigatingSemiArgCS__Group_2__242832 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__0_in_rule__NavigatingSemiArgCS__Group_2__2__Impl42859 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__0__Impl_in_rule__NavigatingSemiArgCS__Group_2_2__042896 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__1_in_rule__NavigatingSemiArgCS__Group_2_2__042899 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__NavigatingSemiArgCS__Group_2_2__0__Impl42927 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__1__Impl_in_rule__NavigatingSemiArgCS__Group_2_2__142958 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1_in_rule__NavigatingSemiArgCS__Group_2_2__1__Impl42985 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__0__Impl_in_rule__IfExpCS__Group__043019 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E02BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__1_in_rule__IfExpCS__Group__043022 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_112_in_rule__IfExpCS__Group__0__Impl43050 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__1__Impl_in_rule__IfExpCS__Group__143081 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__2_in_rule__IfExpCS__Group__143084 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__OwnedConditionAssignment_1_in_rule__IfExpCS__Group__1__Impl43111 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__2__Impl_in_rule__IfExpCS__Group__243141 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__3_in_rule__IfExpCS__Group__243144 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_113_in_rule__IfExpCS__Group__2__Impl43172 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__3__Impl_in_rule__IfExpCS__Group__343203 = new BitSet(new long[]{0x0000000000000000L,0x0014000000000000L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__4_in_rule__IfExpCS__Group__343206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__OwnedThenExpressionAssignment_3_in_rule__IfExpCS__Group__3__Impl43233 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__4__Impl_in_rule__IfExpCS__Group__443263 = new BitSet(new long[]{0x0000000000000000L,0x0014000000000000L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__5_in_rule__IfExpCS__Group__443266 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__OwnedIfThenExpressionsAssignment_4_in_rule__IfExpCS__Group__4__Impl43293 = new BitSet(new long[]{0x0000000000000002L,0x0010000000000000L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__5__Impl_in_rule__IfExpCS__Group__543324 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__6_in_rule__IfExpCS__Group__543327 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__IfExpCS__Group__5__Impl43355 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__6__Impl_in_rule__IfExpCS__Group__643386 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__7_in_rule__IfExpCS__Group__643389 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__OwnedElseExpressionAssignment_6_in_rule__IfExpCS__Group__6__Impl43416 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__Group__7__Impl_in_rule__IfExpCS__Group__743446 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__IfExpCS__Group__7__Impl43474 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__0__Impl_in_rule__ElseIfThenExpCS__Group__043521 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__1_in_rule__ElseIfThenExpCS__Group__043524 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_116_in_rule__ElseIfThenExpCS__Group__0__Impl43552 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__1__Impl_in_rule__ElseIfThenExpCS__Group__143583 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
-        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__2_in_rule__ElseIfThenExpCS__Group__143586 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__OwnedConditionAssignment_1_in_rule__ElseIfThenExpCS__Group__1__Impl43613 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__2__Impl_in_rule__ElseIfThenExpCS__Group__243643 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__3_in_rule__ElseIfThenExpCS__Group__243646 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_113_in_rule__ElseIfThenExpCS__Group__2__Impl43674 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__3__Impl_in_rule__ElseIfThenExpCS__Group__343705 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3_in_rule__ElseIfThenExpCS__Group__3__Impl43732 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group__0__Impl_in_rule__LetExpCS__Group__043770 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group__1_in_rule__LetExpCS__Group__043773 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_117_in_rule__LetExpCS__Group__0__Impl43801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group__1__Impl_in_rule__LetExpCS__Group__143832 = new BitSet(new long[]{0x0000000000000000L,0x0000800400000000L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group__2_in_rule__LetExpCS__Group__143835 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__OwnedVariablesAssignment_1_in_rule__LetExpCS__Group__1__Impl43862 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group__2__Impl_in_rule__LetExpCS__Group__243892 = new BitSet(new long[]{0x0000000000000000L,0x0000800400000000L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group__3_in_rule__LetExpCS__Group__243895 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group_2__0_in_rule__LetExpCS__Group__2__Impl43922 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group__3__Impl_in_rule__LetExpCS__Group__343953 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group__4_in_rule__LetExpCS__Group__343956 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_111_in_rule__LetExpCS__Group__3__Impl43984 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group__4__Impl_in_rule__LetExpCS__Group__444015 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__OwnedInExpressionAssignment_4_in_rule__LetExpCS__Group__4__Impl44042 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group_2__0__Impl_in_rule__LetExpCS__Group_2__044082 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group_2__1_in_rule__LetExpCS__Group_2__044085 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__LetExpCS__Group_2__0__Impl44113 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__Group_2__1__Impl_in_rule__LetExpCS__Group_2__144144 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetExpCS__OwnedVariablesAssignment_2_1_in_rule__LetExpCS__Group_2__1__Impl44171 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group__0__Impl_in_rule__LetVariableCS__Group__044205 = new BitSet(new long[]{0x0000000000000000L,0x0000000280000040L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group__1_in_rule__LetVariableCS__Group__044208 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__NameAssignment_0_in_rule__LetVariableCS__Group__0__Impl44235 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group__1__Impl_in_rule__LetVariableCS__Group__144265 = new BitSet(new long[]{0x0000000000000000L,0x0000000280000040L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group__2_in_rule__LetVariableCS__Group__144268 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1_in_rule__LetVariableCS__Group__1__Impl44295 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group__2__Impl_in_rule__LetVariableCS__Group__244326 = new BitSet(new long[]{0x0000000000000000L,0x0000000280000040L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group__3_in_rule__LetVariableCS__Group__244329 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group_2__0_in_rule__LetVariableCS__Group__2__Impl44356 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group__3__Impl_in_rule__LetVariableCS__Group__344387 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group__4_in_rule__LetVariableCS__Group__344390 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__LetVariableCS__Group__3__Impl44418 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group__4__Impl_in_rule__LetVariableCS__Group__444449 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__OwnedInitExpressionAssignment_4_in_rule__LetVariableCS__Group__4__Impl44476 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group_2__0__Impl_in_rule__LetVariableCS__Group_2__044516 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group_2__1_in_rule__LetVariableCS__Group_2__044519 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__LetVariableCS__Group_2__0__Impl44547 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__Group_2__1__Impl_in_rule__LetVariableCS__Group_2__144578 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__LetVariableCS__OwnedTypeAssignment_2_1_in_rule__LetVariableCS__Group_2__1__Impl44605 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NestedExpCS__Group__0__Impl_in_rule__NestedExpCS__Group__044639 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00610E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__NestedExpCS__Group__1_in_rule__NestedExpCS__Group__044642 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__NestedExpCS__Group__0__Impl44670 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NestedExpCS__Group__1__Impl_in_rule__NestedExpCS__Group__144701 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__NestedExpCS__Group__2_in_rule__NestedExpCS__Group__144704 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NestedExpCS__OwnedExpressionAssignment_1_in_rule__NestedExpCS__Group__1__Impl44731 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__NestedExpCS__Group__2__Impl_in_rule__NestedExpCS__Group__244761 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__NestedExpCS__Group__2__Impl44789 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SelfExpCS__Group__0__Impl_in_rule__SelfExpCS__Group__044826 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L});
-        public static final BitSet FOLLOW_rule__SelfExpCS__Group__1_in_rule__SelfExpCS__Group__044829 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SelfExpCS__Group__1__Impl_in_rule__SelfExpCS__Group__144887 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_118_in_rule__SelfExpCS__Group__1__Impl44915 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group__0__Impl_in_rule__MultiplicityBoundsCS__Group__044950 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
-        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group__1_in_rule__MultiplicityBoundsCS__Group__044953 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__LowerBoundAssignment_0_in_rule__MultiplicityBoundsCS__Group__0__Impl44980 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group__1__Impl_in_rule__MultiplicityBoundsCS__Group__145010 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group_1__0_in_rule__MultiplicityBoundsCS__Group__1__Impl45037 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group_1__0__Impl_in_rule__MultiplicityBoundsCS__Group_1__045072 = new BitSet(new long[]{0x8000000000000010L});
-        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group_1__1_in_rule__MultiplicityBoundsCS__Group_1__045075 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_103_in_rule__MultiplicityBoundsCS__Group_1__0__Impl45103 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group_1__1__Impl_in_rule__MultiplicityBoundsCS__Group_1__145134 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1_in_rule__MultiplicityBoundsCS__Group_1__1__Impl45161 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__0__Impl_in_rule__MultiplicityCS__Group__045195 = new BitSet(new long[]{0x8000000000000010L,0x0000000040000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__1_in_rule__MultiplicityCS__Group__045198 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_109_in_rule__MultiplicityCS__Group__0__Impl45226 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__1__Impl_in_rule__MultiplicityCS__Group__145257 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
-        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__2_in_rule__MultiplicityCS__Group__145260 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityCS__Alternatives_1_in_rule__MultiplicityCS__Group__1__Impl45287 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__2__Impl_in_rule__MultiplicityCS__Group__245317 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_110_in_rule__MultiplicityCS__Group__2__Impl45345 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PathNameCS__Group__0__Impl_in_rule__PathNameCS__Group__045382 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
-        public static final BitSet FOLLOW_rule__PathNameCS__Group__1_in_rule__PathNameCS__Group__045385 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PathNameCS__OwnedPathElementsAssignment_0_in_rule__PathNameCS__Group__0__Impl45412 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PathNameCS__Group__1__Impl_in_rule__PathNameCS__Group__145442 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PathNameCS__Group_1__0_in_rule__PathNameCS__Group__1__Impl45469 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-        public static final BitSet FOLLOW_rule__PathNameCS__Group_1__0__Impl_in_rule__PathNameCS__Group_1__045504 = new BitSet(new long[]{0x1F9FFFFFFFFE0180L,0x000000003FFF0000L});
-        public static final BitSet FOLLOW_rule__PathNameCS__Group_1__1_in_rule__PathNameCS__Group_1__045507 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_102_in_rule__PathNameCS__Group_1__0__Impl45535 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PathNameCS__Group_1__1__Impl_in_rule__PathNameCS__Group_1__145566 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PathNameCS__OwnedPathElementsAssignment_1_1_in_rule__PathNameCS__Group_1__1__Impl45593 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group__0__Impl_in_rule__TypeParameterCS__Group__045627 = new BitSet(new long[]{0x0000800010000000L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group_1__0_in_rule__ImportCS__Group__1__Impl22391 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group__2__Impl_in_rule__ImportCS__Group__222422 = new BitSet(new long[]{0x0020000000000000L,0x0000000000000000L,0x0000000000000004L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group__3_in_rule__ImportCS__Group__222425 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__OwnedPathNameAssignment_2_in_rule__ImportCS__Group__2__Impl22452 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group__3__Impl_in_rule__ImportCS__Group__322482 = new BitSet(new long[]{0x0020000000000000L,0x0000000000000000L,0x0000000000000004L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group__4_in_rule__ImportCS__Group__322485 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__IsAllAssignment_3_in_rule__ImportCS__Group__3__Impl22512 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group__4__Impl_in_rule__ImportCS__Group__422543 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__ImportCS__Group__4__Impl22571 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group_1__0__Impl_in_rule__ImportCS__Group_1__022612 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group_1__1_in_rule__ImportCS__Group_1__022615 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__NameAssignment_1_0_in_rule__ImportCS__Group_1__0__Impl22642 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ImportCS__Group_1__1__Impl_in_rule__ImportCS__Group_1__122672 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__ImportCS__Group_1__1__Impl22700 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group__0__Impl_in_rule__LibraryCS__Group__022735 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group__1_in_rule__LibraryCS__Group__022738 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_34_in_rule__LibraryCS__Group__0__Impl22766 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group__1__Impl_in_rule__LibraryCS__Group__122797 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group__2_in_rule__LibraryCS__Group__122800 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group_1__0_in_rule__LibraryCS__Group__1__Impl22827 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group__2__Impl_in_rule__LibraryCS__Group__222858 = new BitSet(new long[]{0x0020000000000000L});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group__3_in_rule__LibraryCS__Group__222861 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LibraryCS__ReferredPackageAssignment_2_in_rule__LibraryCS__Group__2__Impl22888 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group__3__Impl_in_rule__LibraryCS__Group__322918 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__LibraryCS__Group__3__Impl22946 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group_1__0__Impl_in_rule__LibraryCS__Group_1__022985 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group_1__1_in_rule__LibraryCS__Group_1__022988 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LibraryCS__NameAssignment_1_0_in_rule__LibraryCS__Group_1__0__Impl23015 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LibraryCS__Group_1__1__Impl_in_rule__LibraryCS__Group_1__123045 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__LibraryCS__Group_1__1__Impl23073 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__0__Impl_in_rule__ModelElementRefCS__Group__023108 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__1_in_rule__ModelElementRefCS__Group__023111 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_44_in_rule__ModelElementRefCS__Group__0__Impl23139 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__1__Impl_in_rule__ModelElementRefCS__Group__123170 = new BitSet(new long[]{0x0020000000000000L});
+        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__2_in_rule__ModelElementRefCS__Group__123173 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ModelElementRefCS__OwnedPathNameAssignment_1_in_rule__ModelElementRefCS__Group__1__Impl23200 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ModelElementRefCS__Group__2__Impl_in_rule__ModelElementRefCS__Group__223230 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__ModelElementRefCS__Group__2__Impl23258 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__0__Impl_in_rule__OperationCS__Group__023295 = new BitSet(new long[]{0x0000001000000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__1_in_rule__OperationCS__Group__023298 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_0_in_rule__OperationCS__Group__0__Impl23325 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__1__Impl_in_rule__OperationCS__Group__123355 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000001000000103FL});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__2_in_rule__OperationCS__Group__123358 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_36_in_rule__OperationCS__Group__1__Impl23386 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__2__Impl_in_rule__OperationCS__Group__223417 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000001000000103FL});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__3_in_rule__OperationCS__Group__223420 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedSignatureAssignment_2_in_rule__OperationCS__Group__2__Impl23447 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__3__Impl_in_rule__OperationCS__Group__323478 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__4_in_rule__OperationCS__Group__323481 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__NameAssignment_3_in_rule__OperationCS__Group__3__Impl23508 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__4__Impl_in_rule__OperationCS__Group__423538 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000002000000003FL});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__5_in_rule__OperationCS__Group__423541 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__OperationCS__Group__4__Impl23569 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__5__Impl_in_rule__OperationCS__Group__523600 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000002000000003FL});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__6_in_rule__OperationCS__Group__523603 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_5__0_in_rule__OperationCS__Group__5__Impl23630 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__6__Impl_in_rule__OperationCS__Group__623661 = new BitSet(new long[]{0x0125002000000000L,0x0000340000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__7_in_rule__OperationCS__Group__623664 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__OperationCS__Group__6__Impl23692 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__7__Impl_in_rule__OperationCS__Group__723723 = new BitSet(new long[]{0x0125002000000000L,0x0000340000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__8_in_rule__OperationCS__Group__723726 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_7__0_in_rule__OperationCS__Group__7__Impl23753 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__8__Impl_in_rule__OperationCS__Group__823784 = new BitSet(new long[]{0x0125002000000000L,0x0000340000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__9_in_rule__OperationCS__Group__823787 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8__0_in_rule__OperationCS__Group__8__Impl23814 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__9__Impl_in_rule__OperationCS__Group__923845 = new BitSet(new long[]{0x0125002000000000L,0x0000340000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__10_in_rule__OperationCS__Group__923848 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9_in_rule__OperationCS__Group__9__Impl23875 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group__10__Impl_in_rule__OperationCS__Group__1023906 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Alternatives_10_in_rule__OperationCS__Group__10__Impl23933 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_5__0__Impl_in_rule__OperationCS__Group_5__023985 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_5__1_in_rule__OperationCS__Group_5__023988 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedParametersAssignment_5_0_in_rule__OperationCS__Group_5__0__Impl24015 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_5__1__Impl_in_rule__OperationCS__Group_5__124045 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_5_1__0_in_rule__OperationCS__Group_5__1__Impl24072 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_5_1__0__Impl_in_rule__OperationCS__Group_5_1__024107 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_5_1__1_in_rule__OperationCS__Group_5_1__024110 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__OperationCS__Group_5_1__0__Impl24138 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_5_1__1__Impl_in_rule__OperationCS__Group_5_1__124169 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedParametersAssignment_5_1_1_in_rule__OperationCS__Group_5_1__1__Impl24196 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_7__0__Impl_in_rule__OperationCS__Group_7__024230 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_7__1_in_rule__OperationCS__Group_7__024233 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__OperationCS__Group_7__0__Impl24261 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_7__1__Impl_in_rule__OperationCS__Group_7__124292 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedTypeAssignment_7_1_in_rule__OperationCS__Group_7__1__Impl24319 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8__0__Impl_in_rule__OperationCS__Group_8__024353 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8__1_in_rule__OperationCS__Group_8__024356 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_48_in_rule__OperationCS__Group_8__0__Impl24384 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8__1__Impl_in_rule__OperationCS__Group_8__124415 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8__2_in_rule__OperationCS__Group_8__124418 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedExceptionsAssignment_8_1_in_rule__OperationCS__Group_8__1__Impl24445 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8__2__Impl_in_rule__OperationCS__Group_8__224475 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8_2__0_in_rule__OperationCS__Group_8__2__Impl24502 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8_2__0__Impl_in_rule__OperationCS__Group_8_2__024539 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8_2__1_in_rule__OperationCS__Group_8_2__024542 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__OperationCS__Group_8_2__0__Impl24570 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_8_2__1__Impl_in_rule__OperationCS__Group_8_2__124601 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedExceptionsAssignment_8_2_1_in_rule__OperationCS__Group_8_2__1__Impl24628 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_0__0__Impl_in_rule__OperationCS__Group_9_0__024662 = new BitSet(new long[]{0x0040000004000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_0__1_in_rule__OperationCS__Group_9_0__024665 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__OperationCS__Group_9_0__0__Impl24693 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_0__1__Impl_in_rule__OperationCS__Group_9_0__124724 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_0_1__0_in_rule__OperationCS__Group_9_0__1__Impl24751 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_0_1__0__Impl_in_rule__OperationCS__Group_9_0_1__024786 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_0_1__1_in_rule__OperationCS__Group_9_0_1__024789 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Alternatives_9_0_1_0_in_rule__OperationCS__Group_9_0_1__0__Impl24816 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_0_1__1__Impl_in_rule__OperationCS__Group_9_0_1__124846 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__OperationCS__Group_9_0_1__1__Impl24875 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__0__Impl_in_rule__OperationCS__Group_9_1__024912 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__1_in_rule__OperationCS__Group_9_1__024915 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Alternatives_9_1_0_in_rule__OperationCS__Group_9_1__0__Impl24942 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__1__Impl_in_rule__OperationCS__Group_9_1__124972 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__OperationCS__Group_9_1__1__Impl25001 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_2__0__Impl_in_rule__OperationCS__Group_9_2__025038 = new BitSet(new long[]{0x0104002000000000L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_2__1_in_rule__OperationCS__Group_9_2__025041 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_2_0__0_in_rule__OperationCS__Group_9_2__0__Impl25068 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_2__1__Impl_in_rule__OperationCS__Group_9_2__125099 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__OperationCS__Group_9_2__1__Impl25127 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_2_0__0__Impl_in_rule__OperationCS__Group_9_2_0__025162 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_2_0__1_in_rule__OperationCS__Group_9_2_0__025165 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Alternatives_9_2_0_0_in_rule__OperationCS__Group_9_2_0__0__Impl25192 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_2_0__1__Impl_in_rule__OperationCS__Group_9_2_0__125222 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__OperationCS__Group_9_2_0__1__Impl25251 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__0__Impl_in_rule__OperationCS__Group_10_0__025288 = new BitSet(new long[]{0x0000018000080000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__1_in_rule__OperationCS__Group_10_0__025291 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__OperationCS__Group_10_0__0__Impl25319 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__1__Impl_in_rule__OperationCS__Group_10_0__125350 = new BitSet(new long[]{0x0000018000080000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__2_in_rule__OperationCS__Group_10_0__125353 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Alternatives_10_0_1_in_rule__OperationCS__Group_10_0__1__Impl25380 = new BitSet(new long[]{0x0000018000080002L,0x0000000000000023L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0__2__Impl_in_rule__OperationCS__Group_10_0__225411 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__OperationCS__Group_10_0__2__Impl25439 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__0__Impl_in_rule__OperationCS__Group_10_0_1_2__025476 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__1_in_rule__OperationCS__Group_10_0_1_2__025479 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_19_in_rule__OperationCS__Group_10_0_1_2__0__Impl25507 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__1__Impl_in_rule__OperationCS__Group_10_0_1_2__125538 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__2_in_rule__OperationCS__Group_10_0_1_2__125541 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__OperationCS__Group_10_0_1_2__1__Impl25569 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__2__Impl_in_rule__OperationCS__Group_10_0_1_2__225600 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__3_in_rule__OperationCS__Group_10_0_1_2__225603 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__OperationCS__Group_10_0_1_2__2__Impl25631 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__3__Impl_in_rule__OperationCS__Group_10_0_1_2__325662 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__4_in_rule__OperationCS__Group_10_0_1_2__325665 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_3_in_rule__OperationCS__Group_10_0_1_2__3__Impl25692 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_10_0_1_2__4__Impl_in_rule__OperationCS__Group_10_0_1_2__425723 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__OperationCS__Group_10_0_1_2__4__Impl25751 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group__0__Impl_in_rule__PackageCS__Group__025792 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__PackageCS__Group__1_in_rule__PackageCS__Group__025795 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_38_in_rule__PackageCS__Group__0__Impl25823 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group__1__Impl_in_rule__PackageCS__Group__125854 = new BitSet(new long[]{0x0020000000000000L,0x0000140000008000L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group__2_in_rule__PackageCS__Group__125857 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__NameAssignment_1_in_rule__PackageCS__Group__1__Impl25884 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group__2__Impl_in_rule__PackageCS__Group__225914 = new BitSet(new long[]{0x0020000000000000L,0x0000140000008000L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group__3_in_rule__PackageCS__Group__225917 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_2__0_in_rule__PackageCS__Group__2__Impl25944 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group__3__Impl_in_rule__PackageCS__Group__325975 = new BitSet(new long[]{0x0020000000000000L,0x0000140000008000L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group__4_in_rule__PackageCS__Group__325978 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_3__0_in_rule__PackageCS__Group__3__Impl26005 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group__4__Impl_in_rule__PackageCS__Group__426036 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Alternatives_4_in_rule__PackageCS__Group__4__Impl26063 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_2__0__Impl_in_rule__PackageCS__Group_2__026103 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_2__1_in_rule__PackageCS__Group_2__026106 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__PackageCS__Group_2__0__Impl26134 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_2__1__Impl_in_rule__PackageCS__Group_2__126165 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__NsPrefixAssignment_2_1_in_rule__PackageCS__Group_2__1__Impl26192 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_3__0__Impl_in_rule__PackageCS__Group_3__026226 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_3__1_in_rule__PackageCS__Group_3__026229 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__PackageCS__Group_3__0__Impl26257 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_3__1__Impl_in_rule__PackageCS__Group_3__126288 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__NsURIAssignment_3_1_in_rule__PackageCS__Group_3__1__Impl26315 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__0__Impl_in_rule__PackageCS__Group_4_0__026349 = new BitSet(new long[]{0x0000024008A20000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__1_in_rule__PackageCS__Group_4_0__026352 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__PackageCS__Group_4_0__0__Impl26380 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__1__Impl_in_rule__PackageCS__Group_4_0__126411 = new BitSet(new long[]{0x0000024008A20000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__2_in_rule__PackageCS__Group_4_0__126414 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PackageCS__Alternatives_4_0_1_in_rule__PackageCS__Group_4_0__1__Impl26441 = new BitSet(new long[]{0x0000024008A20002L,0x0000000000000023L});
+        public static final BitSet FOLLOW_rule__PackageCS__Group_4_0__2__Impl_in_rule__PackageCS__Group_4_0__226472 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__PackageCS__Group_4_0__2__Impl26500 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group__0__Impl_in_rule__ParameterCS__Group__026537 = new BitSet(new long[]{0x0004000000000000L,0x0000340000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group__1_in_rule__ParameterCS__Group__026540 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__NameAssignment_0_in_rule__ParameterCS__Group__0__Impl26567 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group__1__Impl_in_rule__ParameterCS__Group__126597 = new BitSet(new long[]{0x0004000000000000L,0x0000340000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group__2_in_rule__ParameterCS__Group__126600 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_1__0_in_rule__ParameterCS__Group__1__Impl26627 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group__2__Impl_in_rule__ParameterCS__Group__226658 = new BitSet(new long[]{0x0004000000000000L,0x0000340000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group__3_in_rule__ParameterCS__Group__226661 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__UnorderedGroup_2_in_rule__ParameterCS__Group__2__Impl26688 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group__3__Impl_in_rule__ParameterCS__Group__326719 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__0_in_rule__ParameterCS__Group__3__Impl26746 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_1__0__Impl_in_rule__ParameterCS__Group_1__026785 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_1__1_in_rule__ParameterCS__Group_1__026788 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__ParameterCS__Group_1__0__Impl26816 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_1__1__Impl_in_rule__ParameterCS__Group_1__126847 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__OwnedTypeAssignment_1_1_in_rule__ParameterCS__Group_1__1__Impl26874 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_0__0__Impl_in_rule__ParameterCS__Group_2_0__026908 = new BitSet(new long[]{0x0100002000000000L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_0__1_in_rule__ParameterCS__Group_2_0__026911 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__ParameterCS__Group_2_0__0__Impl26939 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_0__1__Impl_in_rule__ParameterCS__Group_2_0__126970 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_0_1__0_in_rule__ParameterCS__Group_2_0__1__Impl26997 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_0_1__0__Impl_in_rule__ParameterCS__Group_2_0_1__027032 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_0_1__1_in_rule__ParameterCS__Group_2_0_1__027035 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Alternatives_2_0_1_0_in_rule__ParameterCS__Group_2_0_1__0__Impl27062 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_0_1__1__Impl_in_rule__ParameterCS__Group_2_0_1__127092 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ParameterCS__Group_2_0_1__1__Impl27121 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1__0__Impl_in_rule__ParameterCS__Group_2_1__027158 = new BitSet(new long[]{0x0004000000000000L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1__1_in_rule__ParameterCS__Group_2_1__027161 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1_0__0_in_rule__ParameterCS__Group_2_1__0__Impl27188 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1__1__Impl_in_rule__ParameterCS__Group_2_1__127219 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__ParameterCS__Group_2_1__1__Impl27247 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1_0__0__Impl_in_rule__ParameterCS__Group_2_1_0__027282 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1_0__1_in_rule__ParameterCS__Group_2_1_0__027285 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Alternatives_2_1_0_0_in_rule__ParameterCS__Group_2_1_0__0__Impl27312 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1_0__1__Impl_in_rule__ParameterCS__Group_2_1_0__127342 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ParameterCS__Group_2_1_0__1__Impl27371 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__0__Impl_in_rule__ParameterCS__Group_3__027408 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__1_in_rule__ParameterCS__Group_3__027411 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__ParameterCS__Group_3__0__Impl27439 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__1__Impl_in_rule__ParameterCS__Group_3__127470 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__2_in_rule__ParameterCS__Group_3__127473 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__OwnedAnnotationsAssignment_3_1_in_rule__ParameterCS__Group_3__1__Impl27500 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000023L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_3__2__Impl_in_rule__ParameterCS__Group_3__227531 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__ParameterCS__Group_3__2__Impl27559 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__0__Impl_in_rule__ReferenceCS__Group__027596 = new BitSet(new long[]{0x0000040000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__1_in_rule__ReferenceCS__Group__027599 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_0_in_rule__ReferenceCS__Group__0__Impl27626 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__1__Impl_in_rule__ReferenceCS__Group__127656 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__2_in_rule__ReferenceCS__Group__127659 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_42_in_rule__ReferenceCS__Group__1__Impl27687 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__2__Impl_in_rule__ReferenceCS__Group__227718 = new BitSet(new long[]{0x9F7E282004000000L,0x0000740000008000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__3_in_rule__ReferenceCS__Group__227721 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__NameAssignment_2_in_rule__ReferenceCS__Group__2__Impl27748 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__3__Impl_in_rule__ReferenceCS__Group__327778 = new BitSet(new long[]{0x9F7E282004000000L,0x0000740000008000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__4_in_rule__ReferenceCS__Group__327781 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_3__0_in_rule__ReferenceCS__Group__3__Impl27808 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__4__Impl_in_rule__ReferenceCS__Group__427839 = new BitSet(new long[]{0x9F7E282004000000L,0x0000740000008000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__5_in_rule__ReferenceCS__Group__427842 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_4__0_in_rule__ReferenceCS__Group__4__Impl27869 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__5__Impl_in_rule__ReferenceCS__Group__527900 = new BitSet(new long[]{0x9F7E282004000000L,0x0000740000008000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__6_in_rule__ReferenceCS__Group__527903 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_5__0_in_rule__ReferenceCS__Group__5__Impl27930 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__6__Impl_in_rule__ReferenceCS__Group__627961 = new BitSet(new long[]{0x9F7E282004000000L,0x0000740000008000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__7_in_rule__ReferenceCS__Group__627964 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6_in_rule__ReferenceCS__Group__6__Impl27991 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group__7__Impl_in_rule__ReferenceCS__Group__728022 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_7_in_rule__ReferenceCS__Group__7__Impl28049 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_3__0__Impl_in_rule__ReferenceCS__Group_3__028095 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_3__1_in_rule__ReferenceCS__Group_3__028098 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_110_in_rule__ReferenceCS__Group_3__0__Impl28126 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_3__1__Impl_in_rule__ReferenceCS__Group_3__128157 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__ReferredOppositeAssignment_3_1_in_rule__ReferenceCS__Group_3__1__Impl28184 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_4__0__Impl_in_rule__ReferenceCS__Group_4__028218 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_4__1_in_rule__ReferenceCS__Group_4__028221 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__ReferenceCS__Group_4__0__Impl28249 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_4__1__Impl_in_rule__ReferenceCS__Group_4__128280 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__OwnedTypeAssignment_4_1_in_rule__ReferenceCS__Group_4__1__Impl28307 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_5__0__Impl_in_rule__ReferenceCS__Group_5__028341 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_5__1_in_rule__ReferenceCS__Group_5__028344 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__ReferenceCS__Group_5__0__Impl28372 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_5__1__Impl_in_rule__ReferenceCS__Group_5__128403 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__DefaultAssignment_5_1_in_rule__ReferenceCS__Group_5__1__Impl28430 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_0__0__Impl_in_rule__ReferenceCS__Group_6_0__028464 = new BitSet(new long[]{0x4000000000400000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_0__1_in_rule__ReferenceCS__Group_6_0__028467 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__ReferenceCS__Group_6_0__0__Impl28495 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_0__1__Impl_in_rule__ReferenceCS__Group_6_0__128526 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_0_1__0_in_rule__ReferenceCS__Group_6_0__1__Impl28553 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_0_1__0__Impl_in_rule__ReferenceCS__Group_6_0_1__028588 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_0_1__1_in_rule__ReferenceCS__Group_6_0_1__028591 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_0_1_0_in_rule__ReferenceCS__Group_6_0_1__0__Impl28618 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_0_1__1__Impl_in_rule__ReferenceCS__Group_6_0_1__128648 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_6_0_1__1__Impl28677 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__0__Impl_in_rule__ReferenceCS__Group_6_1__028714 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__1_in_rule__ReferenceCS__Group_6_1__028717 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_1_0_in_rule__ReferenceCS__Group_6_1__0__Impl28744 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__1__Impl_in_rule__ReferenceCS__Group_6_1__128774 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_6_1__1__Impl28803 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_2__0__Impl_in_rule__ReferenceCS__Group_6_2__028840 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_2__1_in_rule__ReferenceCS__Group_6_2__028843 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_2_0_in_rule__ReferenceCS__Group_6_2__0__Impl28870 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_2__1__Impl_in_rule__ReferenceCS__Group_6_2__128900 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_6_2__1__Impl28929 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_3__0__Impl_in_rule__ReferenceCS__Group_6_3__028966 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_3__1_in_rule__ReferenceCS__Group_6_3__028969 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_3_0_in_rule__ReferenceCS__Group_6_3__0__Impl28996 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_3__1__Impl_in_rule__ReferenceCS__Group_6_3__129026 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_6_3__1__Impl29055 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_4__0__Impl_in_rule__ReferenceCS__Group_6_4__029092 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_4__1_in_rule__ReferenceCS__Group_6_4__029095 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_4_0_in_rule__ReferenceCS__Group_6_4__0__Impl29122 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_4__1__Impl_in_rule__ReferenceCS__Group_6_4__129152 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_6_4__1__Impl29181 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_5__0__Impl_in_rule__ReferenceCS__Group_6_5__029218 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_5__1_in_rule__ReferenceCS__Group_6_5__029221 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_5_0_in_rule__ReferenceCS__Group_6_5__0__Impl29248 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_5__1__Impl_in_rule__ReferenceCS__Group_6_5__129278 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_6_5__1__Impl29307 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_6__0__Impl_in_rule__ReferenceCS__Group_6_6__029344 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_6__1_in_rule__ReferenceCS__Group_6_6__029347 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_6_0_in_rule__ReferenceCS__Group_6_6__0__Impl29374 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_6__1__Impl_in_rule__ReferenceCS__Group_6_6__129404 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_6_6__1__Impl29433 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_7__0__Impl_in_rule__ReferenceCS__Group_6_7__029470 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_7__1_in_rule__ReferenceCS__Group_6_7__029473 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_7_0_in_rule__ReferenceCS__Group_6_7__0__Impl29500 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_7__1__Impl_in_rule__ReferenceCS__Group_6_7__129530 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_6_7__1__Impl29559 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_8__0__Impl_in_rule__ReferenceCS__Group_6_8__029596 = new BitSet(new long[]{0x9F5E282004000000L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_8__1_in_rule__ReferenceCS__Group_6_8__029599 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_8_0__0_in_rule__ReferenceCS__Group_6_8__0__Impl29626 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_8__1__Impl_in_rule__ReferenceCS__Group_6_8__129657 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__ReferenceCS__Group_6_8__1__Impl29685 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_8_0__0__Impl_in_rule__ReferenceCS__Group_6_8_0__029720 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_8_0__1_in_rule__ReferenceCS__Group_6_8_0__029723 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_6_8_0_0_in_rule__ReferenceCS__Group_6_8_0__0__Impl29750 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_8_0__1__Impl_in_rule__ReferenceCS__Group_6_8_0__129780 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_6_8_0__1__Impl29809 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__0__Impl_in_rule__ReferenceCS__Group_7_0__029846 = new BitSet(new long[]{0x0000000282000000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__1_in_rule__ReferenceCS__Group_7_0__029849 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__ReferenceCS__Group_7_0__0__Impl29877 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__1__Impl_in_rule__ReferenceCS__Group_7_0__129908 = new BitSet(new long[]{0x0000000282000000L,0x0000200000000023L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__2_in_rule__ReferenceCS__Group_7_0__129911 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Alternatives_7_0_1_in_rule__ReferenceCS__Group_7_0__1__Impl29938 = new BitSet(new long[]{0x0000000282000002L,0x0000000000000023L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0__2__Impl_in_rule__ReferenceCS__Group_7_0__229969 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__ReferenceCS__Group_7_0__2__Impl29997 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__0__Impl_in_rule__ReferenceCS__Group_7_0_1_1__030034 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__1_in_rule__ReferenceCS__Group_7_0_1_1__030037 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_33_in_rule__ReferenceCS__Group_7_0_1_1__0__Impl30065 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__1__Impl_in_rule__ReferenceCS__Group_7_0_1_1__130096 = new BitSet(new long[]{0x0020000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__2_in_rule__ReferenceCS__Group_7_0_1_1__130099 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_1_in_rule__ReferenceCS__Group_7_0_1_1__1__Impl30126 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__2__Impl_in_rule__ReferenceCS__Group_7_0_1_1__230156 = new BitSet(new long[]{0x0020000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__3_in_rule__ReferenceCS__Group_7_0_1_1__230159 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__0_in_rule__ReferenceCS__Group_7_0_1_1__2__Impl30186 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1__3__Impl_in_rule__ReferenceCS__Group_7_0_1_1__330217 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_1__3__Impl30245 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__0__Impl_in_rule__ReferenceCS__Group_7_0_1_1_2__030284 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__1_in_rule__ReferenceCS__Group_7_0_1_1_2__030287 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__ReferenceCS__Group_7_0_1_1_2__0__Impl30315 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_1_2__1__Impl_in_rule__ReferenceCS__Group_7_0_1_1_2__130346 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_1_in_rule__ReferenceCS__Group_7_0_1_1_2__1__Impl30373 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__0__Impl_in_rule__ReferenceCS__Group_7_0_1_2__030407 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__1_in_rule__ReferenceCS__Group_7_0_1_2__030410 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_25_in_rule__ReferenceCS__Group_7_0_1_2__0__Impl30438 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__1__Impl_in_rule__ReferenceCS__Group_7_0_1_2__130469 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__2_in_rule__ReferenceCS__Group_7_0_1_2__130472 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__Group_7_0_1_2__1__Impl30500 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__2__Impl_in_rule__ReferenceCS__Group_7_0_1_2__230531 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__3_in_rule__ReferenceCS__Group_7_0_1_2__230534 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__ReferenceCS__Group_7_0_1_2__2__Impl30562 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__3__Impl_in_rule__ReferenceCS__Group_7_0_1_2__330593 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__4_in_rule__ReferenceCS__Group_7_0_1_2__330596 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_3_in_rule__ReferenceCS__Group_7_0_1_2__3__Impl30623 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_2__4__Impl_in_rule__ReferenceCS__Group_7_0_1_2__430654 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_2__4__Impl30682 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__0__Impl_in_rule__ReferenceCS__Group_7_0_1_3__030723 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__1_in_rule__ReferenceCS__Group_7_0_1_3__030726 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_31_in_rule__ReferenceCS__Group_7_0_1_3__0__Impl30754 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__1__Impl_in_rule__ReferenceCS__Group_7_0_1_3__130785 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000004000000003FL});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__2_in_rule__ReferenceCS__Group_7_0_1_3__130788 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__Group_7_0_1_3__1__Impl30816 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__2__Impl_in_rule__ReferenceCS__Group_7_0_1_3__230847 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__3_in_rule__ReferenceCS__Group_7_0_1_3__230850 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__ReferenceCS__Group_7_0_1_3__2__Impl30878 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__3__Impl_in_rule__ReferenceCS__Group_7_0_1_3__330909 = new BitSet(new long[]{0x003FFFFFFFFE03B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__4_in_rule__ReferenceCS__Group_7_0_1_3__330912 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_3_in_rule__ReferenceCS__Group_7_0_1_3__3__Impl30939 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_7_0_1_3__4__Impl_in_rule__ReferenceCS__Group_7_0_1_3__430970 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__ReferenceCS__Group_7_0_1_3__4__Impl30998 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__0__Impl_in_rule__StructuredClassCS__Group__031039 = new BitSet(new long[]{0x0000000000220000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__1_in_rule__StructuredClassCS__Group__031042 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__IsAbstractAssignment_0_in_rule__StructuredClassCS__Group__0__Impl31069 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__1__Impl_in_rule__StructuredClassCS__Group__131100 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__2_in_rule__StructuredClassCS__Group__131103 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_21_in_rule__StructuredClassCS__Group__1__Impl31131 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__2__Impl_in_rule__StructuredClassCS__Group__231162 = new BitSet(new long[]{0x0020000010000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__3_in_rule__StructuredClassCS__Group__231165 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__NameAssignment_2_in_rule__StructuredClassCS__Group__2__Impl31192 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__3__Impl_in_rule__StructuredClassCS__Group__331222 = new BitSet(new long[]{0x0020000010000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__4_in_rule__StructuredClassCS__Group__331225 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedSignatureAssignment_3_in_rule__StructuredClassCS__Group__3__Impl31252 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__4__Impl_in_rule__StructuredClassCS__Group__431283 = new BitSet(new long[]{0x0020000010000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__5_in_rule__StructuredClassCS__Group__431286 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__0_in_rule__StructuredClassCS__Group__4__Impl31313 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__5__Impl_in_rule__StructuredClassCS__Group__531344 = new BitSet(new long[]{0x0020000010000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__6_in_rule__StructuredClassCS__Group__531347 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_5__0_in_rule__StructuredClassCS__Group__5__Impl31374 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__6__Impl_in_rule__StructuredClassCS__Group__631405 = new BitSet(new long[]{0x0020000010000000L,0x0000150000001000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__7_in_rule__StructuredClassCS__Group__631408 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__0_in_rule__StructuredClassCS__Group__6__Impl31435 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group__7__Impl_in_rule__StructuredClassCS__Group__731466 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Alternatives_7_in_rule__StructuredClassCS__Group__7__Impl31493 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__0__Impl_in_rule__StructuredClassCS__Group_4__031539 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__1_in_rule__StructuredClassCS__Group_4__031542 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_28_in_rule__StructuredClassCS__Group_4__0__Impl31570 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__1__Impl_in_rule__StructuredClassCS__Group_4__131601 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__2_in_rule__StructuredClassCS__Group_4__131604 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_1_in_rule__StructuredClassCS__Group_4__1__Impl31631 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4__2__Impl_in_rule__StructuredClassCS__Group_4__231661 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4_2__0_in_rule__StructuredClassCS__Group_4__2__Impl31688 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4_2__0__Impl_in_rule__StructuredClassCS__Group_4_2__031725 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4_2__1_in_rule__StructuredClassCS__Group_4_2__031728 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__StructuredClassCS__Group_4_2__0__Impl31756 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_4_2__1__Impl_in_rule__StructuredClassCS__Group_4_2__131787 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_1_in_rule__StructuredClassCS__Group_4_2__1__Impl31814 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_5__0__Impl_in_rule__StructuredClassCS__Group_5__031848 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_5__1_in_rule__StructuredClassCS__Group_5__031851 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__StructuredClassCS__Group_5__0__Impl31879 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_5__1__Impl_in_rule__StructuredClassCS__Group_5__131910 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__InstanceClassNameAssignment_5_1_in_rule__StructuredClassCS__Group_5__1__Impl31937 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__0__Impl_in_rule__StructuredClassCS__Group_6__031971 = new BitSet(new long[]{0x0000000100000000L,0x0000200000000000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__1_in_rule__StructuredClassCS__Group_6__031974 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__StructuredClassCS__Group_6__0__Impl32002 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__1__Impl_in_rule__StructuredClassCS__Group_6__132033 = new BitSet(new long[]{0x0000000100000000L,0x0000200000000000L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__2_in_rule__StructuredClassCS__Group_6__132036 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__IsInterfaceAssignment_6_1_in_rule__StructuredClassCS__Group_6__1__Impl32063 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_6__2__Impl_in_rule__StructuredClassCS__Group_6__232094 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__StructuredClassCS__Group_6__2__Impl32122 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__0__Impl_in_rule__StructuredClassCS__Group_7_0__032159 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000020000000002FL});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__1_in_rule__StructuredClassCS__Group_7_0__032162 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__StructuredClassCS__Group_7_0__0__Impl32190 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__1__Impl_in_rule__StructuredClassCS__Group_7_0__132221 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000020000000002FL});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__2_in_rule__StructuredClassCS__Group_7_0__132224 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Alternatives_7_0_1_in_rule__StructuredClassCS__Group_7_0__1__Impl32251 = new BitSet(new long[]{0x001FFFFFFFFE0182L,0x000000000000002FL});
+        public static final BitSet FOLLOW_rule__StructuredClassCS__Group_7_0__2__Impl_in_rule__StructuredClassCS__Group_7_0__232282 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__StructuredClassCS__Group_7_0__2__Impl32310 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group__0__Impl_in_rule__SysMLCS__Group__032347 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000023L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group__1_in_rule__SysMLCS__Group__032350 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group__1__Impl_in_rule__SysMLCS__Group__132408 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000010000000003FL});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group__2_in_rule__SysMLCS__Group__132411 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_69_in_rule__SysMLCS__Group__1__Impl32439 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group__2__Impl_in_rule__SysMLCS__Group__232470 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Alternatives_2_in_rule__SysMLCS__Group__2__Impl32497 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_0__0__Impl_in_rule__SysMLCS__Group_2_0__032533 = new BitSet(new long[]{0x0020000000000000L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_0__1_in_rule__SysMLCS__Group_2_0__032536 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__OwnedDetailsAssignment_2_0_0_in_rule__SysMLCS__Group_2_0__0__Impl32563 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_0__1__Impl_in_rule__SysMLCS__Group_2_0__132593 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__SysMLCS__Group_2_0__1__Impl32621 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__0__Impl_in_rule__SysMLCS__Group_2_1__032656 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000020000000003FL});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__1_in_rule__SysMLCS__Group_2_1__032659 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__SysMLCS__Group_2_1__0__Impl32687 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__1__Impl_in_rule__SysMLCS__Group_2_1__132718 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000020000000003FL});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__2_in_rule__SysMLCS__Group_2_1__132721 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1_1__0_in_rule__SysMLCS__Group_2_1__1__Impl32748 = new BitSet(new long[]{0x001FFFFFFFFE01A2L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1__2__Impl_in_rule__SysMLCS__Group_2_1__232779 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__SysMLCS__Group_2_1__2__Impl32807 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1_1__0__Impl_in_rule__SysMLCS__Group_2_1_1__032844 = new BitSet(new long[]{0x0020000000000000L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1_1__1_in_rule__SysMLCS__Group_2_1_1__032847 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__OwnedDetailsAssignment_2_1_1_0_in_rule__SysMLCS__Group_2_1_1__0__Impl32874 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SysMLCS__Group_2_1_1__1__Impl_in_rule__SysMLCS__Group_2_1_1__132904 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__SysMLCS__Group_2_1_1__1__Impl32932 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypedMultiplicityRefCS__Group__0__Impl_in_rule__TypedMultiplicityRefCS__Group__032967 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L});
+        public static final BitSet FOLLOW_rule__TypedMultiplicityRefCS__Group__1_in_rule__TypedMultiplicityRefCS__Group__032970 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypedMultiplicityRefCS__Group__0__Impl32997 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypedMultiplicityRefCS__Group__1__Impl_in_rule__TypedMultiplicityRefCS__Group__133026 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_1_in_rule__TypedMultiplicityRefCS__Group__1__Impl33053 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__0__Impl_in_rule__TemplateBindingCS__Group_0__033088 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C01FFFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__1_in_rule__TemplateBindingCS__Group_0__033091 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__TemplateBindingCS__Group_0__0__Impl33119 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__1__Impl_in_rule__TemplateBindingCS__Group_0__133150 = new BitSet(new long[]{0x0000000000000000L,0x00000A0000000000L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__2_in_rule__TemplateBindingCS__Group_0__133153 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_1_in_rule__TemplateBindingCS__Group_0__1__Impl33180 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__2__Impl_in_rule__TemplateBindingCS__Group_0__233210 = new BitSet(new long[]{0x0000000000000000L,0x00000A0000000000L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__3_in_rule__TemplateBindingCS__Group_0__233213 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0_2__0_in_rule__TemplateBindingCS__Group_0__2__Impl33240 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0__3__Impl_in_rule__TemplateBindingCS__Group_0__333271 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__TemplateBindingCS__Group_0__3__Impl33299 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0_2__0__Impl_in_rule__TemplateBindingCS__Group_0_2__033338 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C01FFFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0_2__1_in_rule__TemplateBindingCS__Group_0_2__033341 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__TemplateBindingCS__Group_0_2__0__Impl33369 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_0_2__1__Impl_in_rule__TemplateBindingCS__Group_0_2__133400 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_1_in_rule__TemplateBindingCS__Group_0_2__1__Impl33427 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__0__Impl_in_rule__TemplateBindingCS__Group_1__033461 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C01FFFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__1_in_rule__TemplateBindingCS__Group_1__033464 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_76_in_rule__TemplateBindingCS__Group_1__0__Impl33492 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__1__Impl_in_rule__TemplateBindingCS__Group_1__133523 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000800L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__2_in_rule__TemplateBindingCS__Group_1__133526 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_1_in_rule__TemplateBindingCS__Group_1__1__Impl33553 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__2__Impl_in_rule__TemplateBindingCS__Group_1__233583 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000800L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__3_in_rule__TemplateBindingCS__Group_1__233586 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1_2__0_in_rule__TemplateBindingCS__Group_1__2__Impl33613 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1__3__Impl_in_rule__TemplateBindingCS__Group_1__333644 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_75_in_rule__TemplateBindingCS__Group_1__3__Impl33672 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1_2__0__Impl_in_rule__TemplateBindingCS__Group_1_2__033711 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C01FFFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1_2__1_in_rule__TemplateBindingCS__Group_1_2__033714 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__TemplateBindingCS__Group_1_2__0__Impl33742 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__Group_1_2__1__Impl_in_rule__TemplateBindingCS__Group_1_2__133773 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_1_in_rule__TemplateBindingCS__Group_1_2__1__Impl33800 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__0__Impl_in_rule__TemplateSignatureCS__Group_0__033834 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__1_in_rule__TemplateSignatureCS__Group_0__033837 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__TemplateSignatureCS__Group_0__0__Impl33865 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__1__Impl_in_rule__TemplateSignatureCS__Group_0__133896 = new BitSet(new long[]{0x0000000000000000L,0x00000A0000000000L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__2_in_rule__TemplateSignatureCS__Group_0__133899 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_0_1_in_rule__TemplateSignatureCS__Group_0__1__Impl33926 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__2__Impl_in_rule__TemplateSignatureCS__Group_0__233956 = new BitSet(new long[]{0x0000000000000000L,0x00000A0000000000L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__3_in_rule__TemplateSignatureCS__Group_0__233959 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0_2__0_in_rule__TemplateSignatureCS__Group_0__2__Impl33986 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0__3__Impl_in_rule__TemplateSignatureCS__Group_0__334017 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__TemplateSignatureCS__Group_0__3__Impl34045 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0_2__0__Impl_in_rule__TemplateSignatureCS__Group_0_2__034084 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0_2__1_in_rule__TemplateSignatureCS__Group_0_2__034087 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__TemplateSignatureCS__Group_0_2__0__Impl34115 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_0_2__1__Impl_in_rule__TemplateSignatureCS__Group_0_2__134146 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_1_in_rule__TemplateSignatureCS__Group_0_2__1__Impl34173 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__0__Impl_in_rule__TemplateSignatureCS__Group_1__034207 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__1_in_rule__TemplateSignatureCS__Group_1__034210 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_76_in_rule__TemplateSignatureCS__Group_1__0__Impl34238 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__1__Impl_in_rule__TemplateSignatureCS__Group_1__134269 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000800L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__2_in_rule__TemplateSignatureCS__Group_1__134272 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_1_1_in_rule__TemplateSignatureCS__Group_1__1__Impl34299 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__2__Impl_in_rule__TemplateSignatureCS__Group_1__234329 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000800L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__3_in_rule__TemplateSignatureCS__Group_1__234332 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1_2__0_in_rule__TemplateSignatureCS__Group_1__2__Impl34359 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1__3__Impl_in_rule__TemplateSignatureCS__Group_1__334390 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_75_in_rule__TemplateSignatureCS__Group_1__3__Impl34418 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1_2__0__Impl_in_rule__TemplateSignatureCS__Group_1_2__034457 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1_2__1_in_rule__TemplateSignatureCS__Group_1_2__034460 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__TemplateSignatureCS__Group_1_2__0__Impl34488 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__Group_1_2__1__Impl_in_rule__TemplateSignatureCS__Group_1_2__134519 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_1_in_rule__TemplateSignatureCS__Group_1_2__1__Impl34546 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIPathNameCS__Group__0__Impl_in_rule__URIPathNameCS__Group__034580 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
+        public static final BitSet FOLLOW_rule__URIPathNameCS__Group__1_in_rule__URIPathNameCS__Group__034583 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIPathNameCS__OwnedPathElementsAssignment_0_in_rule__URIPathNameCS__Group__0__Impl34610 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIPathNameCS__Group__1__Impl_in_rule__URIPathNameCS__Group__134640 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIPathNameCS__Group_1__0_in_rule__URIPathNameCS__Group__1__Impl34667 = new BitSet(new long[]{0x0000000000000002L,0x0000800000000000L});
+        public static final BitSet FOLLOW_rule__URIPathNameCS__Group_1__0__Impl_in_rule__URIPathNameCS__Group_1__034702 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x0000007FFE00003FL});
+        public static final BitSet FOLLOW_rule__URIPathNameCS__Group_1__1_in_rule__URIPathNameCS__Group_1__034705 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_111_in_rule__URIPathNameCS__Group_1__0__Impl34733 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIPathNameCS__Group_1__1__Impl_in_rule__URIPathNameCS__Group_1__134764 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIPathNameCS__OwnedPathElementsAssignment_1_1_in_rule__URIPathNameCS__Group_1__1__Impl34791 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__Group_1__0__Impl_in_rule__URIFirstPathElementCS__Group_1__034825 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__Group_1__1_in_rule__URIFirstPathElementCS__Group_1__034828 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__Group_1__1__Impl_in_rule__URIFirstPathElementCS__Group_1__134886 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__URIFirstPathElementCS__ReferredElementAssignment_1_1_in_rule__URIFirstPathElementCS__Group_1__1__Impl34913 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group__0__Impl_in_rule__CollectionTypeCS__Group__034947 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group__1_in_rule__CollectionTypeCS__Group__034950 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__NameAssignment_0_in_rule__CollectionTypeCS__Group__0__Impl34977 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group__1__Impl_in_rule__CollectionTypeCS__Group__135007 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__0_in_rule__CollectionTypeCS__Group__1__Impl35034 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__0__Impl_in_rule__CollectionTypeCS__Group_1__035069 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__1_in_rule__CollectionTypeCS__Group_1__035072 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__CollectionTypeCS__Group_1__0__Impl35100 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__1__Impl_in_rule__CollectionTypeCS__Group_1__135131 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__2_in_rule__CollectionTypeCS__Group_1__135134 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__OwnedTypeAssignment_1_1_in_rule__CollectionTypeCS__Group_1__1__Impl35161 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionTypeCS__Group_1__2__Impl_in_rule__CollectionTypeCS__Group_1__235191 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__CollectionTypeCS__Group_1__2__Impl35219 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group__0__Impl_in_rule__TupleTypeCS__Group__035256 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group__1_in_rule__TupleTypeCS__Group__035259 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__NameAssignment_0_in_rule__TupleTypeCS__Group__0__Impl35286 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group__1__Impl_in_rule__TupleTypeCS__Group__135316 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__0_in_rule__TupleTypeCS__Group__1__Impl35343 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__0__Impl_in_rule__TupleTypeCS__Group_1__035378 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000002000000003FL});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__1_in_rule__TupleTypeCS__Group_1__035381 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__TupleTypeCS__Group_1__0__Impl35409 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__1__Impl_in_rule__TupleTypeCS__Group_1__135440 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000002000000003FL});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__2_in_rule__TupleTypeCS__Group_1__135443 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1__0_in_rule__TupleTypeCS__Group_1__1__Impl35470 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1__2__Impl_in_rule__TupleTypeCS__Group_1__235501 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__TupleTypeCS__Group_1__2__Impl35529 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1__0__Impl_in_rule__TupleTypeCS__Group_1_1__035566 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1__1_in_rule__TupleTypeCS__Group_1_1__035569 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__OwnedPartsAssignment_1_1_0_in_rule__TupleTypeCS__Group_1_1__0__Impl35596 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1__1__Impl_in_rule__TupleTypeCS__Group_1_1__135626 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1_1__0_in_rule__TupleTypeCS__Group_1_1__1__Impl35653 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1_1__0__Impl_in_rule__TupleTypeCS__Group_1_1_1__035688 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1_1__1_in_rule__TupleTypeCS__Group_1_1_1__035691 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__TupleTypeCS__Group_1_1_1__0__Impl35719 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__Group_1_1_1__1__Impl_in_rule__TupleTypeCS__Group_1_1_1__135750 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_1_in_rule__TupleTypeCS__Group_1_1_1__1__Impl35777 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TuplePartCS__Group__0__Impl_in_rule__TuplePartCS__Group__035811 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
+        public static final BitSet FOLLOW_rule__TuplePartCS__Group__1_in_rule__TuplePartCS__Group__035814 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TuplePartCS__NameAssignment_0_in_rule__TuplePartCS__Group__0__Impl35841 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TuplePartCS__Group__1__Impl_in_rule__TuplePartCS__Group__135871 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TuplePartCS__Group__2_in_rule__TuplePartCS__Group__135874 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__TuplePartCS__Group__1__Impl35902 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TuplePartCS__Group__2__Impl_in_rule__TuplePartCS__Group__235933 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TuplePartCS__OwnedTypeAssignment_2_in_rule__TuplePartCS__Group__2__Impl35960 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__0__Impl_in_rule__CollectionLiteralExpCS__Group__035996 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__1_in_rule__CollectionLiteralExpCS__Group__035999 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__OwnedTypeAssignment_0_in_rule__CollectionLiteralExpCS__Group__0__Impl36026 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__1__Impl_in_rule__CollectionLiteralExpCS__Group__136056 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C257FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__2_in_rule__CollectionLiteralExpCS__Group__136059 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__CollectionLiteralExpCS__Group__1__Impl36087 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__2__Impl_in_rule__CollectionLiteralExpCS__Group__236118 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C257FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__3_in_rule__CollectionLiteralExpCS__Group__236121 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2__0_in_rule__CollectionLiteralExpCS__Group__2__Impl36148 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group__3__Impl_in_rule__CollectionLiteralExpCS__Group__336179 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__CollectionLiteralExpCS__Group__3__Impl36207 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2__0__Impl_in_rule__CollectionLiteralExpCS__Group_2__036246 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2__1_in_rule__CollectionLiteralExpCS__Group_2__036249 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_0_in_rule__CollectionLiteralExpCS__Group_2__0__Impl36276 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2__1__Impl_in_rule__CollectionLiteralExpCS__Group_2__136306 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__0_in_rule__CollectionLiteralExpCS__Group_2__1__Impl36333 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__0__Impl_in_rule__CollectionLiteralExpCS__Group_2_1__036368 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C057FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__1_in_rule__CollectionLiteralExpCS__Group_2_1__036371 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__CollectionLiteralExpCS__Group_2_1__0__Impl36399 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__Group_2_1__1__Impl_in_rule__CollectionLiteralExpCS__Group_2_1__136430 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_1_in_rule__CollectionLiteralExpCS__Group_2_1__1__Impl36457 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0__0__Impl_in_rule__CollectionLiteralPartCS__Group_0__036491 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0__1_in_rule__CollectionLiteralPartCS__Group_0__036494 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_0_in_rule__CollectionLiteralPartCS__Group_0__0__Impl36521 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0__1__Impl_in_rule__CollectionLiteralPartCS__Group_0__136551 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__0_in_rule__CollectionLiteralPartCS__Group_0__1__Impl36578 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__0__Impl_in_rule__CollectionLiteralPartCS__Group_0_1__036613 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__1_in_rule__CollectionLiteralPartCS__Group_0_1__036616 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_112_in_rule__CollectionLiteralPartCS__Group_0_1__0__Impl36644 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__Group_0_1__1__Impl_in_rule__CollectionLiteralPartCS__Group_0_1__136675 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_1_in_rule__CollectionLiteralPartCS__Group_0_1__1__Impl36702 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__0__Impl_in_rule__CollectionPatternCS__Group__036736 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__1_in_rule__CollectionPatternCS__Group__036739 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__OwnedTypeAssignment_0_in_rule__CollectionPatternCS__Group__0__Impl36766 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__1__Impl_in_rule__CollectionPatternCS__Group__136796 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C257FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__2_in_rule__CollectionPatternCS__Group__136799 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__CollectionPatternCS__Group__1__Impl36827 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__2__Impl_in_rule__CollectionPatternCS__Group__236858 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C257FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__3_in_rule__CollectionPatternCS__Group__236861 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__0_in_rule__CollectionPatternCS__Group__2__Impl36888 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group__3__Impl_in_rule__CollectionPatternCS__Group__336919 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__CollectionPatternCS__Group__3__Impl36947 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__0__Impl_in_rule__CollectionPatternCS__Group_2__036986 = new BitSet(new long[]{0x0000000000000000L,0x0002080000000000L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__1_in_rule__CollectionPatternCS__Group_2__036989 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__OwnedPartsAssignment_2_0_in_rule__CollectionPatternCS__Group_2__0__Impl37016 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__1__Impl_in_rule__CollectionPatternCS__Group_2__137046 = new BitSet(new long[]{0x0000000000000000L,0x0002080000000000L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__2_in_rule__CollectionPatternCS__Group_2__137049 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_1__0_in_rule__CollectionPatternCS__Group_2__1__Impl37076 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2__2__Impl_in_rule__CollectionPatternCS__Group_2__237107 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_2__0_in_rule__CollectionPatternCS__Group_2__2__Impl37134 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_1__0__Impl_in_rule__CollectionPatternCS__Group_2_1__037170 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C057FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_1__1_in_rule__CollectionPatternCS__Group_2_1__037173 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__CollectionPatternCS__Group_2_1__0__Impl37201 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_1__1__Impl_in_rule__CollectionPatternCS__Group_2_1__137232 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__OwnedPartsAssignment_2_1_1_in_rule__CollectionPatternCS__Group_2_1__1__Impl37259 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_2__0__Impl_in_rule__CollectionPatternCS__Group_2_2__037293 = new BitSet(new long[]{0x0000000000000180L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_2__1_in_rule__CollectionPatternCS__Group_2_2__037296 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_113_in_rule__CollectionPatternCS__Group_2_2__0__Impl37324 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__Group_2_2__1__Impl_in_rule__CollectionPatternCS__Group_2_2__137355 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CollectionPatternCS__RestVariableNameAssignment_2_2_1_in_rule__CollectionPatternCS__Group_2_2__1__Impl37382 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__0__Impl_in_rule__ConstructorPartCS__Group__037416 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
+        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__1_in_rule__ConstructorPartCS__Group__037419 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ConstructorPartCS__ReferredPropertyAssignment_0_in_rule__ConstructorPartCS__Group__0__Impl37446 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__1__Impl_in_rule__ConstructorPartCS__Group__137476 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C057FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__2_in_rule__ConstructorPartCS__Group__137479 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__ConstructorPartCS__Group__1__Impl37507 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ConstructorPartCS__Group__2__Impl_in_rule__ConstructorPartCS__Group__237538 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ConstructorPartCS__OwnedInitExpressionAssignment_2_in_rule__ConstructorPartCS__Group__2__Impl37565 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PatternExpCS__Group__0__Impl_in_rule__PatternExpCS__Group__037601 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C057FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PatternExpCS__Group__1_in_rule__PatternExpCS__Group__037604 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PatternExpCS__PatternVariableNameAssignment_0_in_rule__PatternExpCS__Group__0__Impl37631 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PatternExpCS__Group__1__Impl_in_rule__PatternExpCS__Group__137662 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PatternExpCS__Group__2_in_rule__PatternExpCS__Group__137665 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__PatternExpCS__Group__1__Impl37693 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PatternExpCS__Group__2__Impl_in_rule__PatternExpCS__Group__237724 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PatternExpCS__OwnedPatternTypeAssignment_2_in_rule__PatternExpCS__Group__2__Impl37751 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__0__Impl_in_rule__LambdaLiteralExpCS__Group__037787 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__1_in_rule__LambdaLiteralExpCS__Group__037790 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_114_in_rule__LambdaLiteralExpCS__Group__0__Impl37818 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__1__Impl_in_rule__LambdaLiteralExpCS__Group__137849 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__2_in_rule__LambdaLiteralExpCS__Group__137852 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__LambdaLiteralExpCS__Group__1__Impl37880 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__2__Impl_in_rule__LambdaLiteralExpCS__Group__237911 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__3_in_rule__LambdaLiteralExpCS__Group__237914 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_2_in_rule__LambdaLiteralExpCS__Group__2__Impl37941 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LambdaLiteralExpCS__Group__3__Impl_in_rule__LambdaLiteralExpCS__Group__337971 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__LambdaLiteralExpCS__Group__3__Impl37999 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__0__Impl_in_rule__TupleLiteralExpCS__Group__038038 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__1_in_rule__TupleLiteralExpCS__Group__038041 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_89_in_rule__TupleLiteralExpCS__Group__0__Impl38069 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__1__Impl_in_rule__TupleLiteralExpCS__Group__138100 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__2_in_rule__TupleLiteralExpCS__Group__138103 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__TupleLiteralExpCS__Group__1__Impl38131 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__2__Impl_in_rule__TupleLiteralExpCS__Group__238162 = new BitSet(new long[]{0x0000000000000000L,0x0000280000000000L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__3_in_rule__TupleLiteralExpCS__Group__238165 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__OwnedPartsAssignment_2_in_rule__TupleLiteralExpCS__Group__2__Impl38192 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__3__Impl_in_rule__TupleLiteralExpCS__Group__338222 = new BitSet(new long[]{0x0000000000000000L,0x0000280000000000L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__4_in_rule__TupleLiteralExpCS__Group__338225 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group_3__0_in_rule__TupleLiteralExpCS__Group__3__Impl38252 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group__4__Impl_in_rule__TupleLiteralExpCS__Group__438283 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__TupleLiteralExpCS__Group__4__Impl38311 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group_3__0__Impl_in_rule__TupleLiteralExpCS__Group_3__038352 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group_3__1_in_rule__TupleLiteralExpCS__Group_3__038355 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__TupleLiteralExpCS__Group_3__0__Impl38383 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__Group_3__1__Impl_in_rule__TupleLiteralExpCS__Group_3__138414 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralExpCS__OwnedPartsAssignment_3_1_in_rule__TupleLiteralExpCS__Group_3__1__Impl38441 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__0__Impl_in_rule__TupleLiteralPartCS__Group__038475 = new BitSet(new long[]{0x0000000000000000L,0x0000040000008000L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__1_in_rule__TupleLiteralPartCS__Group__038478 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__NameAssignment_0_in_rule__TupleLiteralPartCS__Group__0__Impl38505 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__1__Impl_in_rule__TupleLiteralPartCS__Group__138535 = new BitSet(new long[]{0x0000000000000000L,0x0000040000008000L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__2_in_rule__TupleLiteralPartCS__Group__138538 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group_1__0_in_rule__TupleLiteralPartCS__Group__1__Impl38565 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__2__Impl_in_rule__TupleLiteralPartCS__Group__238596 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__3_in_rule__TupleLiteralPartCS__Group__238599 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__TupleLiteralPartCS__Group__2__Impl38627 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group__3__Impl_in_rule__TupleLiteralPartCS__Group__338658 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_3_in_rule__TupleLiteralPartCS__Group__3__Impl38685 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group_1__0__Impl_in_rule__TupleLiteralPartCS__Group_1__038723 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group_1__1_in_rule__TupleLiteralPartCS__Group_1__038726 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__TupleLiteralPartCS__Group_1__0__Impl38754 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__Group_1__1__Impl_in_rule__TupleLiteralPartCS__Group_1__138785 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TupleLiteralPartCS__OwnedTypeAssignment_1_1_in_rule__TupleLiteralPartCS__Group_1__1__Impl38812 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__0__Impl_in_rule__UnlimitedNaturalLiteralExpCS__Group__038846 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+        public static final BitSet FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__1_in_rule__UnlimitedNaturalLiteralExpCS__Group__038849 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl_in_rule__UnlimitedNaturalLiteralExpCS__Group__138907 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_72_in_rule__UnlimitedNaturalLiteralExpCS__Group__1__Impl38935 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvalidLiteralExpCS__Group__0__Impl_in_rule__InvalidLiteralExpCS__Group__038970 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
+        public static final BitSet FOLLOW_rule__InvalidLiteralExpCS__Group__1_in_rule__InvalidLiteralExpCS__Group__038973 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__InvalidLiteralExpCS__Group__1__Impl_in_rule__InvalidLiteralExpCS__Group__139031 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_115_in_rule__InvalidLiteralExpCS__Group__1__Impl39059 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NullLiteralExpCS__Group__0__Impl_in_rule__NullLiteralExpCS__Group__039094 = new BitSet(new long[]{0x0000000000000030L,0x0018000000000100L,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NullLiteralExpCS__Group__1_in_rule__NullLiteralExpCS__Group__039097 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NullLiteralExpCS__Group__1__Impl_in_rule__NullLiteralExpCS__Group__139155 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_116_in_rule__NullLiteralExpCS__Group__1__Impl39183 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__0__Impl_in_rule__TypeLiteralWithMultiplicityCS__Group__039218 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L});
+        public static final BitSet FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__1_in_rule__TypeLiteralWithMultiplicityCS__Group__039221 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_rule__TypeLiteralWithMultiplicityCS__Group__0__Impl39248 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeLiteralWithMultiplicityCS__Group__1__Impl_in_rule__TypeLiteralWithMultiplicityCS__Group__139277 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_1_in_rule__TypeLiteralWithMultiplicityCS__Group__1__Impl39304 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group__0__Impl_in_rule__TypeNameExpCS__Group__039339 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group__1_in_rule__TypeNameExpCS__Group__039342 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__OwnedPathNameAssignment_0_in_rule__TypeNameExpCS__Group__0__Impl39369 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group__1__Impl_in_rule__TypeNameExpCS__Group__139399 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1__0_in_rule__TypeNameExpCS__Group__1__Impl39426 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1__0__Impl_in_rule__TypeNameExpCS__Group_1__039461 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1__1_in_rule__TypeNameExpCS__Group_1__039464 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_0_in_rule__TypeNameExpCS__Group_1__0__Impl39491 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1__1__Impl_in_rule__TypeNameExpCS__Group_1__139521 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__0_in_rule__TypeNameExpCS__Group_1__1__Impl39548 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__0__Impl_in_rule__TypeNameExpCS__Group_1_1__039583 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__1_in_rule__TypeNameExpCS__Group_1_1__039586 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__TypeNameExpCS__Group_1_1__0__Impl39614 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__1__Impl_in_rule__TypeNameExpCS__Group_1_1__139645 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__2_in_rule__TypeNameExpCS__Group_1_1__139648 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_1_in_rule__TypeNameExpCS__Group_1_1__1__Impl39675 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeNameExpCS__Group_1_1__2__Impl_in_rule__TypeNameExpCS__Group_1_1__239705 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__TypeNameExpCS__Group_1_1__2__Impl39733 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeExpCS__Group__0__Impl_in_rule__TypeExpCS__Group__039770 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L});
+        public static final BitSet FOLLOW_rule__TypeExpCS__Group__1_in_rule__TypeExpCS__Group__039773 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeExpCS__Alternatives_0_in_rule__TypeExpCS__Group__0__Impl39800 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeExpCS__Group__1__Impl_in_rule__TypeExpCS__Group__139830 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeExpCS__OwnedMultiplicityAssignment_1_in_rule__TypeExpCS__Group__1__Impl39857 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0__0__Impl_in_rule__ExpCS__Group_0__039892 = new BitSet(new long[]{0x0000000000000000L,0x0000000001FFFF40L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0__1_in_rule__ExpCS__Group_0__039895 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_rule__ExpCS__Group_0__0__Impl39922 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0__1__Impl_in_rule__ExpCS__Group_0__139951 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__0_in_rule__ExpCS__Group_0__1__Impl39978 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__0__Impl_in_rule__ExpCS__Group_0_1__040013 = new BitSet(new long[]{0x0000000000000000L,0x0000000001FFFF40L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__1_in_rule__ExpCS__Group_0_1__040016 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__1__Impl_in_rule__ExpCS__Group_0_1__140074 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__2_in_rule__ExpCS__Group_0_1__140077 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__NameAssignment_0_1_1_in_rule__ExpCS__Group_0_1__1__Impl40104 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0_1__2__Impl_in_rule__ExpCS__Group_0_1__240134 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__OwnedRightAssignment_0_1_2_in_rule__ExpCS__Group_0_1__2__Impl40161 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__0__Impl_in_rule__PrefixedLetExpCS__Group_0__040197 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L});
+        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__1_in_rule__PrefixedLetExpCS__Group_0__040200 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__1__Impl_in_rule__PrefixedLetExpCS__Group_0__140258 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__2_in_rule__PrefixedLetExpCS__Group_0__140261 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__NameAssignment_0_1_in_rule__PrefixedLetExpCS__Group_0__1__Impl40288 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__Group_0__2__Impl_in_rule__PrefixedLetExpCS__Group_0__240318 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedLetExpCS__OwnedRightAssignment_0_2_in_rule__PrefixedLetExpCS__Group_0__2__Impl40345 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__0__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__040381 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L});
+        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__1_in_rule__PrefixedPrimaryExpCS__Group_0__040384 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__1__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__140442 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__2_in_rule__PrefixedPrimaryExpCS__Group_0__140445 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__NameAssignment_0_1_in_rule__PrefixedPrimaryExpCS__Group_0__1__Impl40472 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__Group_0__2__Impl_in_rule__PrefixedPrimaryExpCS__Group_0__240502 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_2_in_rule__PrefixedPrimaryExpCS__Group_0__2__Impl40529 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group__0__Impl_in_rule__NameExpCS__Group__040565 = new BitSet(new long[]{0x0000000000000000L,0x0040110000000000L,0x0000000000000020L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group__1_in_rule__NameExpCS__Group__040568 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__OwnedPathNameAssignment_0_in_rule__NameExpCS__Group__0__Impl40595 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group__1__Impl_in_rule__NameExpCS__Group__140625 = new BitSet(new long[]{0x0000000000000000L,0x0040110000000000L,0x0000000000000020L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group__2_in_rule__NameExpCS__Group__140628 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__OwnedSquareBracketedClausesAssignment_1_in_rule__NameExpCS__Group__1__Impl40655 = new BitSet(new long[]{0x0000000000000002L,0x0040000000000000L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group__2__Impl_in_rule__NameExpCS__Group__240686 = new BitSet(new long[]{0x0000000000000000L,0x0040110000000000L,0x0000000000000020L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group__3_in_rule__NameExpCS__Group__240689 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__OwnedRoundBracketedClauseAssignment_2_in_rule__NameExpCS__Group__2__Impl40716 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group__3__Impl_in_rule__NameExpCS__Group__340747 = new BitSet(new long[]{0x0000000000000000L,0x0040110000000000L,0x0000000000000020L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group__4_in_rule__NameExpCS__Group__340750 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_3_in_rule__NameExpCS__Group__3__Impl40777 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group__4__Impl_in_rule__NameExpCS__Group__440808 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group_4__0_in_rule__NameExpCS__Group__4__Impl40835 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group_4__0__Impl_in_rule__NameExpCS__Group_4__040876 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group_4__1_in_rule__NameExpCS__Group_4__040879 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__IsPreAssignment_4_0_in_rule__NameExpCS__Group_4__0__Impl40906 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NameExpCS__Group_4__1__Impl_in_rule__NameExpCS__Group_4__140936 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_117_in_rule__NameExpCS__Group_4__1__Impl40964 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__0__Impl_in_rule__CurlyBracketedClauseCS__Group__040999 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__1_in_rule__CurlyBracketedClauseCS__Group__041002 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__1__Impl_in_rule__CurlyBracketedClauseCS__Group__141060 = new BitSet(new long[]{0x001FFFFFFFFE01A0L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__2_in_rule__CurlyBracketedClauseCS__Group__141063 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_rule__CurlyBracketedClauseCS__Group__1__Impl41091 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__2__Impl_in_rule__CurlyBracketedClauseCS__Group__241122 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__3_in_rule__CurlyBracketedClauseCS__Group__241125 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Alternatives_2_in_rule__CurlyBracketedClauseCS__Group__2__Impl41152 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group__3__Impl_in_rule__CurlyBracketedClauseCS__Group__341182 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_rule__CurlyBracketedClauseCS__Group__3__Impl41210 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__0__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0__041249 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__1_in_rule__CurlyBracketedClauseCS__Group_2_0__041252 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_0_in_rule__CurlyBracketedClauseCS__Group_2_0__0__Impl41279 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0__1__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0__141309 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__0_in_rule__CurlyBracketedClauseCS__Group_2_0__1__Impl41336 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0_1__041371 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__1_in_rule__CurlyBracketedClauseCS__Group_2_0_1__041374 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__CurlyBracketedClauseCS__Group_2_0_1__0__Impl41402 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl_in_rule__CurlyBracketedClauseCS__Group_2_0_1__141433 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_1_in_rule__CurlyBracketedClauseCS__Group_2_0_1__1__Impl41460 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__0__Impl_in_rule__RoundBracketedClauseCS__Group__041494 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__1_in_rule__RoundBracketedClauseCS__Group__041497 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__1__Impl_in_rule__RoundBracketedClauseCS__Group__141555 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C077FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__2_in_rule__RoundBracketedClauseCS__Group__141558 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__RoundBracketedClauseCS__Group__1__Impl41586 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__2__Impl_in_rule__RoundBracketedClauseCS__Group__241617 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C077FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__3_in_rule__RoundBracketedClauseCS__Group__241620 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__0_in_rule__RoundBracketedClauseCS__Group__2__Impl41647 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group__3__Impl_in_rule__RoundBracketedClauseCS__Group__341678 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__RoundBracketedClauseCS__Group__3__Impl41706 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__0__Impl_in_rule__RoundBracketedClauseCS__Group_2__041745 = new BitSet(new long[]{0x0020000000000000L,0x0000080000000000L,0x0000000000000040L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__1_in_rule__RoundBracketedClauseCS__Group_2__041748 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_0_in_rule__RoundBracketedClauseCS__Group_2__0__Impl41775 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__1__Impl_in_rule__RoundBracketedClauseCS__Group_2__141805 = new BitSet(new long[]{0x0020000000000000L,0x0000080000000000L,0x0000000000000040L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__2_in_rule__RoundBracketedClauseCS__Group_2__141808 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_1_in_rule__RoundBracketedClauseCS__Group_2__1__Impl41835 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__2__Impl_in_rule__RoundBracketedClauseCS__Group_2__241866 = new BitSet(new long[]{0x0020000000000000L,0x0000080000000000L,0x0000000000000040L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__3_in_rule__RoundBracketedClauseCS__Group_2__241869 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__0_in_rule__RoundBracketedClauseCS__Group_2__2__Impl41896 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2__3__Impl_in_rule__RoundBracketedClauseCS__Group_2__341927 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__0_in_rule__RoundBracketedClauseCS__Group_2__3__Impl41954 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000040L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__0__Impl_in_rule__RoundBracketedClauseCS__Group_2_2__041993 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__1_in_rule__RoundBracketedClauseCS__Group_2_2__041996 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_0_in_rule__RoundBracketedClauseCS__Group_2_2__0__Impl42023 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_2__1__Impl_in_rule__RoundBracketedClauseCS__Group_2_2__142053 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_1_in_rule__RoundBracketedClauseCS__Group_2_2__1__Impl42080 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__0__Impl_in_rule__RoundBracketedClauseCS__Group_2_3__042115 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__1_in_rule__RoundBracketedClauseCS__Group_2_3__042118 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_0_in_rule__RoundBracketedClauseCS__Group_2_3__0__Impl42145 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__Group_2_3__1__Impl_in_rule__RoundBracketedClauseCS__Group_2_3__142175 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_1_in_rule__RoundBracketedClauseCS__Group_2_3__1__Impl42202 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__0__Impl_in_rule__SquareBracketedClauseCS__Group__042237 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__1_in_rule__SquareBracketedClauseCS__Group__042240 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_118_in_rule__SquareBracketedClauseCS__Group__0__Impl42268 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__1__Impl_in_rule__SquareBracketedClauseCS__Group__142299 = new BitSet(new long[]{0x0000000000000000L,0x0080080000000000L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__2_in_rule__SquareBracketedClauseCS__Group__142302 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__OwnedTermsAssignment_1_in_rule__SquareBracketedClauseCS__Group__1__Impl42329 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__2__Impl_in_rule__SquareBracketedClauseCS__Group__242359 = new BitSet(new long[]{0x0000000000000000L,0x0080080000000000L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__3_in_rule__SquareBracketedClauseCS__Group__242362 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group_2__0_in_rule__SquareBracketedClauseCS__Group__2__Impl42389 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group__3__Impl_in_rule__SquareBracketedClauseCS__Group__342420 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_119_in_rule__SquareBracketedClauseCS__Group__3__Impl42448 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group_2__0__Impl_in_rule__SquareBracketedClauseCS__Group_2__042487 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group_2__1_in_rule__SquareBracketedClauseCS__Group_2__042490 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__SquareBracketedClauseCS__Group_2__0__Impl42518 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__Group_2__1__Impl_in_rule__SquareBracketedClauseCS__Group_2__142549 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_1_in_rule__SquareBracketedClauseCS__Group_2__1__Impl42576 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0__0__Impl_in_rule__NavigatingArgCS__Group_0__042610 = new BitSet(new long[]{0x0000000000000000L,0x0100040000000000L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0__1_in_rule__NavigatingArgCS__Group_0__042613 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_0_in_rule__NavigatingArgCS__Group_0__0__Impl42640 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0__1__Impl_in_rule__NavigatingArgCS__Group_0__142670 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Alternatives_0_1_in_rule__NavigatingArgCS__Group_0__1__Impl42697 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__0__Impl_in_rule__NavigatingArgCS__Group_0_1_0__042732 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__1_in_rule__NavigatingArgCS__Group_0_1_0__042735 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__NavigatingArgCS__Group_0_1_0__0__Impl42763 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__1__Impl_in_rule__NavigatingArgCS__Group_0_1_0__142794 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__2_in_rule__NavigatingArgCS__Group_0_1_0__142797 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_1_in_rule__NavigatingArgCS__Group_0_1_0__1__Impl42824 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0__2__Impl_in_rule__NavigatingArgCS__Group_0_1_0__242854 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__0_in_rule__NavigatingArgCS__Group_0_1_0__2__Impl42881 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__0__Impl_in_rule__NavigatingArgCS__Group_0_1_0_2__042918 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__1_in_rule__NavigatingArgCS__Group_0_1_0_2__042921 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__NavigatingArgCS__Group_0_1_0_2__0__Impl42949 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_0_2__1__Impl_in_rule__NavigatingArgCS__Group_0_1_0_2__142980 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_1_in_rule__NavigatingArgCS__Group_0_1_0_2__1__Impl43007 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_1__0__Impl_in_rule__NavigatingArgCS__Group_0_1_1__043041 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_1__1_in_rule__NavigatingArgCS__Group_0_1_1__043044 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_120_in_rule__NavigatingArgCS__Group_0_1_1__0__Impl43072 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_0_1_1__1__Impl_in_rule__NavigatingArgCS__Group_0_1_1__143103 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_1_in_rule__NavigatingArgCS__Group_0_1_1__1__Impl43130 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_1__0__Impl_in_rule__NavigatingArgCS__Group_1__043164 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_1__1_in_rule__NavigatingArgCS__Group_1__043167 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__NavigatingArgCS__Group_1__0__Impl43195 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__Group_1__1__Impl_in_rule__NavigatingArgCS__Group_1__143226 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingArgCS__OwnedTypeAssignment_1_1_in_rule__NavigatingArgCS__Group_1__1__Impl43253 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__0__Impl_in_rule__NavigatingBarArgCS__Group__043287 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__1_in_rule__NavigatingBarArgCS__Group__043290 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__PrefixAssignment_0_in_rule__NavigatingBarArgCS__Group__0__Impl43317 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__1__Impl_in_rule__NavigatingBarArgCS__Group__143347 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__2_in_rule__NavigatingBarArgCS__Group__143350 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingBarArgCS__Group__1__Impl43377 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group__2__Impl_in_rule__NavigatingBarArgCS__Group__243407 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__0_in_rule__NavigatingBarArgCS__Group__2__Impl43434 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__0__Impl_in_rule__NavigatingBarArgCS__Group_2__043471 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__1_in_rule__NavigatingBarArgCS__Group_2__043474 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__NavigatingBarArgCS__Group_2__0__Impl43502 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__1__Impl_in_rule__NavigatingBarArgCS__Group_2__143533 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__2_in_rule__NavigatingBarArgCS__Group_2__143536 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__OwnedTypeAssignment_2_1_in_rule__NavigatingBarArgCS__Group_2__1__Impl43563 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2__2__Impl_in_rule__NavigatingBarArgCS__Group_2__243593 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2_2__0_in_rule__NavigatingBarArgCS__Group_2__2__Impl43620 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2_2__0__Impl_in_rule__NavigatingBarArgCS__Group_2_2__043657 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2_2__1_in_rule__NavigatingBarArgCS__Group_2_2__043660 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__NavigatingBarArgCS__Group_2_2__0__Impl43688 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__Group_2_2__1__Impl_in_rule__NavigatingBarArgCS__Group_2_2__143719 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_1_in_rule__NavigatingBarArgCS__Group_2_2__1__Impl43746 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__0__Impl_in_rule__NavigatingCommaArgCS__Group__043780 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__1_in_rule__NavigatingCommaArgCS__Group__043783 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__PrefixAssignment_0_in_rule__NavigatingCommaArgCS__Group__0__Impl43810 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__1__Impl_in_rule__NavigatingCommaArgCS__Group__143840 = new BitSet(new long[]{0x0000000000000000L,0x0100040000000000L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__2_in_rule__NavigatingCommaArgCS__Group__143843 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingCommaArgCS__Group__1__Impl43870 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group__2__Impl_in_rule__NavigatingCommaArgCS__Group__243900 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Alternatives_2_in_rule__NavigatingCommaArgCS__Group__2__Impl43927 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__043964 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__1_in_rule__NavigatingCommaArgCS__Group_2_0__043967 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__NavigatingCommaArgCS__Group_2_0__0__Impl43995 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__144026 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__2_in_rule__NavigatingCommaArgCS__Group_2_0__144029 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_1_in_rule__NavigatingCommaArgCS__Group_2_0__1__Impl44056 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0__2__Impl_in_rule__NavigatingCommaArgCS__Group_2_0__244086 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__0_in_rule__NavigatingCommaArgCS__Group_2_0__2__Impl44113 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_0_2__044150 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__1_in_rule__NavigatingCommaArgCS__Group_2_0_2__044153 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__NavigatingCommaArgCS__Group_2_0_2__0__Impl44181 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_0_2__144212 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_1_in_rule__NavigatingCommaArgCS__Group_2_0_2__1__Impl44239 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__0__Impl_in_rule__NavigatingCommaArgCS__Group_2_1__044273 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__1_in_rule__NavigatingCommaArgCS__Group_2_1__044276 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_120_in_rule__NavigatingCommaArgCS__Group_2_1__0__Impl44304 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__Group_2_1__1__Impl_in_rule__NavigatingCommaArgCS__Group_2_1__144335 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_1_in_rule__NavigatingCommaArgCS__Group_2_1__1__Impl44362 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__0__Impl_in_rule__NavigatingSemiArgCS__Group__044396 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__1_in_rule__NavigatingSemiArgCS__Group__044399 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__PrefixAssignment_0_in_rule__NavigatingSemiArgCS__Group__0__Impl44426 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__1__Impl_in_rule__NavigatingSemiArgCS__Group__144456 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__2_in_rule__NavigatingSemiArgCS__Group__144459 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_1_in_rule__NavigatingSemiArgCS__Group__1__Impl44486 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group__2__Impl_in_rule__NavigatingSemiArgCS__Group__244516 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__0_in_rule__NavigatingSemiArgCS__Group__2__Impl44543 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__0__Impl_in_rule__NavigatingSemiArgCS__Group_2__044580 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__1_in_rule__NavigatingSemiArgCS__Group_2__044583 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__NavigatingSemiArgCS__Group_2__0__Impl44611 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__1__Impl_in_rule__NavigatingSemiArgCS__Group_2__144642 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__2_in_rule__NavigatingSemiArgCS__Group_2__144645 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_1_in_rule__NavigatingSemiArgCS__Group_2__1__Impl44672 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2__2__Impl_in_rule__NavigatingSemiArgCS__Group_2__244702 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__0_in_rule__NavigatingSemiArgCS__Group_2__2__Impl44729 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__0__Impl_in_rule__NavigatingSemiArgCS__Group_2_2__044766 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__1_in_rule__NavigatingSemiArgCS__Group_2_2__044769 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__NavigatingSemiArgCS__Group_2_2__0__Impl44797 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__Group_2_2__1__Impl_in_rule__NavigatingSemiArgCS__Group_2_2__144828 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_1_in_rule__NavigatingSemiArgCS__Group_2_2__1__Impl44855 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__0__Impl_in_rule__IfExpCS__Group__044889 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C057FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__1_in_rule__IfExpCS__Group__044892 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_121_in_rule__IfExpCS__Group__0__Impl44920 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__1__Impl_in_rule__IfExpCS__Group__144951 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__2_in_rule__IfExpCS__Group__144954 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__OwnedConditionAssignment_1_in_rule__IfExpCS__Group__1__Impl44981 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__2__Impl_in_rule__IfExpCS__Group__245011 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__3_in_rule__IfExpCS__Group__245014 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_122_in_rule__IfExpCS__Group__2__Impl45042 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__3__Impl_in_rule__IfExpCS__Group__345073 = new BitSet(new long[]{0x0000000000000000L,0x2800000000000000L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__4_in_rule__IfExpCS__Group__345076 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__OwnedThenExpressionAssignment_3_in_rule__IfExpCS__Group__3__Impl45103 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__4__Impl_in_rule__IfExpCS__Group__445133 = new BitSet(new long[]{0x0000000000000000L,0x2800000000000000L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__5_in_rule__IfExpCS__Group__445136 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__OwnedIfThenExpressionsAssignment_4_in_rule__IfExpCS__Group__4__Impl45163 = new BitSet(new long[]{0x0000000000000002L,0x2000000000000000L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__5__Impl_in_rule__IfExpCS__Group__545194 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__6_in_rule__IfExpCS__Group__545197 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_123_in_rule__IfExpCS__Group__5__Impl45225 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__6__Impl_in_rule__IfExpCS__Group__645256 = new BitSet(new long[]{0x0000000000000000L,0x1000000000000000L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__7_in_rule__IfExpCS__Group__645259 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__OwnedElseExpressionAssignment_6_in_rule__IfExpCS__Group__6__Impl45286 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__Group__7__Impl_in_rule__IfExpCS__Group__745316 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_124_in_rule__IfExpCS__Group__7__Impl45344 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__0__Impl_in_rule__ElseIfThenExpCS__Group__045391 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__1_in_rule__ElseIfThenExpCS__Group__045394 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_125_in_rule__ElseIfThenExpCS__Group__0__Impl45422 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__1__Impl_in_rule__ElseIfThenExpCS__Group__145453 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
+        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__2_in_rule__ElseIfThenExpCS__Group__145456 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__OwnedConditionAssignment_1_in_rule__ElseIfThenExpCS__Group__1__Impl45483 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__2__Impl_in_rule__ElseIfThenExpCS__Group__245513 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__3_in_rule__ElseIfThenExpCS__Group__245516 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_122_in_rule__ElseIfThenExpCS__Group__2__Impl45544 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__Group__3__Impl_in_rule__ElseIfThenExpCS__Group__345575 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_3_in_rule__ElseIfThenExpCS__Group__3__Impl45602 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group__0__Impl_in_rule__LetExpCS__Group__045640 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group__1_in_rule__LetExpCS__Group__045643 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_126_in_rule__LetExpCS__Group__0__Impl45671 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group__1__Impl_in_rule__LetExpCS__Group__145702 = new BitSet(new long[]{0x0000000000000000L,0x0100080000000000L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group__2_in_rule__LetExpCS__Group__145705 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__OwnedVariablesAssignment_1_in_rule__LetExpCS__Group__1__Impl45732 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group__2__Impl_in_rule__LetExpCS__Group__245762 = new BitSet(new long[]{0x0000000000000000L,0x0100080000000000L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group__3_in_rule__LetExpCS__Group__245765 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group_2__0_in_rule__LetExpCS__Group__2__Impl45792 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group__3__Impl_in_rule__LetExpCS__Group__345823 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group__4_in_rule__LetExpCS__Group__345826 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_120_in_rule__LetExpCS__Group__3__Impl45854 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group__4__Impl_in_rule__LetExpCS__Group__445885 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__OwnedInExpressionAssignment_4_in_rule__LetExpCS__Group__4__Impl45912 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group_2__0__Impl_in_rule__LetExpCS__Group_2__045952 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group_2__1_in_rule__LetExpCS__Group_2__045955 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__LetExpCS__Group_2__0__Impl45983 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__Group_2__1__Impl_in_rule__LetExpCS__Group_2__146014 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetExpCS__OwnedVariablesAssignment_2_1_in_rule__LetExpCS__Group_2__1__Impl46041 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group__0__Impl_in_rule__LetVariableCS__Group__046075 = new BitSet(new long[]{0x0000000000000000L,0x0000050000008000L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group__1_in_rule__LetVariableCS__Group__046078 = new BitSet(new long[]{0x0000000000000002L});
     }
 
     private static class FollowSets002 {
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group__1_in_rule__TypeParameterCS__Group__045630 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__NameAssignment_0_in_rule__TypeParameterCS__Group__0__Impl45657 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group__1__Impl_in_rule__TypeParameterCS__Group__145687 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Alternatives_1_in_rule__TypeParameterCS__Group__1__Impl45714 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__0__Impl_in_rule__TypeParameterCS__Group_1_0__045749 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__1_in_rule__TypeParameterCS__Group_1_0__045752 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_28_in_rule__TypeParameterCS__Group_1_0__0__Impl45780 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__1__Impl_in_rule__TypeParameterCS__Group_1_0__145811 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__2_in_rule__TypeParameterCS__Group_1_0__145814 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1_in_rule__TypeParameterCS__Group_1_0__1__Impl45841 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__2__Impl_in_rule__TypeParameterCS__Group_1_0__245871 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0_2__0_in_rule__TypeParameterCS__Group_1_0__2__Impl45898 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0_2__0__Impl_in_rule__TypeParameterCS__Group_1_0_2__045935 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0_2__1_in_rule__TypeParameterCS__Group_1_0_2__045938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_119_in_rule__TypeParameterCS__Group_1_0_2__0__Impl45966 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0_2__1__Impl_in_rule__TypeParameterCS__Group_1_0_2__145997 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1_in_rule__TypeParameterCS__Group_1_0_2__1__Impl46024 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_1__0__Impl_in_rule__TypeParameterCS__Group_1_1__046058 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_1__1_in_rule__TypeParameterCS__Group_1_1__046061 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_47_in_rule__TypeParameterCS__Group_1_1__0__Impl46089 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_1__1__Impl_in_rule__TypeParameterCS__Group_1_1__146120 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypeParameterCS__OwnedSuperAssignment_1_1_1_in_rule__TypeParameterCS__Group_1_1__1__Impl46147 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypedTypeRefCS__Group__0__Impl_in_rule__TypedTypeRefCS__Group__046181 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000008L});
-        public static final BitSet FOLLOW_rule__TypedTypeRefCS__Group__1_in_rule__TypedTypeRefCS__Group__046184 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypedTypeRefCS__OwnedPathNameAssignment_0_in_rule__TypedTypeRefCS__Group__0__Impl46211 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypedTypeRefCS__Group__1__Impl_in_rule__TypedTypeRefCS__Group__146241 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TypedTypeRefCS__OwnedBindingAssignment_1_in_rule__TypedTypeRefCS__Group__1__Impl46268 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__0__Impl_in_rule__WildcardTypeRefCS__Group__046303 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00FFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__1_in_rule__WildcardTypeRefCS__Group__046306 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__1__Impl_in_rule__WildcardTypeRefCS__Group__146364 = new BitSet(new long[]{0x0000800010000000L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__2_in_rule__WildcardTypeRefCS__Group__146367 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_94_in_rule__WildcardTypeRefCS__Group__1__Impl46395 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__2__Impl_in_rule__WildcardTypeRefCS__Group__246426 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Alternatives_2_in_rule__WildcardTypeRefCS__Group__2__Impl46453 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_0__0__Impl_in_rule__WildcardTypeRefCS__Group_2_0__046490 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_0__1_in_rule__WildcardTypeRefCS__Group_2_0__046493 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_28_in_rule__WildcardTypeRefCS__Group_2_0__0__Impl46521 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_0__1__Impl_in_rule__WildcardTypeRefCS__Group_2_0__146552 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1_in_rule__WildcardTypeRefCS__Group_2_0__1__Impl46579 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_1__0__Impl_in_rule__WildcardTypeRefCS__Group_2_1__046613 = new BitSet(new long[]{0xFF9FFFFFFFFE01B0L,0x00410E00BFFF0000L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_1__1_in_rule__WildcardTypeRefCS__Group_2_1__046616 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_47_in_rule__WildcardTypeRefCS__Group_2_1__0__Impl46644 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_1__1__Impl_in_rule__WildcardTypeRefCS__Group_2_1__146675 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1_in_rule__WildcardTypeRefCS__Group_2_1__1__Impl46702 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLibraryCS_in_rule__TopLevelCS__OwnedLibrariesAssignment_246741 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleImportCS_in_rule__TopLevelCS__OwnedImportsAssignment_346772 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePackageCS_in_rule__TopLevelCS__OwnedPackagesAssignment_446803 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_20_in_rule__InvariantConstraintCS__IsCallableAssignment_046839 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_57_in_rule__InvariantConstraintCS__StereotypeAssignment_146883 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__InvariantConstraintCS__NameAssignment_2_046922 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_146953 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_146984 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_39_in_rule__PostconditionConstraintCS__StereotypeAssignment_047020 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PostconditionConstraintCS__NameAssignment_1_047059 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_147090 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__PostconditionConstraintCS__OwnedSpecificationAssignment_347121 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_40_in_rule__PreconditionConstraintCS__StereotypeAssignment_047157 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PreconditionConstraintCS__NameAssignment_1_047196 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_147227 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__PreconditionConstraintCS__OwnedSpecificationAssignment_347258 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AnnotationCS__NameAlternatives_2_0_in_rule__AnnotationCS__NameAssignment_247289 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_rule__AnnotationCS__OwnedDetailsAssignment_3_147322 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_rule__AnnotationCS__OwnedDetailsAssignment_3_2_147353 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_047384 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleModelElementCS_in_rule__AnnotationCS__OwnedContentsAssignment_4_0_1_147415 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleModelElementRefCS_in_rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_247446 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_46_in_rule__AttributeCS__QualifiersAssignment_0_0_047482 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_24_in_rule__AttributeCS__QualifiersAssignment_0_0_147526 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_24_in_rule__AttributeCS__QualifiersAssignment_0_1_047570 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_46_in_rule__AttributeCS__QualifiersAssignment_0_1_147614 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__NameAssignment_247653 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_rule__AttributeCS__OwnedTypeAssignment_3_147684 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__AttributeCS__DefaultAssignment_4_147715 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__AttributeCS__QualifiersAssignment_5_1_0_047751 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_120_in_rule__AttributeCS__QualifiersAssignment_5_1_0_147795 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_29_in_rule__AttributeCS__QualifiersAssignment_5_1_0_247839 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_121_in_rule__AttributeCS__QualifiersAssignment_5_1_0_347883 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_37_in_rule__AttributeCS__QualifiersAssignment_5_1_0_447927 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_122_in_rule__AttributeCS__QualifiersAssignment_5_1_0_547971 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__AttributeCS__QualifiersAssignment_5_1_0_648015 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_123_in_rule__AttributeCS__QualifiersAssignment_5_1_0_748059 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_49_in_rule__AttributeCS__QualifiersAssignment_5_1_0_848103 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_124_in_rule__AttributeCS__QualifiersAssignment_5_1_0_948147 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_50_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1048191 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_125_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1148235 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_51_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1248279 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_126_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1348323 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_52_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1448367 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_127_in_rule__AttributeCS__QualifiersAssignment_5_1_0_1548411 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_048450 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_348481 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_348512 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_41_in_rule__DataTypeCS__IsPrimitiveAssignment_048548 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__DataTypeCS__NameAssignment_248587 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_rule__DataTypeCS__OwnedSignatureAssignment_348618 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DataTypeCS__InstanceClassNameAssignment_4_148649 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_59_in_rule__DataTypeCS__IsSerializableAssignment_5_1_048685 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_048724 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_148755 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DetailCS__NameAlternatives_0_0_in_rule__DetailCS__NameAssignment_048786 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DetailCS__ValuesAlternatives_2_0_in_rule__DetailCS__ValuesAssignment_248819 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DocumentationCS__ValueAssignment_248852 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_rule__DocumentationCS__OwnedDetailsAssignment_3_148883 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_rule__DocumentationCS__OwnedDetailsAssignment_3_2_148914 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__EnumerationCS__NameAssignment_148945 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_rule__EnumerationCS__OwnedSignatureAssignment_248976 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__EnumerationCS__InstanceClassNameAssignment_3_149007 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_59_in_rule__EnumerationCS__IsSerializableAssignment_4_1_049043 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_049082 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_149113 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_249144 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__EnumerationLiteralCS__NameAssignment_0_0_149175 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationLiteralName_in_rule__EnumerationLiteralCS__NameAssignment_0_149206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSIGNED_in_rule__EnumerationLiteralCS__ValueAssignment_1_149237 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_149268 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ImportCS__NameAssignment_1_049299 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleURIPathNameCS_in_rule__ImportCS__OwnedPathNameAssignment_249330 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_128_in_rule__ImportCS__IsAllAssignment_349366 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__LibraryCS__NameAssignment_1_049405 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleURI_in_rule__LibraryCS__ReferredPackageAssignment_249440 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePathNameCS_in_rule__ModelElementRefCS__OwnedPathNameAssignment_149475 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_46_in_rule__OperationCS__QualifiersAssignment_0_0_049511 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_24_in_rule__OperationCS__QualifiersAssignment_0_0_149555 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_24_in_rule__OperationCS__QualifiersAssignment_0_1_049599 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_46_in_rule__OperationCS__QualifiersAssignment_0_1_149643 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_rule__OperationCS__OwnedSignatureAssignment_249682 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__OperationCS__NameAssignment_349713 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleParameterCS_in_rule__OperationCS__OwnedParametersAssignment_5_049744 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleParameterCS_in_rule__OperationCS__OwnedParametersAssignment_5_1_149775 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_rule__OperationCS__OwnedTypeAssignment_7_149806 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__OperationCS__OwnedExceptionsAssignment_8_149837 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__OperationCS__OwnedExceptionsAssignment_8_2_149868 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OperationCS__QualifiersAssignment_9_1_0_049904 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_120_in_rule__OperationCS__QualifiersAssignment_9_1_0_149948 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_37_in_rule__OperationCS__QualifiersAssignment_9_1_0_249992 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_122_in_rule__OperationCS__QualifiersAssignment_9_1_0_350036 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_50_in_rule__OperationCS__QualifiersAssignment_9_1_0_450080 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_125_in_rule__OperationCS__QualifiersAssignment_9_1_0_550124 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_050163 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePreconditionConstraintCS_in_rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_150194 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_350225 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePostconditionConstraintCS_in_rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_350256 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PackageCS__NameAssignment_150287 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PackageCS__NsPrefixAssignment_2_150318 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleURI_in_rule__PackageCS__NsURIAssignment_3_150349 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_050380 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePackageCS_in_rule__PackageCS__OwnedPackagesAssignment_4_0_1_150411 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleClassCS_in_rule__PackageCS__OwnedClassesAssignment_4_0_1_250442 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ParameterCS__NameAssignment_050473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_rule__ParameterCS__OwnedTypeAssignment_1_150504 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_37_in_rule__ParameterCS__QualifiersAssignment_2_1_0_050540 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_122_in_rule__ParameterCS__QualifiersAssignment_2_1_0_150584 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_50_in_rule__ParameterCS__QualifiersAssignment_2_1_0_250628 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_125_in_rule__ParameterCS__QualifiersAssignment_2_1_0_350672 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__ParameterCS__OwnedAnnotationsAssignment_3_150711 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_46_in_rule__ReferenceCS__QualifiersAssignment_0_0_050747 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_24_in_rule__ReferenceCS__QualifiersAssignment_0_0_150791 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_24_in_rule__ReferenceCS__QualifiersAssignment_0_1_050835 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_46_in_rule__ReferenceCS__QualifiersAssignment_0_1_150879 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__NameAssignment_250918 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredOppositeAssignment_3_150953 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_rule__ReferenceCS__OwnedTypeAssignment_4_150988 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__ReferenceCS__DefaultAssignment_5_151019 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_22_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_051055 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_129_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_151099 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_251143 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_120_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_351187 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_37_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_451231 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_122_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_551275 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_651319 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_123_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_751363 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_45_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_851407 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_130_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_951451 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_49_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1051495 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_124_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1151539 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_50_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1251583 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_125_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1351627 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_51_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1451671 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_126_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1551715 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_52_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1651759 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_127_in_rule__ReferenceCS__QualifiersAssignment_6_1_0_1751803 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_051842 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_151877 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_151916 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_351951 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_351982 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__SpecificationCS__OwnedExpressionAssignment_052013 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_UNQUOTED_STRING_in_rule__SpecificationCS__ExprStringAssignment_152044 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_17_in_rule__StructuredClassCS__IsAbstractAssignment_052080 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__StructuredClassCS__NameAssignment_252119 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_rule__StructuredClassCS__OwnedSignatureAssignment_352150 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_152181 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_152212 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__StructuredClassCS__InstanceClassNameAssignment_5_152243 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_32_in_rule__StructuredClassCS__IsInterfaceAssignment_6_152279 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_052318 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOperationCS_in_rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_152349 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_252380 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_352411 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_rule__SysMLCS__OwnedDetailsAssignment_2_0_052442 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_rule__SysMLCS__OwnedDetailsAssignment_2_1_1_052473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleMultiplicityCS_in_rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_152504 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_152535 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_152566 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_152597 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_152628 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_0_152659 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_152690 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_1_152721 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_152752 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleURIFirstPathElementCS_in_rule__URIPathNameCS__OwnedPathElementsAssignment_052784 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNextPathElementCS_in_rule__URIPathNameCS__OwnedPathElementsAssignment_1_152815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__URIFirstPathElementCS__ReferredElementAssignment_052850 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleURI_in_rule__URIFirstPathElementCS__ReferredElementAssignment_1_152889 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_rule__PrimitiveTypeCS__NameAssignment52924 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_rule__CollectionTypeCS__NameAssignment_052955 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__CollectionTypeCS__OwnedTypeAssignment_1_152986 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_80_in_rule__TupleTypeCS__NameAssignment_053022 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTuplePartCS_in_rule__TupleTypeCS__OwnedPartsAssignment_1_1_053061 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTuplePartCS_in_rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_153092 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__TuplePartCS__NameAssignment_053123 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__TuplePartCS__OwnedTypeAssignment_253154 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_rule__CollectionLiteralExpCS__OwnedTypeAssignment_053185 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_053216 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_153247 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_053278 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_153309 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_153340 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_rule__CollectionPatternCS__OwnedTypeAssignment_053371 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__CollectionPatternCS__OwnedPartsAssignment_2_053402 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__CollectionPatternCS__OwnedPartsAssignment_2_1_153433 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleIdentifier_in_rule__CollectionPatternCS__RestVariableNameAssignment_2_2_153464 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ConstructorPartCS__ReferredPropertyAssignment_053499 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0_in_rule__ConstructorPartCS__OwnedInitExpressionAssignment_253534 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PatternExpCS__PatternVariableNameAssignment_053567 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__PatternExpCS__OwnedPatternTypeAssignment_253598 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_253629 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_rule__TupleLiteralExpCS__OwnedPartsAssignment_253660 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_rule__TupleLiteralExpCS__OwnedPartsAssignment_3_153691 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__TupleLiteralPartCS__NameAssignment_053722 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__TupleLiteralPartCS__OwnedTypeAssignment_1_153753 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_353784 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNUMBER_LITERAL_in_rule__NumberLiteralExpCS__SymbolAssignment53815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStringLiteral_in_rule__StringLiteralExpCS__SegmentsAssignment53846 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_131_in_rule__BooleanLiteralExpCS__SymbolAssignment_053882 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_132_in_rule__BooleanLiteralExpCS__SymbolAssignment_153926 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleMultiplicityCS_in_rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_153965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_rule__TypeLiteralExpCS__OwnedTypeAssignment53996 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePathNameCS_in_rule__TypeNameExpCS__OwnedPathNameAssignment_054027 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_054058 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_154089 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleMultiplicityCS_in_rule__TypeExpCS__OwnedMultiplicityAssignment_154120 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleBinaryOperatorName_in_rule__ExpCS__NameAssignment_0_1_154151 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__ExpCS__OwnedRightAssignment_0_1_254182 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_rule__PrefixedLetExpCS__NameAssignment_0_154213 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_rule__PrefixedLetExpCS__OwnedRightAssignment_0_254244 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_rule__PrefixedPrimaryExpCS__NameAssignment_0_154275 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_254306 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePathNameCS_in_rule__NameExpCS__OwnedPathNameAssignment_054337 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSquareBracketedClauseCS_in_rule__NameExpCS__OwnedSquareBracketedClausesAssignment_154368 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_rule__NameExpCS__OwnedRoundBracketedClauseAssignment_254399 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_354430 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_133_in_rule__NameExpCS__IsPreAssignment_4_054466 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleConstructorPartCS_in_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_054505 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleConstructorPartCS_in_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_154536 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStringLiteral_in_rule__CurlyBracketedClauseCS__ValueAssignment_2_154567 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_054598 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_154629 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingSemiArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_054660 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_154691 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingBarArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_054722 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_154753 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__SquareBracketedClauseCS__OwnedTermsAssignment_154784 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_154815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_054846 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_154877 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_154908 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_154939 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingArgCS__OwnedTypeAssignment_1_154970 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_134_in_rule__NavigatingBarArgCS__PrefixAssignment_055006 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_155045 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingBarArgCS__OwnedTypeAssignment_2_155076 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_155107 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__NavigatingCommaArgCS__PrefixAssignment_055143 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_155182 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_155213 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_155244 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_155275 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__NavigatingSemiArgCS__PrefixAssignment_055311 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_155350 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_155381 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_155412 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IfExpCS__OwnedConditionAlternatives_1_0_in_rule__IfExpCS__OwnedConditionAssignment_155443 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedThenExpressionAssignment_355476 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleElseIfThenExpCS_in_rule__IfExpCS__OwnedIfThenExpressionsAssignment_455507 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedElseExpressionAssignment_655538 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__ElseIfThenExpCS__OwnedConditionAssignment_155569 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_355600 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLetVariableCS_in_rule__LetExpCS__OwnedVariablesAssignment_155631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLetVariableCS_in_rule__LetExpCS__OwnedVariablesAssignment_2_155662 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__LetExpCS__OwnedInExpressionAssignment_455693 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__LetVariableCS__NameAssignment_055724 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_155755 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__LetVariableCS__OwnedTypeAssignment_2_155786 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__LetVariableCS__OwnedInitExpressionAssignment_455817 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_rule__NestedExpCS__OwnedExpressionAssignment_155848 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLOWER_in_rule__MultiplicityBoundsCS__LowerBoundAssignment_055879 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUPPER_in_rule__MultiplicityBoundsCS__UpperBoundAssignment_1_155910 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__MultiplicityStringCS__StringBoundsAlternatives_0_in_rule__MultiplicityStringCS__StringBoundsAssignment55941 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleFirstPathElementCS_in_rule__PathNameCS__OwnedPathElementsAssignment_055974 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNextPathElementCS_in_rule__PathNameCS__OwnedPathElementsAssignment_1_156005 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__FirstPathElementCS__ReferredElementAssignment56040 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnreservedName_in_rule__NextPathElementCS__ReferredElementAssignment56079 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeRefCS_in_rule__TemplateParameterSubstitutionCS__OwnedActualParameterAssignment56114 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__TypeParameterCS__NameAssignment_056145 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_156176 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_156207 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedSuperAssignment_1_1_156238 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePathNameCS_in_rule__TypedTypeRefCS__OwnedPathNameAssignment_056269 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateBindingCS_in_rule__TypedTypeRefCS__OwnedBindingAssignment_156300 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_156331 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_156362 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_synpred179_InternalOCLinEcore11649 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ExpCS__Group_0__0_in_synpred180_InternalOCLinEcore11698 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_synpred187_InternalOCLinEcore11916 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_synpred188_InternalOCLinEcore11933 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_synpred190_InternalOCLinEcore11967 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__NameAssignment_0_in_rule__LetVariableCS__Group__0__Impl46105 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group__1__Impl_in_rule__LetVariableCS__Group__146135 = new BitSet(new long[]{0x0000000000000000L,0x0000050000008000L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group__2_in_rule__LetVariableCS__Group__146138 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_1_in_rule__LetVariableCS__Group__1__Impl46165 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group__2__Impl_in_rule__LetVariableCS__Group__246196 = new BitSet(new long[]{0x0000000000000000L,0x0000050000008000L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group__3_in_rule__LetVariableCS__Group__246199 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group_2__0_in_rule__LetVariableCS__Group__2__Impl46226 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group__3__Impl_in_rule__LetVariableCS__Group__346257 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group__4_in_rule__LetVariableCS__Group__346260 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_79_in_rule__LetVariableCS__Group__3__Impl46288 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group__4__Impl_in_rule__LetVariableCS__Group__446319 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__OwnedInitExpressionAssignment_4_in_rule__LetVariableCS__Group__4__Impl46346 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group_2__0__Impl_in_rule__LetVariableCS__Group_2__046386 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group_2__1_in_rule__LetVariableCS__Group_2__046389 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rule__LetVariableCS__Group_2__0__Impl46417 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__Group_2__1__Impl_in_rule__LetVariableCS__Group_2__146448 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__LetVariableCS__OwnedTypeAssignment_2_1_in_rule__LetVariableCS__Group_2__1__Impl46475 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NestedExpCS__Group__0__Impl_in_rule__NestedExpCS__Group__046509 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0xC21C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__NestedExpCS__Group__1_in_rule__NestedExpCS__Group__046512 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rule__NestedExpCS__Group__0__Impl46540 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NestedExpCS__Group__1__Impl_in_rule__NestedExpCS__Group__146571 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
+        public static final BitSet FOLLOW_rule__NestedExpCS__Group__2_in_rule__NestedExpCS__Group__146574 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NestedExpCS__OwnedExpressionAssignment_1_in_rule__NestedExpCS__Group__1__Impl46601 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__NestedExpCS__Group__2__Impl_in_rule__NestedExpCS__Group__246631 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rule__NestedExpCS__Group__2__Impl46659 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SelfExpCS__Group__0__Impl_in_rule__SelfExpCS__Group__046696 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
+        public static final BitSet FOLLOW_rule__SelfExpCS__Group__1_in_rule__SelfExpCS__Group__046699 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__SelfExpCS__Group__1__Impl_in_rule__SelfExpCS__Group__146757 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_127_in_rule__SelfExpCS__Group__1__Impl46785 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group__0__Impl_in_rule__MultiplicityBoundsCS__Group__046820 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group__1_in_rule__MultiplicityBoundsCS__Group__046823 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__LowerBoundAssignment_0_in_rule__MultiplicityBoundsCS__Group__0__Impl46850 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group__1__Impl_in_rule__MultiplicityBoundsCS__Group__146880 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group_1__0_in_rule__MultiplicityBoundsCS__Group__1__Impl46907 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group_1__0__Impl_in_rule__MultiplicityBoundsCS__Group_1__046942 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000100L});
+        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group_1__1_in_rule__MultiplicityBoundsCS__Group_1__046945 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_112_in_rule__MultiplicityBoundsCS__Group_1__0__Impl46973 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__Group_1__1__Impl_in_rule__MultiplicityBoundsCS__Group_1__147004 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityBoundsCS__UpperBoundAssignment_1_1_in_rule__MultiplicityBoundsCS__Group_1__1__Impl47031 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__0__Impl_in_rule__MultiplicityCS__Group__047065 = new BitSet(new long[]{0x0000000000000010L,0x0000008000000500L});
+        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__1_in_rule__MultiplicityCS__Group__047068 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_118_in_rule__MultiplicityCS__Group__0__Impl47096 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__1__Impl_in_rule__MultiplicityCS__Group__147127 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__2_in_rule__MultiplicityCS__Group__147130 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityCS__Alternatives_1_in_rule__MultiplicityCS__Group__1__Impl47157 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityCS__Group__2__Impl_in_rule__MultiplicityCS__Group__247187 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_119_in_rule__MultiplicityCS__Group__2__Impl47215 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PathNameCS__Group__0__Impl_in_rule__PathNameCS__Group__047252 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
+        public static final BitSet FOLLOW_rule__PathNameCS__Group__1_in_rule__PathNameCS__Group__047255 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PathNameCS__OwnedPathElementsAssignment_0_in_rule__PathNameCS__Group__0__Impl47282 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PathNameCS__Group__1__Impl_in_rule__PathNameCS__Group__147312 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PathNameCS__Group_1__0_in_rule__PathNameCS__Group__1__Impl47339 = new BitSet(new long[]{0x0000000000000002L,0x0000800000000000L});
+        public static final BitSet FOLLOW_rule__PathNameCS__Group_1__0__Impl_in_rule__PathNameCS__Group_1__047374 = new BitSet(new long[]{0x001FFFFFFFFE0180L,0x0000007FFE00003FL});
+        public static final BitSet FOLLOW_rule__PathNameCS__Group_1__1_in_rule__PathNameCS__Group_1__047377 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_111_in_rule__PathNameCS__Group_1__0__Impl47405 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PathNameCS__Group_1__1__Impl_in_rule__PathNameCS__Group_1__147436 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__PathNameCS__OwnedPathElementsAssignment_1_1_in_rule__PathNameCS__Group_1__1__Impl47463 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group__0__Impl_in_rule__TypeParameterCS__Group__047497 = new BitSet(new long[]{0x0000800010000000L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group__1_in_rule__TypeParameterCS__Group__047500 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__NameAssignment_0_in_rule__TypeParameterCS__Group__0__Impl47527 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group__1__Impl_in_rule__TypeParameterCS__Group__147557 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Alternatives_1_in_rule__TypeParameterCS__Group__1__Impl47584 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__0__Impl_in_rule__TypeParameterCS__Group_1_0__047619 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__1_in_rule__TypeParameterCS__Group_1_0__047622 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_28_in_rule__TypeParameterCS__Group_1_0__0__Impl47650 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__1__Impl_in_rule__TypeParameterCS__Group_1_0__147681 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__2_in_rule__TypeParameterCS__Group_1_0__147684 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_1_in_rule__TypeParameterCS__Group_1_0__1__Impl47711 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0__2__Impl_in_rule__TypeParameterCS__Group_1_0__247741 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0_2__0_in_rule__TypeParameterCS__Group_1_0__2__Impl47768 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000001L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0_2__0__Impl_in_rule__TypeParameterCS__Group_1_0_2__047805 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0_2__1_in_rule__TypeParameterCS__Group_1_0_2__047808 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_128_in_rule__TypeParameterCS__Group_1_0_2__0__Impl47836 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_0_2__1__Impl_in_rule__TypeParameterCS__Group_1_0_2__147867 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_1_in_rule__TypeParameterCS__Group_1_0_2__1__Impl47894 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_1__0__Impl_in_rule__TypeParameterCS__Group_1_1__047928 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_1__1_in_rule__TypeParameterCS__Group_1_1__047931 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_47_in_rule__TypeParameterCS__Group_1_1__0__Impl47959 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__Group_1_1__1__Impl_in_rule__TypeParameterCS__Group_1_1__147990 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypeParameterCS__OwnedSuperAssignment_1_1_1_in_rule__TypeParameterCS__Group_1_1__1__Impl48017 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypedTypeRefCS__Group__0__Impl_in_rule__TypedTypeRefCS__Group__048051 = new BitSet(new long[]{0x0000000000000000L,0x0000010000001000L});
+        public static final BitSet FOLLOW_rule__TypedTypeRefCS__Group__1_in_rule__TypedTypeRefCS__Group__048054 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypedTypeRefCS__OwnedPathNameAssignment_0_in_rule__TypedTypeRefCS__Group__0__Impl48081 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypedTypeRefCS__Group__1__Impl_in_rule__TypedTypeRefCS__Group__148111 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__TypedTypeRefCS__OwnedBindingAssignment_1_in_rule__TypedTypeRefCS__Group__1__Impl48138 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__0__Impl_in_rule__WildcardTypeRefCS__Group__048173 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C01FFFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__1_in_rule__WildcardTypeRefCS__Group__048176 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__1__Impl_in_rule__WildcardTypeRefCS__Group__148234 = new BitSet(new long[]{0x0000800010000000L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__2_in_rule__WildcardTypeRefCS__Group__148237 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_103_in_rule__WildcardTypeRefCS__Group__1__Impl48265 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group__2__Impl_in_rule__WildcardTypeRefCS__Group__248296 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Alternatives_2_in_rule__WildcardTypeRefCS__Group__2__Impl48323 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_0__0__Impl_in_rule__WildcardTypeRefCS__Group_2_0__048360 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_0__1_in_rule__WildcardTypeRefCS__Group_2_0__048363 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_28_in_rule__WildcardTypeRefCS__Group_2_0__0__Impl48391 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_0__1__Impl_in_rule__WildcardTypeRefCS__Group_2_0__148422 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_1_in_rule__WildcardTypeRefCS__Group_2_0__1__Impl48449 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_1__0__Impl_in_rule__WildcardTypeRefCS__Group_2_1__048483 = new BitSet(new long[]{0x001FFFFFFFFE01B0L,0x821C017FFE0001FFL,0x0000000000000018L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_1__1_in_rule__WildcardTypeRefCS__Group_2_1__048486 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_47_in_rule__WildcardTypeRefCS__Group_2_1__0__Impl48514 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__Group_2_1__1__Impl_in_rule__WildcardTypeRefCS__Group_2_1__148545 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_1_in_rule__WildcardTypeRefCS__Group_2_1__1__Impl48572 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_0__0_in_rule__AttributeCS__UnorderedGroup_048607 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsStaticAssignment_0_0_in_rule__AttributeCS__UnorderedGroup_0__Impl48694 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsDefinitionAssignment_0_1_in_rule__AttributeCS__UnorderedGroup_0__Impl48785 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_0__Impl_in_rule__AttributeCS__UnorderedGroup_0__048844 = new BitSet(new long[]{0x0000400001000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_0__1_in_rule__AttributeCS__UnorderedGroup_0__048847 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_0__Impl_in_rule__AttributeCS__UnorderedGroup_0__148872 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__0_in_rule__AttributeCS__UnorderedGroup_548900 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_0__0_in_rule__AttributeCS__UnorderedGroup_5__Impl48989 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49080 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_2__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49171 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_3__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49262 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_4__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49353 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_5__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49444 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_6__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49535 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_7__0_in_rule__AttributeCS__UnorderedGroup_5__Impl49626 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__049685 = new BitSet(new long[]{0x1F9E082020000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__1_in_rule__AttributeCS__UnorderedGroup_5__049688 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__149713 = new BitSet(new long[]{0x1F9E082020000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__2_in_rule__AttributeCS__UnorderedGroup_5__149716 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__249741 = new BitSet(new long[]{0x1F9E082020000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__3_in_rule__AttributeCS__UnorderedGroup_5__249744 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__349769 = new BitSet(new long[]{0x1F9E082020000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__4_in_rule__AttributeCS__UnorderedGroup_5__349772 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__449797 = new BitSet(new long[]{0x1F9E082020000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__5_in_rule__AttributeCS__UnorderedGroup_5__449800 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__549825 = new BitSet(new long[]{0x1F9E082020000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__6_in_rule__AttributeCS__UnorderedGroup_5__549828 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__649853 = new BitSet(new long[]{0x1F9E082020000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__7_in_rule__AttributeCS__UnorderedGroup_5__649856 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__Impl_in_rule__AttributeCS__UnorderedGroup_5__749881 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_0__0_in_rule__OperationCS__UnorderedGroup_049921 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__IsStaticAssignment_0_0_in_rule__OperationCS__UnorderedGroup_0__Impl50008 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__IsDefinitionAssignment_0_1_in_rule__OperationCS__UnorderedGroup_0__Impl50099 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_0__Impl_in_rule__OperationCS__UnorderedGroup_0__050158 = new BitSet(new long[]{0x0000400001000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_0__1_in_rule__OperationCS__UnorderedGroup_0__050161 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_0__Impl_in_rule__OperationCS__UnorderedGroup_0__150186 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9__0_in_rule__OperationCS__UnorderedGroup_950214 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_0__0_in_rule__OperationCS__UnorderedGroup_9__Impl50303 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__0_in_rule__OperationCS__UnorderedGroup_9__Impl50394 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_2__0_in_rule__OperationCS__UnorderedGroup_9__Impl50485 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9__Impl_in_rule__OperationCS__UnorderedGroup_9__050544 = new BitSet(new long[]{0x0104002000000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9__1_in_rule__OperationCS__UnorderedGroup_9__050547 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9__Impl_in_rule__OperationCS__UnorderedGroup_9__150572 = new BitSet(new long[]{0x0104002000000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9__2_in_rule__OperationCS__UnorderedGroup_9__150575 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9__Impl_in_rule__OperationCS__UnorderedGroup_9__250600 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__UnorderedGroup_2__0_in_rule__ParameterCS__UnorderedGroup_250630 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_0__0_in_rule__ParameterCS__UnorderedGroup_2__Impl50719 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_1__0_in_rule__ParameterCS__UnorderedGroup_2__Impl50810 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__UnorderedGroup_2__Impl_in_rule__ParameterCS__UnorderedGroup_2__050869 = new BitSet(new long[]{0x0004000000000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__UnorderedGroup_2__1_in_rule__ParameterCS__UnorderedGroup_2__050872 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__UnorderedGroup_2__Impl_in_rule__ParameterCS__UnorderedGroup_2__150897 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_0__0_in_rule__ReferenceCS__UnorderedGroup_050925 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsStaticAssignment_0_0_in_rule__ReferenceCS__UnorderedGroup_0__Impl51012 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsDefinitionAssignment_0_1_in_rule__ReferenceCS__UnorderedGroup_0__Impl51103 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_0__Impl_in_rule__ReferenceCS__UnorderedGroup_0__051162 = new BitSet(new long[]{0x0000400001000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_0__1_in_rule__ReferenceCS__UnorderedGroup_0__051165 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_0__Impl_in_rule__ReferenceCS__UnorderedGroup_0__151190 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__0_in_rule__ReferenceCS__UnorderedGroup_651218 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_0__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51307 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51398 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_2__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51489 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_3__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51580 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_4__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51671 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_5__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51762 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_6__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51853 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_7__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl51944 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_8__0_in_rule__ReferenceCS__UnorderedGroup_6__Impl52035 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__052094 = new BitSet(new long[]{0x9F5E282004000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__1_in_rule__ReferenceCS__UnorderedGroup_6__052097 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__152122 = new BitSet(new long[]{0x9F5E282004000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__2_in_rule__ReferenceCS__UnorderedGroup_6__152125 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__252150 = new BitSet(new long[]{0x9F5E282004000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__3_in_rule__ReferenceCS__UnorderedGroup_6__252153 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__352178 = new BitSet(new long[]{0x9F5E282004000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__4_in_rule__ReferenceCS__UnorderedGroup_6__352181 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__452206 = new BitSet(new long[]{0x9F5E282004000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__5_in_rule__ReferenceCS__UnorderedGroup_6__452209 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__552234 = new BitSet(new long[]{0x9F5E282004000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__6_in_rule__ReferenceCS__UnorderedGroup_6__552237 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__652262 = new BitSet(new long[]{0x9F5E282004000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__7_in_rule__ReferenceCS__UnorderedGroup_6__652265 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__752290 = new BitSet(new long[]{0x9F5E282004000002L,0x0000300000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__8_in_rule__ReferenceCS__UnorderedGroup_6__752293 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__Impl_in_rule__ReferenceCS__UnorderedGroup_6__852318 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLibraryCS_in_rule__TopLevelCS__OwnedLibrariesAssignment_252364 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleImportCS_in_rule__TopLevelCS__OwnedImportsAssignment_352395 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePackageCS_in_rule__TopLevelCS__OwnedPackagesAssignment_452426 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_20_in_rule__InvariantConstraintCS__IsCallableAssignment_052462 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_66_in_rule__InvariantConstraintCS__StereotypeAssignment_152506 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__InvariantConstraintCS__NameAssignment_2_052545 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__InvariantConstraintCS__OwnedMessageSpecificationAssignment_2_1_152576 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__InvariantConstraintCS__OwnedSpecificationAssignment_3_0_152607 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_39_in_rule__PostconditionConstraintCS__StereotypeAssignment_052643 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PostconditionConstraintCS__NameAssignment_1_052682 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__PostconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_152713 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__PostconditionConstraintCS__OwnedSpecificationAssignment_352744 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_40_in_rule__PreconditionConstraintCS__StereotypeAssignment_052780 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PreconditionConstraintCS__NameAssignment_1_052819 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__PreconditionConstraintCS__OwnedMessageSpecificationAssignment_1_1_152850 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__PreconditionConstraintCS__OwnedSpecificationAssignment_352881 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AnnotationCS__NameAlternatives_2_0_in_rule__AnnotationCS__NameAssignment_252912 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_rule__AnnotationCS__OwnedDetailsAssignment_3_152945 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_rule__AnnotationCS__OwnedDetailsAssignment_3_2_152976 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__AnnotationCS__OwnedAnnotationsAssignment_4_0_1_053007 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleModelElementCS_in_rule__AnnotationCS__OwnedContentsAssignment_4_0_1_153038 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleModelElementRefCS_in_rule__AnnotationCS__OwnedReferencesAssignment_4_0_1_253069 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_46_in_rule__AttributeCS__IsStaticAssignment_0_053105 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_24_in_rule__AttributeCS__IsDefinitionAssignment_0_153149 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__AttributeCS__NameAssignment_253188 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_rule__AttributeCS__OwnedTypeAssignment_3_153219 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__AttributeCS__DefaultAssignment_4_153250 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_26_in_rule__AttributeCS__IsDerivedAssignment_5_0_1_0_053286 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_29_in_rule__AttributeCS__IsIdAssignment_5_1_0_053330 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_37_in_rule__AttributeCS__IsOrderedAssignment_5_2_0_053374 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_43_in_rule__AttributeCS__IsReadonlyAssignment_5_3_0_053418 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_49_in_rule__AttributeCS__IsTransientAssignment_5_4_0_053462 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_129_in_rule__AttributeCS__IsNotUniqueAssignment_5_5_0_053506 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_51_in_rule__AttributeCS__IsUnsettableAssignment_5_6_0_053550 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_52_in_rule__AttributeCS__IsVolatileAssignment_5_7_0_0_053594 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__AttributeCS__OwnedAnnotationsAssignment_6_0_1_053633 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_1_353664 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__AttributeCS__OwnedDefaultExpressionsAssignment_6_0_1_2_353695 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_41_in_rule__DataTypeCS__IsPrimitiveAssignment_053731 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__DataTypeCS__NameAssignment_253770 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_rule__DataTypeCS__OwnedSignatureAssignment_353801 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DataTypeCS__InstanceClassNameAssignment_4_153832 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_68_in_rule__DataTypeCS__IsSerializableAssignment_5_1_053868 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__DataTypeCS__OwnedAnnotationsAssignment_6_0_1_053907 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_rule__DataTypeCS__OwnedConstraintsAssignment_6_0_1_153938 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DetailCS__NameAlternatives_0_0_in_rule__DetailCS__NameAssignment_053969 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__DetailCS__ValuesAlternatives_2_0_in_rule__DetailCS__ValuesAssignment_254002 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__DocumentationCS__ValueAssignment_254035 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_rule__DocumentationCS__OwnedDetailsAssignment_3_154066 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_rule__DocumentationCS__OwnedDetailsAssignment_3_2_154097 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__EnumerationCS__NameAssignment_154128 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_rule__EnumerationCS__OwnedSignatureAssignment_254159 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__EnumerationCS__InstanceClassNameAssignment_3_154190 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_68_in_rule__EnumerationCS__IsSerializableAssignment_4_1_054226 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__EnumerationCS__OwnedAnnotationsAssignment_5_0_1_054265 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_rule__EnumerationCS__OwnedLiteralsAssignment_5_0_1_154296 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_rule__EnumerationCS__OwnedConstraintsAssignment_5_0_1_254327 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__EnumerationLiteralCS__NameAssignment_0_0_154358 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationLiteralName_in_rule__EnumerationLiteralCS__NameAssignment_0_154389 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSIGNED_in_rule__EnumerationLiteralCS__ValueAssignment_1_154420 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__EnumerationLiteralCS__OwnedAnnotationsAssignment_2_0_154451 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ImportCS__NameAssignment_1_054482 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleURIPathNameCS_in_rule__ImportCS__OwnedPathNameAssignment_254513 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_130_in_rule__ImportCS__IsAllAssignment_354549 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__LibraryCS__NameAssignment_1_054588 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleURI_in_rule__LibraryCS__ReferredPackageAssignment_254623 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePathNameCS_in_rule__ModelElementRefCS__OwnedPathNameAssignment_154658 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_46_in_rule__OperationCS__IsStaticAssignment_0_054694 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_24_in_rule__OperationCS__IsDefinitionAssignment_0_154738 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_rule__OperationCS__OwnedSignatureAssignment_254777 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__OperationCS__NameAssignment_354808 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleParameterCS_in_rule__OperationCS__OwnedParametersAssignment_5_054839 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleParameterCS_in_rule__OperationCS__OwnedParametersAssignment_5_1_154870 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_rule__OperationCS__OwnedTypeAssignment_7_154901 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__OperationCS__OwnedExceptionsAssignment_8_154932 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__OperationCS__OwnedExceptionsAssignment_8_2_154963 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_26_in_rule__OperationCS__IsDerivedAssignment_9_0_1_0_054999 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_37_in_rule__OperationCS__IsOrderedAssignment_9_1_0_055043 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_129_in_rule__OperationCS__IsNotUniqueAssignment_9_2_0_0_055087 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__OperationCS__OwnedAnnotationsAssignment_10_0_1_055126 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePreconditionConstraintCS_in_rule__OperationCS__OwnedPreconditionsAssignment_10_0_1_155157 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__OperationCS__OwnedBodyExpressionsAssignment_10_0_1_2_355188 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePostconditionConstraintCS_in_rule__OperationCS__OwnedPostconditionsAssignment_10_0_1_355219 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PackageCS__NameAssignment_155250 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PackageCS__NsPrefixAssignment_2_155281 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleURI_in_rule__PackageCS__NsURIAssignment_3_155312 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__PackageCS__OwnedAnnotationsAssignment_4_0_1_055343 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePackageCS_in_rule__PackageCS__OwnedPackagesAssignment_4_0_1_155374 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleClassCS_in_rule__PackageCS__OwnedClassesAssignment_4_0_1_255405 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ParameterCS__NameAssignment_055436 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_rule__ParameterCS__OwnedTypeAssignment_1_155467 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_37_in_rule__ParameterCS__IsOrderedAssignment_2_0_1_0_055503 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_129_in_rule__ParameterCS__IsNotUniqueAssignment_2_1_0_0_055547 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__ParameterCS__OwnedAnnotationsAssignment_3_155586 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_46_in_rule__ReferenceCS__IsStaticAssignment_0_055622 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_24_in_rule__ReferenceCS__IsDefinitionAssignment_0_155666 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__NameAssignment_255705 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredOppositeAssignment_3_155740 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_rule__ReferenceCS__OwnedTypeAssignment_4_155775 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__ReferenceCS__DefaultAssignment_5_155806 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_22_in_rule__ReferenceCS__IsComposesAssignment_6_0_1_0_055842 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_26_in_rule__ReferenceCS__IsDerivedAssignment_6_1_0_055886 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_37_in_rule__ReferenceCS__IsOrderedAssignment_6_2_0_055930 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_43_in_rule__ReferenceCS__IsReadonlyAssignment_6_3_0_055974 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_45_in_rule__ReferenceCS__IsResolveAssignment_6_4_0_056018 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_49_in_rule__ReferenceCS__IsTransientAssignment_6_5_0_056062 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_129_in_rule__ReferenceCS__IsNotUniqueAssignment_6_6_0_056106 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_51_in_rule__ReferenceCS__IsUnsettableAssignment_6_7_0_056150 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_52_in_rule__ReferenceCS__IsVolatileAssignment_6_8_0_0_056194 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__ReferenceCS__OwnedAnnotationsAssignment_7_0_1_056233 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_156268 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ReferenceCS__ReferredKeysAssignment_7_0_1_1_2_156307 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_2_356342 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_rule__ReferenceCS__OwnedDefaultExpressionsAssignment_7_0_1_3_356373 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__SpecificationCS__OwnedExpressionAssignment_056404 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_UNQUOTED_STRING_in_rule__SpecificationCS__ExprStringAssignment_156435 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_17_in_rule__StructuredClassCS__IsAbstractAssignment_056471 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__StructuredClassCS__NameAssignment_256510 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_rule__StructuredClassCS__OwnedSignatureAssignment_356541 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_156572 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__StructuredClassCS__OwnedSuperTypesAssignment_4_2_156603 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_rule__StructuredClassCS__InstanceClassNameAssignment_5_156634 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_32_in_rule__StructuredClassCS__IsInterfaceAssignment_6_156670 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rule__StructuredClassCS__OwnedAnnotationsAssignment_7_0_1_056709 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleOperationCS_in_rule__StructuredClassCS__OwnedOperationsAssignment_7_0_1_156740 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_rule__StructuredClassCS__OwnedPropertiesAssignment_7_0_1_256771 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_rule__StructuredClassCS__OwnedConstraintsAssignment_7_0_1_356802 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_rule__SysMLCS__OwnedDetailsAssignment_2_0_056833 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_rule__SysMLCS__OwnedDetailsAssignment_2_1_1_056864 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleMultiplicityCS_in_rule__TypedMultiplicityRefCS__OwnedMultiplicityAssignment_156895 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_156926 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_0_2_156957 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_156988 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_rule__TemplateBindingCS__OwnedSubstitutionsAssignment_1_2_157019 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_0_157050 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_0_2_157081 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_1_157112 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeParameterCS_in_rule__TemplateSignatureCS__OwnedParametersAssignment_1_2_157143 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleURIFirstPathElementCS_in_rule__URIPathNameCS__OwnedPathElementsAssignment_057175 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNextPathElementCS_in_rule__URIPathNameCS__OwnedPathElementsAssignment_1_157206 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__URIFirstPathElementCS__ReferredElementAssignment_057241 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleURI_in_rule__URIFirstPathElementCS__ReferredElementAssignment_1_157280 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_rule__PrimitiveTypeCS__NameAssignment57315 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_rule__CollectionTypeCS__NameAssignment_057346 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__CollectionTypeCS__OwnedTypeAssignment_1_157377 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_89_in_rule__TupleTypeCS__NameAssignment_057413 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTuplePartCS_in_rule__TupleTypeCS__OwnedPartsAssignment_1_1_057452 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTuplePartCS_in_rule__TupleTypeCS__OwnedPartsAssignment_1_1_1_157483 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__TuplePartCS__NameAssignment_057514 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__TuplePartCS__OwnedTypeAssignment_257545 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_rule__CollectionLiteralExpCS__OwnedTypeAssignment_057576 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_057607 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_rule__CollectionLiteralExpCS__OwnedPartsAssignment_2_1_157638 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_0_057669 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__CollectionLiteralPartCS__OwnedLastExpressionAssignment_0_1_157700 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__CollectionLiteralPartCS__OwnedExpressionAssignment_157731 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_rule__CollectionPatternCS__OwnedTypeAssignment_057762 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__CollectionPatternCS__OwnedPartsAssignment_2_057793 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_rule__CollectionPatternCS__OwnedPartsAssignment_2_1_157824 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleIdentifier_in_rule__CollectionPatternCS__RestVariableNameAssignment_2_2_157855 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__ConstructorPartCS__ReferredPropertyAssignment_057890 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ConstructorPartCS__OwnedInitExpressionAlternatives_2_0_in_rule__ConstructorPartCS__OwnedInitExpressionAssignment_257925 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__PatternExpCS__PatternVariableNameAssignment_057958 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__PatternExpCS__OwnedPatternTypeAssignment_257989 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__LambdaLiteralExpCS__OwnedExpressionCSAssignment_258020 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_rule__TupleLiteralExpCS__OwnedPartsAssignment_258051 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_rule__TupleLiteralExpCS__OwnedPartsAssignment_3_158082 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__TupleLiteralPartCS__NameAssignment_058113 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__TupleLiteralPartCS__OwnedTypeAssignment_1_158144 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__TupleLiteralPartCS__OwnedInitExpressionAssignment_358175 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNUMBER_LITERAL_in_rule__NumberLiteralExpCS__SymbolAssignment58206 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStringLiteral_in_rule__StringLiteralExpCS__SegmentsAssignment58237 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_131_in_rule__BooleanLiteralExpCS__SymbolAssignment_058273 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_132_in_rule__BooleanLiteralExpCS__SymbolAssignment_158317 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleMultiplicityCS_in_rule__TypeLiteralWithMultiplicityCS__OwnedMultiplicityAssignment_158356 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_rule__TypeLiteralExpCS__OwnedTypeAssignment58387 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePathNameCS_in_rule__TypeNameExpCS__OwnedPathNameAssignment_058418 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_rule__TypeNameExpCS__OwnedCurlyBracketedClauseAssignment_1_058449 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__TypeNameExpCS__OwnedPatternGuardAssignment_1_1_158480 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleMultiplicityCS_in_rule__TypeExpCS__OwnedMultiplicityAssignment_158511 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleBinaryOperatorName_in_rule__ExpCS__NameAssignment_0_1_158542 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__ExpCS__OwnedRightAssignment_0_1_258573 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_rule__PrefixedLetExpCS__NameAssignment_0_158604 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_rule__PrefixedLetExpCS__OwnedRightAssignment_0_258635 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_rule__PrefixedPrimaryExpCS__NameAssignment_0_158666 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_rule__PrefixedPrimaryExpCS__OwnedRightAssignment_0_258697 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePathNameCS_in_rule__NameExpCS__OwnedPathNameAssignment_058728 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSquareBracketedClauseCS_in_rule__NameExpCS__OwnedSquareBracketedClausesAssignment_158759 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_rule__NameExpCS__OwnedRoundBracketedClauseAssignment_258790 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_rule__NameExpCS__OwnedCurlyBracketedClauseAssignment_358821 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_133_in_rule__NameExpCS__IsPreAssignment_4_058857 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleConstructorPartCS_in_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_058896 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleConstructorPartCS_in_rule__CurlyBracketedClauseCS__OwnedPartsAssignment_2_0_1_158927 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStringLiteral_in_rule__CurlyBracketedClauseCS__ValueAssignment_2_158958 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_058989 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_159020 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingSemiArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_059051 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_2_159082 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingBarArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_059113 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_rule__RoundBracketedClauseCS__OwnedArgumentsAssignment_2_3_159144 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__SquareBracketedClauseCS__OwnedTermsAssignment_159175 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__SquareBracketedClauseCS__OwnedTermsAssignment_2_159206 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingArgCS__OwnedNameExpressionAssignment_0_059237 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingArgCS__OwnedTypeAssignment_0_1_0_159268 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_0_2_159299 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingArgCS__OwnedInitExpressionAssignment_0_1_1_159330 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingArgCS__OwnedTypeAssignment_1_159361 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_134_in_rule__NavigatingBarArgCS__PrefixAssignment_059397 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingBarArgCS__OwnedNameExpressionAssignment_159436 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingBarArgCS__OwnedTypeAssignment_2_159467 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingBarArgCS__OwnedInitExpressionAssignment_2_2_159498 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rule__NavigatingCommaArgCS__PrefixAssignment_059534 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingCommaArgCS__OwnedNameExpressionAssignment_159573 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingCommaArgCS__OwnedTypeAssignment_2_0_159604 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_0_2_159635 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingCommaArgCS__OwnedInitExpressionAssignment_2_1_159666 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_rule__NavigatingSemiArgCS__PrefixAssignment_059702 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_rule__NavigatingSemiArgCS__OwnedNameExpressionAssignment_159741 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__NavigatingSemiArgCS__OwnedTypeAssignment_2_159772 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__NavigatingSemiArgCS__OwnedInitExpressionAssignment_2_2_159803 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__IfExpCS__OwnedConditionAlternatives_1_0_in_rule__IfExpCS__OwnedConditionAssignment_159834 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedThenExpressionAssignment_359867 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleElseIfThenExpCS_in_rule__IfExpCS__OwnedIfThenExpressionsAssignment_459898 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__IfExpCS__OwnedElseExpressionAssignment_659929 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__ElseIfThenExpCS__OwnedConditionAssignment_159960 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__ElseIfThenExpCS__OwnedThenExpressionAssignment_359991 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLetVariableCS_in_rule__LetExpCS__OwnedVariablesAssignment_160022 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLetVariableCS_in_rule__LetExpCS__OwnedVariablesAssignment_2_160053 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__LetExpCS__OwnedInExpressionAssignment_460084 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__LetVariableCS__NameAssignment_060115 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_rule__LetVariableCS__OwnedRoundBracketedClauseAssignment_160146 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rule__LetVariableCS__OwnedTypeAssignment_2_160177 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__LetVariableCS__OwnedInitExpressionAssignment_460208 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_rule__NestedExpCS__OwnedExpressionAssignment_160239 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLOWER_in_rule__MultiplicityBoundsCS__LowerBoundAssignment_060270 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUPPER_in_rule__MultiplicityBoundsCS__UpperBoundAssignment_1_160301 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__MultiplicityStringCS__StringBoundsAlternatives_0_in_rule__MultiplicityStringCS__StringBoundsAssignment60332 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleFirstPathElementCS_in_rule__PathNameCS__OwnedPathElementsAssignment_060365 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNextPathElementCS_in_rule__PathNameCS__OwnedPathElementsAssignment_1_160396 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__FirstPathElementCS__ReferredElementAssignment60431 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnreservedName_in_rule__NextPathElementCS__ReferredElementAssignment60470 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeRefCS_in_rule__TemplateParameterSubstitutionCS__OwnedActualParameterAssignment60505 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rule__TypeParameterCS__NameAssignment_060536 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_160567 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedExtendsAssignment_1_0_2_160598 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__TypeParameterCS__OwnedSuperAssignment_1_1_160629 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePathNameCS_in_rule__TypedTypeRefCS__OwnedPathNameAssignment_060660 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateBindingCS_in_rule__TypedTypeRefCS__OwnedBindingAssignment_160691 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__WildcardTypeRefCS__OwnedExtendsAssignment_2_0_160722 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_rule__WildcardTypeRefCS__OwnedSuperAssignment_2_1_160753 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_synpred158_InternalOCLinEcore11810 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ExpCS__Group_0__0_in_synpred159_InternalOCLinEcore11859 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_synpred166_InternalOCLinEcore12077 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_synpred167_InternalOCLinEcore12094 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_synpred169_InternalOCLinEcore12128 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5_in_synpred205_InternalOCLinEcore16575 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9_in_synpred245_InternalOCLinEcore23875 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__UnorderedGroup_2_in_synpred260_InternalOCLinEcore26688 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_synpred263_InternalOCLinEcore27121 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6_in_synpred270_InternalOCLinEcore27991 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_0__0_in_synpred350_InternalOCLinEcore48607 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__IsStaticAssignment_0_0_in_synpred351_InternalOCLinEcore48694 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_0__1_in_synpred352_InternalOCLinEcore48847 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_0__0_in_synpred353_InternalOCLinEcore48989 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_1__0_in_synpred354_InternalOCLinEcore49080 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_2__0_in_synpred355_InternalOCLinEcore49171 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_3__0_in_synpred356_InternalOCLinEcore49262 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_4__0_in_synpred357_InternalOCLinEcore49353 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_5__0_in_synpred358_InternalOCLinEcore49444 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__Group_5_6__0_in_synpred359_InternalOCLinEcore49535 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__1_in_synpred360_InternalOCLinEcore49688 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__2_in_synpred361_InternalOCLinEcore49716 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__3_in_synpred362_InternalOCLinEcore49744 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__4_in_synpred363_InternalOCLinEcore49772 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__5_in_synpred364_InternalOCLinEcore49800 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__6_in_synpred365_InternalOCLinEcore49828 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__AttributeCS__UnorderedGroup_5__7_in_synpred366_InternalOCLinEcore49856 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_0__0_in_synpred367_InternalOCLinEcore49921 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__IsStaticAssignment_0_0_in_synpred368_InternalOCLinEcore50008 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_0__1_in_synpred369_InternalOCLinEcore50161 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_0__0_in_synpred370_InternalOCLinEcore50303 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__Group_9_1__0_in_synpred371_InternalOCLinEcore50394 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9__1_in_synpred372_InternalOCLinEcore50547 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__OperationCS__UnorderedGroup_9__2_in_synpred373_InternalOCLinEcore50575 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__Group_2_0__0_in_synpred374_InternalOCLinEcore50719 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ParameterCS__UnorderedGroup_2__1_in_synpred375_InternalOCLinEcore50872 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_0__0_in_synpred376_InternalOCLinEcore50925 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__IsStaticAssignment_0_0_in_synpred377_InternalOCLinEcore51012 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_0__1_in_synpred378_InternalOCLinEcore51165 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_0__0_in_synpred379_InternalOCLinEcore51307 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_1__0_in_synpred380_InternalOCLinEcore51398 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_2__0_in_synpred381_InternalOCLinEcore51489 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_3__0_in_synpred382_InternalOCLinEcore51580 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_4__0_in_synpred383_InternalOCLinEcore51671 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_5__0_in_synpred384_InternalOCLinEcore51762 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_6__0_in_synpred385_InternalOCLinEcore51853 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__Group_6_7__0_in_synpred386_InternalOCLinEcore51944 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__1_in_synpred387_InternalOCLinEcore52097 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__2_in_synpred388_InternalOCLinEcore52125 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__3_in_synpred389_InternalOCLinEcore52153 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__4_in_synpred390_InternalOCLinEcore52181 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__5_in_synpred391_InternalOCLinEcore52209 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__6_in_synpred392_InternalOCLinEcore52237 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__7_in_synpred393_InternalOCLinEcore52265 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rule__ReferenceCS__UnorderedGroup_6__8_in_synpred394_InternalOCLinEcore52293 = new BitSet(new long[]{0x0000000000000002L});
     }
 
 
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/AbstractOCLinEcoreRuntimeModule.java b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/AbstractOCLinEcoreRuntimeModule.java
index 7288e31..fae42b4 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/AbstractOCLinEcoreRuntimeModule.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/AbstractOCLinEcoreRuntimeModule.java
@@ -94,6 +94,11 @@
 		return org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class;
 	}
 
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.IUnorderedGroupHelper> bindIUnorderedGroupHelper() {
+		return org.eclipse.xtext.parser.antlr.UnorderedGroupHelper.class;
+	}
+
 	// contributed by org.eclipse.xtext.generator.validation.JavaValidatorFragment
 	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends org.eclipse.ocl.xtext.oclinecore.validation.OCLinEcoreJavaValidator> bindOCLinEcoreJavaValidator() {
 		return org.eclipse.ocl.xtext.oclinecore.validation.OCLinEcoreJavaValidator.class;
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/OCLinEcore.xtextbin b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/OCLinEcore.xtextbin
index 9e4f129..f79e118 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/OCLinEcore.xtextbin
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/OCLinEcore.xtextbin
Binary files differ
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g
index 0f0a343..aa343b7 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g
@@ -28,6 +28,7 @@
 import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
 import org.eclipse.xtext.parser.antlr.XtextTokenStream;
 import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.IUnorderedGroupHelper.UnorderedGroupState;
 import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
 import org.eclipse.ocl.xtext.oclinecore.services.OCLinEcoreGrammarAccess;
 
@@ -1074,132 +1075,154 @@
 
 // Entry rule entryRuleAttributeCS
 entryRuleAttributeCS returns [EObject current=null] 
+	@init { 
+		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+			grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 
+			grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()
+		);
+	}
 	:
 	{ newCompositeNode(grammarAccess.getAttributeCSRule()); }
 	 iv_ruleAttributeCS=ruleAttributeCS 
 	 { $current=$iv_ruleAttributeCS.current; } 
 	 EOF 
 ;
+finally {
+	myUnorderedGroupState.restore();
+}
 
 // Rule AttributeCS
 ruleAttributeCS returns [EObject current=null] 
     @init { enterRule(); 
+		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+			grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 
+			grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()
+		);
     }
     @after { leaveRule(); }:
-((((
+((
+
 (
-		lv_qualifiers_0_0=	'static' 
+	{ 
+	  getUnorderedGroupHelper().enter(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+	}
+	(
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0);
+	 				}
+					({true}?=>(
+(
+		lv_isStatic_1_0=	'static' 
     {
-        newLeafNode(lv_qualifiers_0_0, grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0());
+        newLeafNode(lv_isStatic_1_0, grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_0_0, "static");
+       		setWithLastConsumed($current, "isStatic", true, "static");
 	    }
 
 )
-)(
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1);
+	 				}
+					({true}?=>(
 (
-		lv_qualifiers_1_0=	'definition' 
+		lv_isDefinition_2_0=	'definition' 
     {
-        newLeafNode(lv_qualifiers_1_0, grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0());
+        newLeafNode(lv_isDefinition_2_0, grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_1_0, "definition");
+       		setWithLastConsumed($current, "isDefinition", true, "definition");
 	    }
 
 )
-)?)
-    |((
-(
-		lv_qualifiers_2_0=	'definition' 
-    {
-        newLeafNode(lv_qualifiers_2_0, grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_2_0, "definition");
-	    }
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+	 				}
+ 				)
+			)  
 
+		)*	
+	)
 )
-)(
-(
-		lv_qualifiers_3_0=	'static' 
-    {
-        newLeafNode(lv_qualifiers_3_0, grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_3_0, "static");
-	    }
+	{ 
+	  getUnorderedGroupHelper().leave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+	}
 
-)
-)?))?	otherlv_4='attribute' 
+)	otherlv_3='attribute' 
     {
-    	newLeafNode(otherlv_4, grammarAccess.getAttributeCSAccess().getAttributeKeyword_1());
+    	newLeafNode(otherlv_3, grammarAccess.getAttributeCSAccess().getAttributeKeyword_1());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getAttributeCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
 	    }
-		lv_name_5_0=ruleUnrestrictedName		{
+		lv_name_4_0=ruleUnrestrictedName		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getAttributeCSRule());
 	        }
        		set(
        			$current, 
        			"name",
-        		lv_name_5_0, 
+        		lv_name_4_0, 
         		"UnrestrictedName");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)(	otherlv_6=':' 
+)(	otherlv_5=':' 
     {
-    	newLeafNode(otherlv_6, grammarAccess.getAttributeCSAccess().getColonKeyword_3_0());
+    	newLeafNode(otherlv_5, grammarAccess.getAttributeCSAccess().getColonKeyword_3_0());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getAttributeCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_3_1_0()); 
 	    }
-		lv_ownedType_7_0=ruleTypedMultiplicityRefCS		{
+		lv_ownedType_6_0=ruleTypedMultiplicityRefCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getAttributeCSRule());
 	        }
        		set(
        			$current, 
        			"ownedType",
-        		lv_ownedType_7_0, 
+        		lv_ownedType_6_0, 
         		"TypedMultiplicityRefCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))?(	otherlv_8='=' 
+))?(	otherlv_7='=' 
     {
-    	newLeafNode(otherlv_8, grammarAccess.getAttributeCSAccess().getEqualsSignKeyword_4_0());
+    	newLeafNode(otherlv_7, grammarAccess.getAttributeCSAccess().getEqualsSignKeyword_4_0());
     }
 (
 (
-		lv_default_9_0=RULE_SINGLE_QUOTED_STRING
+		lv_default_8_0=RULE_SINGLE_QUOTED_STRING
 		{
-			newLeafNode(lv_default_9_0, grammarAccess.getAttributeCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0()); 
+			newLeafNode(lv_default_8_0, grammarAccess.getAttributeCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0()); 
 		}
 		{
 	        if ($current==null) {
@@ -1208,304 +1231,350 @@
        		setWithLastConsumed(
        			$current, 
        			"default",
-        		lv_default_9_0, 
+        		lv_default_8_0, 
         		"SINGLE_QUOTED_STRING");
 	    }
 
 )
-))?(	otherlv_10='{' 
+))?(
+
+(
+	{ 
+	  getUnorderedGroupHelper().enter(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	}
+	(
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0);
+	 				}
+					({true}?=>(	otherlv_10='{' 
     {
-    	newLeafNode(otherlv_10, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0());
+    	newLeafNode(otherlv_10, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0());
     }
 (((
 (
-		lv_qualifiers_11_0=	'derived' 
+		lv_isDerived_11_0=	'derived' 
     {
-        newLeafNode(lv_qualifiers_11_0, grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0());
+        newLeafNode(lv_isDerived_11_0, grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_11_0, "derived");
+       		setWithLastConsumed($current, "isDerived", true, "derived");
 	    }
 
 )
 )
-    |(
+    |	otherlv_12='!derived' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1());
+    }
+)(	otherlv_13=',' 
+    {
+    	newLeafNode(otherlv_13, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1());
+    }
+)?)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_12_0=	'!derived' 
+		lv_isId_14_0=	'id' 
     {
-        newLeafNode(lv_qualifiers_12_0, grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0());
+        newLeafNode(lv_isId_14_0, grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_12_0, "!derived");
+       		setWithLastConsumed($current, "isId", true, "id");
 	    }
 
 )
 )
-    |(
+    |	otherlv_15='!id' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1());
+    }
+)(	otherlv_16=',' 
+    {
+    	newLeafNode(otherlv_16, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_13_0=	'id' 
+		lv_isOrdered_17_0=	'ordered' 
     {
-        newLeafNode(lv_qualifiers_13_0, grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0());
+        newLeafNode(lv_isOrdered_17_0, grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_13_0, "id");
+       		setWithLastConsumed($current, "isOrdered", true, "ordered");
 	    }
 
 )
 )
-    |(
+    |	otherlv_18='!ordered' 
+    {
+    	newLeafNode(otherlv_18, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1());
+    }
+)(	otherlv_19=',' 
+    {
+    	newLeafNode(otherlv_19, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_14_0=	'!id' 
+		lv_isReadonly_20_0=	'readonly' 
     {
-        newLeafNode(lv_qualifiers_14_0, grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0());
+        newLeafNode(lv_isReadonly_20_0, grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_14_0, "!id");
+       		setWithLastConsumed($current, "isReadonly", true, "readonly");
 	    }
 
 )
 )
-    |(
+    |	otherlv_21='!readonly' 
+    {
+    	newLeafNode(otherlv_21, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1());
+    }
+)(	otherlv_22=',' 
+    {
+    	newLeafNode(otherlv_22, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_15_0=	'ordered' 
+		lv_isTransient_23_0=	'transient' 
     {
-        newLeafNode(lv_qualifiers_15_0, grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0());
+        newLeafNode(lv_isTransient_23_0, grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_15_0, "ordered");
+       		setWithLastConsumed($current, "isTransient", true, "transient");
 	    }
 
 )
 )
-    |(
+    |	otherlv_24='!transient' 
+    {
+    	newLeafNode(otherlv_24, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1());
+    }
+)(	otherlv_25=',' 
+    {
+    	newLeafNode(otherlv_25, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_16_0=	'!ordered' 
+		lv_isNotUnique_26_0=	'!unique' 
     {
-        newLeafNode(lv_qualifiers_16_0, grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0());
+        newLeafNode(lv_isNotUnique_26_0, grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_16_0, "!ordered");
+       		setWithLastConsumed($current, "isNotUnique", true, "!unique");
 	    }
 
 )
 )
-    |(
+    |	otherlv_27='unique' 
+    {
+    	newLeafNode(otherlv_27, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1());
+    }
+)(	otherlv_28=',' 
+    {
+    	newLeafNode(otherlv_28, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_17_0=	'readonly' 
+		lv_isUnsettable_29_0=	'unsettable' 
     {
-        newLeafNode(lv_qualifiers_17_0, grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0());
+        newLeafNode(lv_isUnsettable_29_0, grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_17_0, "readonly");
+       		setWithLastConsumed($current, "isUnsettable", true, "unsettable");
 	    }
 
 )
 )
-    |(
+    |	otherlv_30='!unsettable' 
+    {
+    	newLeafNode(otherlv_30, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1());
+    }
+)(	otherlv_31=',' 
+    {
+    	newLeafNode(otherlv_31, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7);
+	 				}
+					({true}?=>((((
 (
-		lv_qualifiers_18_0=	'!readonly' 
+		lv_isVolatile_32_0=	'volatile' 
     {
-        newLeafNode(lv_qualifiers_18_0, grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0());
+        newLeafNode(lv_isVolatile_32_0, grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getAttributeCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_18_0, "!readonly");
+       		setWithLastConsumed($current, "isVolatile", true, "volatile");
 	    }
 
 )
 )
-    |(
-(
-		lv_qualifiers_19_0=	'transient' 
+    |	otherlv_33='!volatile' 
     {
-        newLeafNode(lv_qualifiers_19_0, grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0());
+    	newLeafNode(otherlv_33, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1());
     }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_19_0, "transient");
-	    }
+)(	otherlv_34=',' 
+    {
+    	newLeafNode(otherlv_34, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1());
+    }
+)?)?	otherlv_35='}' 
+    {
+    	newLeafNode(otherlv_35, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1());
+    }
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	 				}
+ 				)
+			)  
 
+		)+
+	  	{getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5())}?	
+	)
 )
-)
-    |(
-(
-		lv_qualifiers_20_0=	'!transient' 
-    {
-        newLeafNode(lv_qualifiers_20_0, grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_20_0, "!transient");
-	    }
+	{ 
+	  getUnorderedGroupHelper().leave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+	}
 
-)
-)
-    |(
-(
-		lv_qualifiers_21_0=	'unique' 
+)?((	otherlv_36='{' 
     {
-        newLeafNode(lv_qualifiers_21_0, grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_21_0, "unique");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_22_0=	'!unique' 
-    {
-        newLeafNode(lv_qualifiers_22_0, grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_22_0, "!unique");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_23_0=	'unsettable' 
-    {
-        newLeafNode(lv_qualifiers_23_0, grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_23_0, "unsettable");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_24_0=	'!unsettable' 
-    {
-        newLeafNode(lv_qualifiers_24_0, grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_24_0, "!unsettable");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_25_0=	'volatile' 
-    {
-        newLeafNode(lv_qualifiers_25_0, grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_25_0, "volatile");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_26_0=	'!volatile' 
-    {
-        newLeafNode(lv_qualifiers_26_0, grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAttributeCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_26_0, "!volatile");
-	    }
-
-)
-))(	otherlv_27=',' 
-    {
-    	newLeafNode(otherlv_27, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1());
-    }
-)?)+	otherlv_28='}' 
-    {
-    	newLeafNode(otherlv_28, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_2());
-    }
-)?((	otherlv_29='{' 
-    {
-    	newLeafNode(otherlv_29, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_6_0_0());
+    	newLeafNode(otherlv_36, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_6_0_0());
     }
 ((
 (
 		{ 
 	        newCompositeNode(grammarAccess.getAttributeCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_6_0_1_0_0()); 
 	    }
-		lv_ownedAnnotations_30_0=ruleAnnotationElementCS		{
+		lv_ownedAnnotations_37_0=ruleAnnotationElementCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getAttributeCSRule());
 	        }
        		add(
        			$current, 
        			"ownedAnnotations",
-        		lv_ownedAnnotations_30_0, 
+        		lv_ownedAnnotations_37_0, 
         		"AnnotationElementCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
 )
-    |(	otherlv_31='derivation' 
+    |(	otherlv_38='derivation' 
     {
-    	newLeafNode(otherlv_31, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0());
+    	newLeafNode(otherlv_38, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0());
     }
 (
 	{ 
@@ -1518,36 +1587,36 @@
     { 
         afterParserOrEnumRuleCall();
     }
-)?	otherlv_33=':' 
+)?	otherlv_40=':' 
     {
-    	newLeafNode(otherlv_33, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2());
+    	newLeafNode(otherlv_40, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_6_0_1_1_3_0()); 
 	    }
-		lv_ownedDefaultExpressions_34_0=ruleSpecificationCS		{
+		lv_ownedDefaultExpressions_41_0=ruleSpecificationCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getAttributeCSRule());
 	        }
        		add(
        			$current, 
        			"ownedDefaultExpressions",
-        		lv_ownedDefaultExpressions_34_0, 
+        		lv_ownedDefaultExpressions_41_0, 
         		"SpecificationCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)?	otherlv_35=';' 
+)?	otherlv_42=';' 
     {
-    	newLeafNode(otherlv_35, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4());
+    	newLeafNode(otherlv_42, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4());
     }
 )
-    |(	otherlv_36='initial' 
+    |(	otherlv_43='initial' 
     {
-    	newLeafNode(otherlv_36, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0());
+    	newLeafNode(otherlv_43, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0());
     }
 (
 	{ 
@@ -1560,43 +1629,46 @@
     { 
         afterParserOrEnumRuleCall();
     }
-)?	otherlv_38=':' 
+)?	otherlv_45=':' 
     {
-    	newLeafNode(otherlv_38, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2());
+    	newLeafNode(otherlv_45, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_6_0_1_2_3_0()); 
 	    }
-		lv_ownedDefaultExpressions_39_0=ruleSpecificationCS		{
+		lv_ownedDefaultExpressions_46_0=ruleSpecificationCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getAttributeCSRule());
 	        }
        		add(
        			$current, 
        			"ownedDefaultExpressions",
-        		lv_ownedDefaultExpressions_39_0, 
+        		lv_ownedDefaultExpressions_46_0, 
         		"SpecificationCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)?	otherlv_40=';' 
+)?	otherlv_47=';' 
     {
-    	newLeafNode(otherlv_40, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4());
+    	newLeafNode(otherlv_47, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4());
     }
-))*	otherlv_41='}' 
+))*	otherlv_48='}' 
     {
-    	newLeafNode(otherlv_41, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_6_0_2());
+    	newLeafNode(otherlv_48, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_6_0_2());
     }
 )
-    |	otherlv_42=';' 
+    |	otherlv_49=';' 
     {
-    	newLeafNode(otherlv_42, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_1());
+    	newLeafNode(otherlv_49, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_1());
     }
 ))
 ;
+finally {
+	myUnorderedGroupState.restore();
+}
 
 
 
@@ -2620,96 +2692,118 @@
 
 // Entry rule entryRuleOperationCS
 entryRuleOperationCS returns [EObject current=null] 
+	@init { 
+		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+			grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 
+			grammarAccess.getOperationCSAccess().getUnorderedGroup_9()
+		);
+	}
 	:
 	{ newCompositeNode(grammarAccess.getOperationCSRule()); }
 	 iv_ruleOperationCS=ruleOperationCS 
 	 { $current=$iv_ruleOperationCS.current; } 
 	 EOF 
 ;
+finally {
+	myUnorderedGroupState.restore();
+}
 
 // Rule OperationCS
 ruleOperationCS returns [EObject current=null] 
     @init { enterRule(); 
+		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+			grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 
+			grammarAccess.getOperationCSAccess().getUnorderedGroup_9()
+		);
     }
     @after { leaveRule(); }:
-((((
+((
+
 (
-		lv_qualifiers_0_0=	'static' 
+	{ 
+	  getUnorderedGroupHelper().enter(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+	}
+	(
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0);
+	 				}
+					({true}?=>(
+(
+		lv_isStatic_1_0=	'static' 
     {
-        newLeafNode(lv_qualifiers_0_0, grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0());
+        newLeafNode(lv_isStatic_1_0, grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getOperationCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_0_0, "static");
+       		setWithLastConsumed($current, "isStatic", true, "static");
 	    }
 
 )
-)(
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1);
+	 				}
+					({true}?=>(
 (
-		lv_qualifiers_1_0=	'definition' 
+		lv_isDefinition_2_0=	'definition' 
     {
-        newLeafNode(lv_qualifiers_1_0, grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0());
+        newLeafNode(lv_isDefinition_2_0, grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getOperationCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_1_0, "definition");
+       		setWithLastConsumed($current, "isDefinition", true, "definition");
 	    }
 
 )
-)?)
-    |((
-(
-		lv_qualifiers_2_0=	'definition' 
-    {
-        newLeafNode(lv_qualifiers_2_0, grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getOperationCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_2_0, "definition");
-	    }
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+	 				}
+ 				)
+			)  
 
+		)*	
+	)
 )
-)(
-(
-		lv_qualifiers_3_0=	'static' 
-    {
-        newLeafNode(lv_qualifiers_3_0, grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getOperationCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_3_0, "static");
-	    }
+	{ 
+	  getUnorderedGroupHelper().leave(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+	}
 
-)
-)?))?	otherlv_4='operation' 
+)	otherlv_3='operation' 
     {
-    	newLeafNode(otherlv_4, grammarAccess.getOperationCSAccess().getOperationKeyword_1());
+    	newLeafNode(otherlv_3, grammarAccess.getOperationCSAccess().getOperationKeyword_1());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedSignatureTemplateSignatureCSParserRuleCall_2_0()); 
 	    }
-		lv_ownedSignature_5_0=ruleTemplateSignatureCS		{
+		lv_ownedSignature_4_0=ruleTemplateSignatureCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		set(
        			$current, 
        			"ownedSignature",
-        		lv_ownedSignature_5_0, 
+        		lv_ownedSignature_4_0, 
         		"TemplateSignatureCS");
 	        afterParserOrEnumRuleCall();
 	    }
@@ -2720,257 +2814,283 @@
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getNameUnrestrictedNameParserRuleCall_3_0()); 
 	    }
-		lv_name_6_0=ruleUnrestrictedName		{
+		lv_name_5_0=ruleUnrestrictedName		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		set(
        			$current, 
        			"name",
-        		lv_name_6_0, 
+        		lv_name_5_0, 
         		"UnrestrictedName");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)	otherlv_7='(' 
+)	otherlv_6='(' 
     {
-    	newLeafNode(otherlv_7, grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_4());
+    	newLeafNode(otherlv_6, grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_4());
     }
 ((
 (
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedParametersParameterCSParserRuleCall_5_0_0()); 
 	    }
-		lv_ownedParameters_8_0=ruleParameterCS		{
+		lv_ownedParameters_7_0=ruleParameterCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		add(
        			$current, 
        			"ownedParameters",
-        		lv_ownedParameters_8_0, 
+        		lv_ownedParameters_7_0, 
         		"ParameterCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)(	otherlv_9=',' 
+)(	otherlv_8=',' 
     {
-    	newLeafNode(otherlv_9, grammarAccess.getOperationCSAccess().getCommaKeyword_5_1_0());
+    	newLeafNode(otherlv_8, grammarAccess.getOperationCSAccess().getCommaKeyword_5_1_0());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedParametersParameterCSParserRuleCall_5_1_1_0()); 
 	    }
-		lv_ownedParameters_10_0=ruleParameterCS		{
+		lv_ownedParameters_9_0=ruleParameterCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		add(
        			$current, 
        			"ownedParameters",
-        		lv_ownedParameters_10_0, 
+        		lv_ownedParameters_9_0, 
         		"ParameterCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))*)?	otherlv_11=')' 
+))*)?	otherlv_10=')' 
     {
-    	newLeafNode(otherlv_11, grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_6());
+    	newLeafNode(otherlv_10, grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_6());
     }
-(	otherlv_12=':' 
+(	otherlv_11=':' 
     {
-    	newLeafNode(otherlv_12, grammarAccess.getOperationCSAccess().getColonKeyword_7_0());
+    	newLeafNode(otherlv_11, grammarAccess.getOperationCSAccess().getColonKeyword_7_0());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_7_1_0()); 
 	    }
-		lv_ownedType_13_0=ruleTypedMultiplicityRefCS		{
+		lv_ownedType_12_0=ruleTypedMultiplicityRefCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		set(
        			$current, 
        			"ownedType",
-        		lv_ownedType_13_0, 
+        		lv_ownedType_12_0, 
         		"TypedMultiplicityRefCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))?(	otherlv_14='throws' 
+))?(	otherlv_13='throws' 
     {
-    	newLeafNode(otherlv_14, grammarAccess.getOperationCSAccess().getThrowsKeyword_8_0());
+    	newLeafNode(otherlv_13, grammarAccess.getOperationCSAccess().getThrowsKeyword_8_0());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedExceptionsTypedRefCSParserRuleCall_8_1_0()); 
 	    }
-		lv_ownedExceptions_15_0=ruleTypedRefCS		{
+		lv_ownedExceptions_14_0=ruleTypedRefCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		add(
        			$current, 
        			"ownedExceptions",
-        		lv_ownedExceptions_15_0, 
+        		lv_ownedExceptions_14_0, 
         		"TypedRefCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)(	otherlv_16=',' 
+)(	otherlv_15=',' 
     {
-    	newLeafNode(otherlv_16, grammarAccess.getOperationCSAccess().getCommaKeyword_8_2_0());
+    	newLeafNode(otherlv_15, grammarAccess.getOperationCSAccess().getCommaKeyword_8_2_0());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedExceptionsTypedRefCSParserRuleCall_8_2_1_0()); 
 	    }
-		lv_ownedExceptions_17_0=ruleTypedRefCS		{
+		lv_ownedExceptions_16_0=ruleTypedRefCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		add(
        			$current, 
        			"ownedExceptions",
-        		lv_ownedExceptions_17_0, 
+        		lv_ownedExceptions_16_0, 
         		"TypedRefCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))*)?(	otherlv_18='{' 
+))*)?(
+
+(
+	{ 
+	  getUnorderedGroupHelper().enter(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+	}
+	(
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0);
+	 				}
+					({true}?=>(	otherlv_18='{' 
     {
-    	newLeafNode(otherlv_18, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0());
+    	newLeafNode(otherlv_18, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0());
     }
 (((
 (
-		lv_qualifiers_19_0=	'derived' 
+		lv_isDerived_19_0=	'derived' 
     {
-        newLeafNode(lv_qualifiers_19_0, grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0());
+        newLeafNode(lv_isDerived_19_0, grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getOperationCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_19_0, "derived");
+       		setWithLastConsumed($current, "isDerived", true, "derived");
 	    }
 
 )
 )
-    |(
+    |	otherlv_20='!derived' 
+    {
+    	newLeafNode(otherlv_20, grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1());
+    }
+)(	otherlv_21=',' 
+    {
+    	newLeafNode(otherlv_21, grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1());
+    }
+)?)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_20_0=	'!derived' 
+		lv_isOrdered_22_0=	'ordered' 
     {
-        newLeafNode(lv_qualifiers_20_0, grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0());
+        newLeafNode(lv_isOrdered_22_0, grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getOperationCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_20_0, "!derived");
+       		setWithLastConsumed($current, "isOrdered", true, "ordered");
 	    }
 
 )
 )
-    |(
+    |	otherlv_23='!ordered' 
+    {
+    	newLeafNode(otherlv_23, grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1());
+    }
+)(	otherlv_24=',' 
+    {
+    	newLeafNode(otherlv_24, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2);
+	 				}
+					({true}?=>((((
 (
-		lv_qualifiers_21_0=	'ordered' 
+		lv_isNotUnique_25_0=	'!unique' 
     {
-        newLeafNode(lv_qualifiers_21_0, grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0());
+        newLeafNode(lv_isNotUnique_25_0, grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getOperationCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_21_0, "ordered");
+       		setWithLastConsumed($current, "isNotUnique", true, "!unique");
 	    }
 
 )
 )
-    |(
-(
-		lv_qualifiers_22_0=	'!ordered' 
+    |	otherlv_26='unique' 
     {
-        newLeafNode(lv_qualifiers_22_0, grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0());
+    	newLeafNode(otherlv_26, grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1());
     }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getOperationCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_22_0, "!ordered");
-	    }
+)(	otherlv_27=',' 
+    {
+    	newLeafNode(otherlv_27, grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1());
+    }
+)?)?	otherlv_28='}' 
+    {
+    	newLeafNode(otherlv_28, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1());
+    }
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+	 				}
+ 				)
+			)  
 
+		)+
+	  	{getUnorderedGroupHelper().canLeave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9())}?	
+	)
 )
-)
-    |(
-(
-		lv_qualifiers_23_0=	'unique' 
-    {
-        newLeafNode(lv_qualifiers_23_0, grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getOperationCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_23_0, "unique");
-	    }
+	{ 
+	  getUnorderedGroupHelper().leave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+	}
 
-)
-)
-    |(
-(
-		lv_qualifiers_24_0=	'!unique' 
+)?((	otherlv_29='{' 
     {
-        newLeafNode(lv_qualifiers_24_0, grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getOperationCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_24_0, "!unique");
-	    }
-
-)
-))(	otherlv_25=',' 
-    {
-    	newLeafNode(otherlv_25, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1());
-    }
-)?)+	otherlv_26='}' 
-    {
-    	newLeafNode(otherlv_26, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2());
-    }
-)?((	otherlv_27='{' 
-    {
-    	newLeafNode(otherlv_27, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_10_0_0());
+    	newLeafNode(otherlv_29, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_10_0_0());
     }
 ((
 (
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_10_0_1_0_0()); 
 	    }
-		lv_ownedAnnotations_28_0=ruleAnnotationElementCS		{
+		lv_ownedAnnotations_30_0=ruleAnnotationElementCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		add(
        			$current, 
        			"ownedAnnotations",
-        		lv_ownedAnnotations_28_0, 
+        		lv_ownedAnnotations_30_0, 
         		"AnnotationElementCS");
 	        afterParserOrEnumRuleCall();
 	    }
@@ -2982,23 +3102,23 @@
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedPreconditionsPreconditionConstraintCSParserRuleCall_10_0_1_1_0()); 
 	    }
-		lv_ownedPreconditions_29_0=rulePreconditionConstraintCS		{
+		lv_ownedPreconditions_31_0=rulePreconditionConstraintCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		add(
        			$current, 
        			"ownedPreconditions",
-        		lv_ownedPreconditions_29_0, 
+        		lv_ownedPreconditions_31_0, 
         		"PreconditionConstraintCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
 )
-    |(	otherlv_30='body' 
+    |(	otherlv_32='body' 
     {
-    	newLeafNode(otherlv_30, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0());
+    	newLeafNode(otherlv_32, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0());
     }
 (
 	{ 
@@ -3011,31 +3131,31 @@
     { 
         afterParserOrEnumRuleCall();
     }
-)?	otherlv_32=':' 
+)?	otherlv_34=':' 
     {
-    	newLeafNode(otherlv_32, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2());
+    	newLeafNode(otherlv_34, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedBodyExpressionsSpecificationCSParserRuleCall_10_0_1_2_3_0()); 
 	    }
-		lv_ownedBodyExpressions_33_0=ruleSpecificationCS		{
+		lv_ownedBodyExpressions_35_0=ruleSpecificationCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		add(
        			$current, 
        			"ownedBodyExpressions",
-        		lv_ownedBodyExpressions_33_0, 
+        		lv_ownedBodyExpressions_35_0, 
         		"SpecificationCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)?	otherlv_34=';' 
+)?	otherlv_36=';' 
     {
-    	newLeafNode(otherlv_34, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4());
+    	newLeafNode(otherlv_36, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4());
     }
 )
     |(
@@ -3043,30 +3163,33 @@
 		{ 
 	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedPostconditionsPostconditionConstraintCSParserRuleCall_10_0_1_3_0()); 
 	    }
-		lv_ownedPostconditions_35_0=rulePostconditionConstraintCS		{
+		lv_ownedPostconditions_37_0=rulePostconditionConstraintCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getOperationCSRule());
 	        }
        		add(
        			$current, 
        			"ownedPostconditions",
-        		lv_ownedPostconditions_35_0, 
+        		lv_ownedPostconditions_37_0, 
         		"PostconditionConstraintCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))*	otherlv_36='}' 
+))*	otherlv_38='}' 
     {
-    	newLeafNode(otherlv_36, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_10_0_2());
+    	newLeafNode(otherlv_38, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_10_0_2());
     }
 )
-    |	otherlv_37=';' 
+    |	otherlv_39=';' 
     {
-    	newLeafNode(otherlv_37, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_1());
+    	newLeafNode(otherlv_39, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_1());
     }
 ))
 ;
+finally {
+	myUnorderedGroupState.restore();
+}
 
 
 
@@ -3230,16 +3353,27 @@
 
 // Entry rule entryRuleParameterCS
 entryRuleParameterCS returns [EObject current=null] 
+	@init { 
+		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+			grammarAccess.getParameterCSAccess().getUnorderedGroup_2()
+		);
+	}
 	:
 	{ newCompositeNode(grammarAccess.getParameterCSRule()); }
 	 iv_ruleParameterCS=ruleParameterCS 
 	 { $current=$iv_ruleParameterCS.current; } 
 	 EOF 
 ;
+finally {
+	myUnorderedGroupState.restore();
+}
 
 // Rule ParameterCS
 ruleParameterCS returns [EObject current=null] 
     @init { enterRule(); 
+		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+			grammarAccess.getParameterCSAccess().getUnorderedGroup_2()
+		);
     }
     @after { leaveRule(); }:
 ((
@@ -3282,109 +3416,134 @@
 	    }
 
 )
-))?(	otherlv_3='{' 
+))?(
+
+(
+	{ 
+	  getUnorderedGroupHelper().enter(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+	}
+	(
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0);
+	 				}
+					({true}?=>(	otherlv_4='{' 
     {
-    	newLeafNode(otherlv_3, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0());
+    	newLeafNode(otherlv_4, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0_0());
     }
 (((
 (
-		lv_qualifiers_4_0=	'ordered' 
+		lv_isOrdered_5_0=	'ordered' 
     {
-        newLeafNode(lv_qualifiers_4_0, grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0());
+        newLeafNode(lv_isOrdered_5_0, grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getParameterCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_4_0, "ordered");
+       		setWithLastConsumed($current, "isOrdered", true, "ordered");
 	    }
 
 )
 )
-    |(
+    |	otherlv_6='!ordered' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getParameterCSAccess().getOrderedKeyword_2_0_1_0_1());
+    }
+)(	otherlv_7=',' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getParameterCSAccess().getCommaKeyword_2_0_1_1());
+    }
+)?)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1);
+	 				}
+					({true}?=>((((
 (
-		lv_qualifiers_5_0=	'!ordered' 
+		lv_isNotUnique_8_0=	'!unique' 
     {
-        newLeafNode(lv_qualifiers_5_0, grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0());
+        newLeafNode(lv_isNotUnique_8_0, grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getParameterCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_5_0, "!ordered");
+       		setWithLastConsumed($current, "isNotUnique", true, "!unique");
 	    }
 
 )
 )
-    |(
-(
-		lv_qualifiers_6_0=	'unique' 
+    |	otherlv_9='unique' 
     {
-        newLeafNode(lv_qualifiers_6_0, grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0());
+    	newLeafNode(otherlv_9, grammarAccess.getParameterCSAccess().getUniqueKeyword_2_1_0_0_1());
     }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getParameterCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_6_0, "unique");
-	    }
+)(	otherlv_10=',' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_0_1());
+    }
+)?)?	otherlv_11='}' 
+    {
+    	newLeafNode(otherlv_11, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_1_1());
+    }
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+	 				}
+ 				)
+			)  
 
+		)+
+	  	{getUnorderedGroupHelper().canLeave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2())}?	
+	)
 )
-)
-    |(
-(
-		lv_qualifiers_7_0=	'!unique' 
-    {
-        newLeafNode(lv_qualifiers_7_0, grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getParameterCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_7_0, "!unique");
-	    }
+	{ 
+	  getUnorderedGroupHelper().leave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+	}
 
-)
-))(	otherlv_8=',' 
+)?(	otherlv_12='{' 
     {
-    	newLeafNode(otherlv_8, grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_1());
-    }
-)?)+	otherlv_9='}' 
-    {
-    	newLeafNode(otherlv_9, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_2());
-    }
-)?(	otherlv_10='{' 
-    {
-    	newLeafNode(otherlv_10, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_3_0());
+    	newLeafNode(otherlv_12, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_3_0());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getParameterCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_3_1_0()); 
 	    }
-		lv_ownedAnnotations_11_0=ruleAnnotationElementCS		{
+		lv_ownedAnnotations_13_0=ruleAnnotationElementCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getParameterCSRule());
 	        }
        		add(
        			$current, 
        			"ownedAnnotations",
-        		lv_ownedAnnotations_11_0, 
+        		lv_ownedAnnotations_13_0, 
         		"AnnotationElementCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)*	otherlv_12='}' 
+)*	otherlv_14='}' 
     {
-    	newLeafNode(otherlv_12, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_3_2());
+    	newLeafNode(otherlv_14, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_3_2());
     }
 )?)
 ;
+finally {
+	myUnorderedGroupState.restore();
+}
 
 
 
@@ -3392,104 +3551,126 @@
 
 // Entry rule entryRuleReferenceCS
 entryRuleReferenceCS returns [EObject current=null] 
+	@init { 
+		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+			grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 
+			grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()
+		);
+	}
 	:
 	{ newCompositeNode(grammarAccess.getReferenceCSRule()); }
 	 iv_ruleReferenceCS=ruleReferenceCS 
 	 { $current=$iv_ruleReferenceCS.current; } 
 	 EOF 
 ;
+finally {
+	myUnorderedGroupState.restore();
+}
 
 // Rule ReferenceCS
 ruleReferenceCS returns [EObject current=null] 
     @init { enterRule(); 
+		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+			grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 
+			grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()
+		);
     }
     @after { leaveRule(); }:
-((((
+((
+
 (
-		lv_qualifiers_0_0=	'static' 
+	{ 
+	  getUnorderedGroupHelper().enter(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+	}
+	(
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0);
+	 				}
+					({true}?=>(
+(
+		lv_isStatic_1_0=	'static' 
     {
-        newLeafNode(lv_qualifiers_0_0, grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0());
+        newLeafNode(lv_isStatic_1_0, grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_0_0, "static");
+       		setWithLastConsumed($current, "isStatic", true, "static");
 	    }
 
 )
-)(
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1);
+	 				}
+					({true}?=>(
 (
-		lv_qualifiers_1_0=	'definition' 
+		lv_isDefinition_2_0=	'definition' 
     {
-        newLeafNode(lv_qualifiers_1_0, grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0());
+        newLeafNode(lv_isDefinition_2_0, grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_1_0, "definition");
+       		setWithLastConsumed($current, "isDefinition", true, "definition");
 	    }
 
 )
-)?)
-    |((
-(
-		lv_qualifiers_2_0=	'definition' 
-    {
-        newLeafNode(lv_qualifiers_2_0, grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_2_0, "definition");
-	    }
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+	 				}
+ 				)
+			)  
 
+		)*	
+	)
 )
-)(
-(
-		lv_qualifiers_3_0=	'static' 
-    {
-        newLeafNode(lv_qualifiers_3_0, grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_3_0, "static");
-	    }
+	{ 
+	  getUnorderedGroupHelper().leave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+	}
 
-)
-)?))?	otherlv_4='property' 
+)	otherlv_3='property' 
     {
-    	newLeafNode(otherlv_4, grammarAccess.getReferenceCSAccess().getPropertyKeyword_1());
+    	newLeafNode(otherlv_3, grammarAccess.getReferenceCSAccess().getPropertyKeyword_1());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getReferenceCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
 	    }
-		lv_name_5_0=ruleUnrestrictedName		{
+		lv_name_4_0=ruleUnrestrictedName		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getReferenceCSRule());
 	        }
        		set(
        			$current, 
        			"name",
-        		lv_name_5_0, 
+        		lv_name_4_0, 
         		"UnrestrictedName");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)(	otherlv_6='#' 
+)(	otherlv_5='#' 
     {
-    	newLeafNode(otherlv_6, grammarAccess.getReferenceCSAccess().getNumberSignKeyword_3_0());
+    	newLeafNode(otherlv_5, grammarAccess.getReferenceCSAccess().getNumberSignKeyword_3_0());
     }
 (
 (
@@ -3509,37 +3690,37 @@
 	    }
 
 )
-))?(	otherlv_8=':' 
+))?(	otherlv_7=':' 
     {
-    	newLeafNode(otherlv_8, grammarAccess.getReferenceCSAccess().getColonKeyword_4_0());
+    	newLeafNode(otherlv_7, grammarAccess.getReferenceCSAccess().getColonKeyword_4_0());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getReferenceCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_4_1_0()); 
 	    }
-		lv_ownedType_9_0=ruleTypedMultiplicityRefCS		{
+		lv_ownedType_8_0=ruleTypedMultiplicityRefCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getReferenceCSRule());
 	        }
        		set(
        			$current, 
        			"ownedType",
-        		lv_ownedType_9_0, 
+        		lv_ownedType_8_0, 
         		"TypedMultiplicityRefCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))?(	otherlv_10='=' 
+))?(	otherlv_9='=' 
     {
-    	newLeafNode(otherlv_10, grammarAccess.getReferenceCSAccess().getEqualsSignKeyword_5_0());
+    	newLeafNode(otherlv_9, grammarAccess.getReferenceCSAccess().getEqualsSignKeyword_5_0());
     }
 (
 (
-		lv_default_11_0=RULE_SINGLE_QUOTED_STRING
+		lv_default_10_0=RULE_SINGLE_QUOTED_STRING
 		{
-			newLeafNode(lv_default_11_0, grammarAccess.getReferenceCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0()); 
+			newLeafNode(lv_default_10_0, grammarAccess.getReferenceCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0()); 
 		}
 		{
 	        if ($current==null) {
@@ -3548,336 +3729,386 @@
        		setWithLastConsumed(
        			$current, 
        			"default",
-        		lv_default_11_0, 
+        		lv_default_10_0, 
         		"SINGLE_QUOTED_STRING");
 	    }
 
 )
-))?(	otherlv_12='{' 
+))?(
+
+(
+	{ 
+	  getUnorderedGroupHelper().enter(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	}
+	(
+		(
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0);
+	 				}
+					({true}?=>(	otherlv_12='{' 
     {
-    	newLeafNode(otherlv_12, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0());
+    	newLeafNode(otherlv_12, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0());
     }
 (((
 (
-		lv_qualifiers_13_0=	'composes' 
+		lv_isComposes_13_0=	'composes' 
     {
-        newLeafNode(lv_qualifiers_13_0, grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0());
+        newLeafNode(lv_isComposes_13_0, grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_13_0, "composes");
+       		setWithLastConsumed($current, "isComposes", true, "composes");
 	    }
 
 )
 )
-    |(
+    |	otherlv_14='!composes' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1());
+    }
+)(	otherlv_15=',' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1());
+    }
+)?)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_14_0=	'!composes' 
+		lv_isDerived_16_0=	'derived' 
     {
-        newLeafNode(lv_qualifiers_14_0, grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0());
+        newLeafNode(lv_isDerived_16_0, grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_14_0, "!composes");
+       		setWithLastConsumed($current, "isDerived", true, "derived");
 	    }
 
 )
 )
-    |(
+    |	otherlv_17='!derived' 
+    {
+    	newLeafNode(otherlv_17, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1());
+    }
+)(	otherlv_18=',' 
+    {
+    	newLeafNode(otherlv_18, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_15_0=	'derived' 
+		lv_isOrdered_19_0=	'ordered' 
     {
-        newLeafNode(lv_qualifiers_15_0, grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0());
+        newLeafNode(lv_isOrdered_19_0, grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_15_0, "derived");
+       		setWithLastConsumed($current, "isOrdered", true, "ordered");
 	    }
 
 )
 )
-    |(
+    |	otherlv_20='!ordered' 
+    {
+    	newLeafNode(otherlv_20, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1());
+    }
+)(	otherlv_21=',' 
+    {
+    	newLeafNode(otherlv_21, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_16_0=	'!derived' 
+		lv_isReadonly_22_0=	'readonly' 
     {
-        newLeafNode(lv_qualifiers_16_0, grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0());
+        newLeafNode(lv_isReadonly_22_0, grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_16_0, "!derived");
+       		setWithLastConsumed($current, "isReadonly", true, "readonly");
 	    }
 
 )
 )
-    |(
+    |	otherlv_23='!readonly' 
+    {
+    	newLeafNode(otherlv_23, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1());
+    }
+)(	otherlv_24=',' 
+    {
+    	newLeafNode(otherlv_24, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_17_0=	'ordered' 
+		lv_isResolve_25_0=	'resolve' 
     {
-        newLeafNode(lv_qualifiers_17_0, grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0());
+        newLeafNode(lv_isResolve_25_0, grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_17_0, "ordered");
+       		setWithLastConsumed($current, "isResolve", true, "resolve");
 	    }
 
 )
 )
-    |(
+    |	otherlv_26='!resolve' 
+    {
+    	newLeafNode(otherlv_26, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1());
+    }
+)(	otherlv_27=',' 
+    {
+    	newLeafNode(otherlv_27, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_18_0=	'!ordered' 
+		lv_isTransient_28_0=	'transient' 
     {
-        newLeafNode(lv_qualifiers_18_0, grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0());
+        newLeafNode(lv_isTransient_28_0, grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_18_0, "!ordered");
+       		setWithLastConsumed($current, "isTransient", true, "transient");
 	    }
 
 )
 )
-    |(
+    |	otherlv_29='!transient' 
+    {
+    	newLeafNode(otherlv_29, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1());
+    }
+)(	otherlv_30=',' 
+    {
+    	newLeafNode(otherlv_30, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_19_0=	'readonly' 
+		lv_isNotUnique_31_0=	'!unique' 
     {
-        newLeafNode(lv_qualifiers_19_0, grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0());
+        newLeafNode(lv_isNotUnique_31_0, grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_19_0, "readonly");
+       		setWithLastConsumed($current, "isNotUnique", true, "!unique");
 	    }
 
 )
 )
-    |(
+    |	otherlv_32='unique' 
+    {
+    	newLeafNode(otherlv_32, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1());
+    }
+)(	otherlv_33=',' 
+    {
+    	newLeafNode(otherlv_33, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7);
+	 				}
+					({true}?=>(((
 (
-		lv_qualifiers_20_0=	'!readonly' 
+		lv_isUnsettable_34_0=	'unsettable' 
     {
-        newLeafNode(lv_qualifiers_20_0, grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0());
+        newLeafNode(lv_isUnsettable_34_0, grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_20_0, "!readonly");
+       		setWithLastConsumed($current, "isUnsettable", true, "unsettable");
 	    }
 
 )
 )
-    |(
+    |	otherlv_35='!unsettable' 
+    {
+    	newLeafNode(otherlv_35, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1());
+    }
+)(	otherlv_36=',' 
+    {
+    	newLeafNode(otherlv_36, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1());
+    }
+)?))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	 				}
+ 				)
+			)  |
+
+			( 
+				{getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8)}?=>(
+					{ 
+	 				  getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8);
+	 				}
+					({true}?=>((((
 (
-		lv_qualifiers_21_0=	'resolve' 
+		lv_isVolatile_37_0=	'volatile' 
     {
-        newLeafNode(lv_qualifiers_21_0, grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0());
+        newLeafNode(lv_isVolatile_37_0, grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0());
     }
  
 	    {
 	        if ($current==null) {
 	            $current = createModelElement(grammarAccess.getReferenceCSRule());
 	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_21_0, "resolve");
+       		setWithLastConsumed($current, "isVolatile", true, "volatile");
 	    }
 
 )
 )
-    |(
-(
-		lv_qualifiers_22_0=	'!resolve' 
+    |	otherlv_38='!volatile' 
     {
-        newLeafNode(lv_qualifiers_22_0, grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0());
+    	newLeafNode(otherlv_38, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1());
     }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_22_0, "!resolve");
-	    }
+)(	otherlv_39=',' 
+    {
+    	newLeafNode(otherlv_39, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1());
+    }
+)?)?	otherlv_40='}' 
+    {
+    	newLeafNode(otherlv_40, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1());
+    }
+))
+					{ 
+	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	 				}
+ 				)
+			)  
 
+		)+
+	  	{getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6())}?	
+	)
 )
-)
-    |(
-(
-		lv_qualifiers_23_0=	'transient' 
-    {
-        newLeafNode(lv_qualifiers_23_0, grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_23_0, "transient");
-	    }
+	{ 
+	  getUnorderedGroupHelper().leave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+	}
 
-)
-)
-    |(
-(
-		lv_qualifiers_24_0=	'!transient' 
+)?((	otherlv_41='{' 
     {
-        newLeafNode(lv_qualifiers_24_0, grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_24_0, "!transient");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_25_0=	'unique' 
-    {
-        newLeafNode(lv_qualifiers_25_0, grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_25_0, "unique");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_26_0=	'!unique' 
-    {
-        newLeafNode(lv_qualifiers_26_0, grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_26_0, "!unique");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_27_0=	'unsettable' 
-    {
-        newLeafNode(lv_qualifiers_27_0, grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_27_0, "unsettable");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_28_0=	'!unsettable' 
-    {
-        newLeafNode(lv_qualifiers_28_0, grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_28_0, "!unsettable");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_29_0=	'volatile' 
-    {
-        newLeafNode(lv_qualifiers_29_0, grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_29_0, "volatile");
-	    }
-
-)
-)
-    |(
-(
-		lv_qualifiers_30_0=	'!volatile' 
-    {
-        newLeafNode(lv_qualifiers_30_0, grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getReferenceCSRule());
-	        }
-       		addWithLastConsumed($current, "qualifiers", lv_qualifiers_30_0, "!volatile");
-	    }
-
-)
-))(	otherlv_31=',' 
-    {
-    	newLeafNode(otherlv_31, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1());
-    }
-)?)+	otherlv_32='}' 
-    {
-    	newLeafNode(otherlv_32, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_2());
-    }
-)?((	otherlv_33='{' 
-    {
-    	newLeafNode(otherlv_33, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_7_0_0());
+    	newLeafNode(otherlv_41, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_7_0_0());
     }
 ((
 (
 		{ 
 	        newCompositeNode(grammarAccess.getReferenceCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_7_0_1_0_0()); 
 	    }
-		lv_ownedAnnotations_34_0=ruleAnnotationElementCS		{
+		lv_ownedAnnotations_42_0=ruleAnnotationElementCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getReferenceCSRule());
 	        }
        		add(
        			$current, 
        			"ownedAnnotations",
-        		lv_ownedAnnotations_34_0, 
+        		lv_ownedAnnotations_42_0, 
         		"AnnotationElementCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
 )
-    |(	otherlv_35='key' 
+    |(	otherlv_43='key' 
     {
-    	newLeafNode(otherlv_35, grammarAccess.getReferenceCSAccess().getKeyKeyword_7_0_1_1_0());
+    	newLeafNode(otherlv_43, grammarAccess.getReferenceCSAccess().getKeyKeyword_7_0_1_1_0());
     }
 (
 (
@@ -3897,9 +4128,9 @@
 	    }
 
 )
-)(	otherlv_37=',' 
+)(	otherlv_45=',' 
     {
-    	newLeafNode(otherlv_37, grammarAccess.getReferenceCSAccess().getCommaKeyword_7_0_1_1_2_0());
+    	newLeafNode(otherlv_45, grammarAccess.getReferenceCSAccess().getCommaKeyword_7_0_1_1_2_0());
     }
 (
 (
@@ -3919,14 +4150,14 @@
 	    }
 
 )
-))*	otherlv_39=';' 
+))*	otherlv_47=';' 
     {
-    	newLeafNode(otherlv_39, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_3());
+    	newLeafNode(otherlv_47, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_3());
     }
 )
-    |(	otherlv_40='derivation' 
+    |(	otherlv_48='derivation' 
     {
-    	newLeafNode(otherlv_40, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0());
+    	newLeafNode(otherlv_48, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0());
     }
 (
 	{ 
@@ -3939,36 +4170,36 @@
     { 
         afterParserOrEnumRuleCall();
     }
-)?	otherlv_42=':' 
+)?	otherlv_50=':' 
     {
-    	newLeafNode(otherlv_42, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2());
+    	newLeafNode(otherlv_50, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getReferenceCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_7_0_1_2_3_0()); 
 	    }
-		lv_ownedDefaultExpressions_43_0=ruleSpecificationCS		{
+		lv_ownedDefaultExpressions_51_0=ruleSpecificationCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getReferenceCSRule());
 	        }
        		add(
        			$current, 
        			"ownedDefaultExpressions",
-        		lv_ownedDefaultExpressions_43_0, 
+        		lv_ownedDefaultExpressions_51_0, 
         		"SpecificationCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)?	otherlv_44=';' 
+)?	otherlv_52=';' 
     {
-    	newLeafNode(otherlv_44, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4());
+    	newLeafNode(otherlv_52, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4());
     }
 )
-    |(	otherlv_45='initial' 
+    |(	otherlv_53='initial' 
     {
-    	newLeafNode(otherlv_45, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0());
+    	newLeafNode(otherlv_53, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0());
     }
 (
 	{ 
@@ -3981,43 +4212,46 @@
     { 
         afterParserOrEnumRuleCall();
     }
-)?	otherlv_47=':' 
+)?	otherlv_55=':' 
     {
-    	newLeafNode(otherlv_47, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2());
+    	newLeafNode(otherlv_55, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2());
     }
 (
 (
 		{ 
 	        newCompositeNode(grammarAccess.getReferenceCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_7_0_1_3_3_0()); 
 	    }
-		lv_ownedDefaultExpressions_48_0=ruleSpecificationCS		{
+		lv_ownedDefaultExpressions_56_0=ruleSpecificationCS		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getReferenceCSRule());
 	        }
        		add(
        			$current, 
        			"ownedDefaultExpressions",
-        		lv_ownedDefaultExpressions_48_0, 
+        		lv_ownedDefaultExpressions_56_0, 
         		"SpecificationCS");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)?	otherlv_49=';' 
+)?	otherlv_57=';' 
     {
-    	newLeafNode(otherlv_49, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4());
+    	newLeafNode(otherlv_57, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4());
     }
-))*	otherlv_50='}' 
+))*	otherlv_58='}' 
     {
-    	newLeafNode(otherlv_50, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_7_0_2());
+    	newLeafNode(otherlv_58, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_7_0_2());
     }
 )
-    |	otherlv_51=';' 
+    |	otherlv_59=';' 
     {
-    	newLeafNode(otherlv_51, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_1());
+    	newLeafNode(otherlv_59, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_1());
     }
 ))
 ;
+finally {
+	myUnorderedGroupState.restore();
+}
 
 
 
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcoreLexer.java b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcoreLexer.java
index 16f83b4..4ba1520 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcoreLexer.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcoreLexer.java
@@ -2620,8 +2620,8 @@
         try {
             int _type = RULE_UNQUOTED_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9729:22: ( '\\u00A3$%^\\u00A3$%^' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9729:24: '\\u00A3$%^\\u00A3$%^'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9963:22: ( '\\u00A3$%^\\u00A3$%^' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9963:24: '\\u00A3$%^\\u00A3$%^'
             {
             match("\u00A3$%^\u00A3$%^"); 
 
@@ -2639,8 +2639,8 @@
     // $ANTLR start "RULE_ESCAPED_CHARACTER"
     public final void mRULE_ESCAPED_CHARACTER() throws RecognitionException {
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9731:33: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9731:35: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9965:33: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9965:35: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
             {
             match('\\'); 
             if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
@@ -2664,8 +2664,8 @@
     // $ANTLR start "RULE_LETTER_CHARACTER"
     public final void mRULE_LETTER_CHARACTER() throws RecognitionException {
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9733:32: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9733:34: ( 'a' .. 'z' | 'A' .. 'Z' | '_' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9967:32: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9967:34: ( 'a' .. 'z' | 'A' .. 'Z' | '_' )
             {
             if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                 input.consume();
@@ -2690,11 +2690,11 @@
         try {
             int _type = RULE_DOUBLE_QUOTED_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9735:27: ( '\"' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )* '\"' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9735:29: '\"' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9969:27: ( '\"' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )* '\"' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9969:29: '\"' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
             {
             match('\"'); 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9735:33: ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9969:33: ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\"' ) ) )*
             loop1:
             do {
                 int alt1=3;
@@ -2710,14 +2710,14 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9735:34: RULE_ESCAPED_CHARACTER
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9969:34: RULE_ESCAPED_CHARACTER
             	    {
             	    mRULE_ESCAPED_CHARACTER(); 
 
             	    }
             	    break;
             	case 2 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9735:57: ~ ( ( '\\\\' | '\"' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9969:57: ~ ( ( '\\\\' | '\"' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -2754,11 +2754,11 @@
         try {
             int _type = RULE_SINGLE_QUOTED_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9737:27: ( '\\'' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9737:29: '\\'' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9971:27: ( '\\'' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9971:29: '\\'' ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
             {
             match('\''); 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9737:34: ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9971:34: ( RULE_ESCAPED_CHARACTER | ~ ( ( '\\\\' | '\\'' ) ) )*
             loop2:
             do {
                 int alt2=3;
@@ -2774,14 +2774,14 @@
 
                 switch (alt2) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9737:35: RULE_ESCAPED_CHARACTER
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9971:35: RULE_ESCAPED_CHARACTER
             	    {
             	    mRULE_ESCAPED_CHARACTER(); 
 
             	    }
             	    break;
             	case 2 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9737:58: ~ ( ( '\\\\' | '\\'' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9971:58: ~ ( ( '\\\\' | '\\'' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -2818,12 +2818,12 @@
         try {
             int _type = RULE_ML_SINGLE_QUOTED_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9739:30: ( '/\\'' ( options {greedy=false; } : . )* '\\'/' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9739:32: '/\\'' ( options {greedy=false; } : . )* '\\'/'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9973:30: ( '/\\'' ( options {greedy=false; } : . )* '\\'/' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9973:32: '/\\'' ( options {greedy=false; } : . )* '\\'/'
             {
             match("/'"); 
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9739:38: ( options {greedy=false; } : . )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9973:38: ( options {greedy=false; } : . )*
             loop3:
             do {
                 int alt3=2;
@@ -2848,7 +2848,7 @@
 
                 switch (alt3) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9739:66: .
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9973:66: .
             	    {
             	    matchAny(); 
 
@@ -2878,11 +2878,11 @@
         try {
             int _type = RULE_SIMPLE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9741:16: ( RULE_LETTER_CHARACTER ( RULE_LETTER_CHARACTER | '0' .. '9' )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9741:18: RULE_LETTER_CHARACTER ( RULE_LETTER_CHARACTER | '0' .. '9' )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9975:16: ( RULE_LETTER_CHARACTER ( RULE_LETTER_CHARACTER | '0' .. '9' )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9975:18: RULE_LETTER_CHARACTER ( RULE_LETTER_CHARACTER | '0' .. '9' )*
             {
             mRULE_LETTER_CHARACTER(); 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9741:40: ( RULE_LETTER_CHARACTER | '0' .. '9' )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9975:40: ( RULE_LETTER_CHARACTER | '0' .. '9' )*
             loop4:
             do {
                 int alt4=2;
@@ -2931,8 +2931,8 @@
         try {
             int _type = RULE_ESCAPED_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9743:17: ( '_' RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9743:19: '_' RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9977:17: ( '_' RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9977:19: '_' RULE_SINGLE_QUOTED_STRING
             {
             match('_'); 
             mRULE_SINGLE_QUOTED_STRING(); 
@@ -2952,10 +2952,10 @@
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9745:10: ( ( '0' .. '9' )+ )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9745:12: ( '0' .. '9' )+
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9979:10: ( ( '0' .. '9' )+ )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9979:12: ( '0' .. '9' )+
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9745:12: ( '0' .. '9' )+
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9979:12: ( '0' .. '9' )+
             int cnt5=0;
             loop5:
             do {
@@ -2969,7 +2969,7 @@
 
                 switch (alt5) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9745:13: '0' .. '9'
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9979:13: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -3001,12 +3001,12 @@
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9747:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9747:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9981:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9981:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9747:24: ( options {greedy=false; } : . )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9981:24: ( options {greedy=false; } : . )*
             loop6:
             do {
                 int alt6=2;
@@ -3031,7 +3031,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9747:52: .
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9981:52: .
             	    {
             	    matchAny(); 
 
@@ -3061,12 +3061,12 @@
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9749:17: ( '--' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9749:19: '--' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9983:17: ( '--' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9983:19: '--' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("--"); 
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9749:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9983:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop7:
             do {
                 int alt7=2;
@@ -3079,7 +3079,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9749:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9983:24: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -3099,7 +3099,7 @@
                 }
             } while (true);
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9749:40: ( ( '\\r' )? '\\n' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9983:40: ( ( '\\r' )? '\\n' )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -3108,9 +3108,9 @@
             }
             switch (alt9) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9749:41: ( '\\r' )? '\\n'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9983:41: ( '\\r' )? '\\n'
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9749:41: ( '\\r' )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9983:41: ( '\\r' )?
                     int alt8=2;
                     int LA8_0 = input.LA(1);
 
@@ -3119,7 +3119,7 @@
                     }
                     switch (alt8) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9749:41: '\\r'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9983:41: '\\r'
                             {
                             match('\r'); 
 
@@ -3151,10 +3151,10 @@
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9751:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9751:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9985:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9985:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9751:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9985:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt10=0;
             loop10:
             do {
@@ -3208,8 +3208,8 @@
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9753:16: ( . )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9753:18: .
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9987:16: ( . )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9987:18: .
             {
             matchAny(); 
 
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcoreParser.java b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcoreParser.java
index 27984cd..0f2fa8b 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcoreParser.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcoreParser.java
@@ -8,6 +8,7 @@
 import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
 import org.eclipse.xtext.parser.antlr.XtextTokenStream;
 import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.IUnorderedGroupHelper.UnorderedGroupState;
 import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
 import org.eclipse.ocl.xtext.oclinecore.services.OCLinEcoreGrammarAccess;
 
@@ -201,7 +202,7 @@
 
 
     // $ANTLR start "entryRuleTopLevelCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:73:1: entryRuleTopLevelCS returns [EObject current=null] : iv_ruleTopLevelCS= ruleTopLevelCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:74:1: entryRuleTopLevelCS returns [EObject current=null] : iv_ruleTopLevelCS= ruleTopLevelCS EOF ;
     public final EObject entryRuleTopLevelCS() throws RecognitionException {
         EObject current = null;
 
@@ -209,8 +210,8 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:74:2: (iv_ruleTopLevelCS= ruleTopLevelCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:75:2: iv_ruleTopLevelCS= ruleTopLevelCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:75:2: (iv_ruleTopLevelCS= ruleTopLevelCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:76:2: iv_ruleTopLevelCS= ruleTopLevelCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTopLevelCSRule()); 
@@ -241,7 +242,7 @@
 
 
     // $ANTLR start "ruleTopLevelCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:82:1: ruleTopLevelCS returns [EObject current=null] : ( () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:83:1: ruleTopLevelCS returns [EObject current=null] : ( () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )* ) ;
     public final EObject ruleTopLevelCS() throws RecognitionException {
         EObject current = null;
 
@@ -256,14 +257,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:85:28: ( ( () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:86:1: ( () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:86:28: ( ( () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:87:1: ( () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:86:1: ( () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:86:2: () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:87:1: ( () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:87:2: () (otherlv_1= 'module' ruleUnrestrictedName )? ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )* ( (lv_ownedImports_4_0= ruleImportCS ) )* ( (lv_ownedPackages_5_0= rulePackageCS ) )*
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:86:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:87:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:87:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:88:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -280,7 +281,7 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:95:2: (otherlv_1= 'module' ruleUnrestrictedName )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:96:2: (otherlv_1= 'module' ruleUnrestrictedName )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
@@ -289,7 +290,7 @@
             }
             switch (alt1) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:95:4: otherlv_1= 'module' ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:96:4: otherlv_1= 'module' ruleUnrestrictedName
                     {
                     otherlv_1=(Token)match(input,17,FollowSets000.FOLLOW_17_in_ruleTopLevelCS141); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -323,7 +324,7 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:110:3: ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:111:3: ( (lv_ownedLibraries_3_0= ruleLibraryCS ) )*
             loop2:
             do {
                 int alt2=2;
@@ -336,10 +337,10 @@
 
                 switch (alt2) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:111:1: (lv_ownedLibraries_3_0= ruleLibraryCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:112:1: (lv_ownedLibraries_3_0= ruleLibraryCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:111:1: (lv_ownedLibraries_3_0= ruleLibraryCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:112:3: lv_ownedLibraries_3_0= ruleLibraryCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:112:1: (lv_ownedLibraries_3_0= ruleLibraryCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:113:3: lv_ownedLibraries_3_0= ruleLibraryCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
@@ -376,7 +377,7 @@
                 }
             } while (true);
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:128:3: ( (lv_ownedImports_4_0= ruleImportCS ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:129:3: ( (lv_ownedImports_4_0= ruleImportCS ) )*
             loop3:
             do {
                 int alt3=2;
@@ -389,10 +390,10 @@
 
                 switch (alt3) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:129:1: (lv_ownedImports_4_0= ruleImportCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:130:1: (lv_ownedImports_4_0= ruleImportCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:129:1: (lv_ownedImports_4_0= ruleImportCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:130:3: lv_ownedImports_4_0= ruleImportCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:130:1: (lv_ownedImports_4_0= ruleImportCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:131:3: lv_ownedImports_4_0= ruleImportCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
@@ -429,7 +430,7 @@
                 }
             } while (true);
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:146:3: ( (lv_ownedPackages_5_0= rulePackageCS ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:147:3: ( (lv_ownedPackages_5_0= rulePackageCS ) )*
             loop4:
             do {
                 int alt4=2;
@@ -442,10 +443,10 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:147:1: (lv_ownedPackages_5_0= rulePackageCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:148:1: (lv_ownedPackages_5_0= rulePackageCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:147:1: (lv_ownedPackages_5_0= rulePackageCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:148:3: lv_ownedPackages_5_0= rulePackageCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:148:1: (lv_ownedPackages_5_0= rulePackageCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:149:3: lv_ownedPackages_5_0= rulePackageCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
@@ -505,7 +506,7 @@
 
 
     // $ANTLR start "entryRuleSIGNED"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:174:1: entryRuleSIGNED returns [String current=null] : iv_ruleSIGNED= ruleSIGNED EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:175:1: entryRuleSIGNED returns [String current=null] : iv_ruleSIGNED= ruleSIGNED EOF ;
     public final String entryRuleSIGNED() throws RecognitionException {
         String current = null;
 
@@ -513,8 +514,8 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:175:2: (iv_ruleSIGNED= ruleSIGNED EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:176:2: iv_ruleSIGNED= ruleSIGNED EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:176:2: (iv_ruleSIGNED= ruleSIGNED EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:177:2: iv_ruleSIGNED= ruleSIGNED EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSIGNEDRule()); 
@@ -545,7 +546,7 @@
 
 
     // $ANTLR start "ruleSIGNED"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:183:1: ruleSIGNED returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:184:1: ruleSIGNED returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ) ;
     public final AntlrDatatypeRuleToken ruleSIGNED() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -555,13 +556,13 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:186:28: ( ( (kw= '-' )? this_INT_1= RULE_INT ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:187:1: ( (kw= '-' )? this_INT_1= RULE_INT )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:187:28: ( ( (kw= '-' )? this_INT_1= RULE_INT ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:188:1: ( (kw= '-' )? this_INT_1= RULE_INT )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:187:1: ( (kw= '-' )? this_INT_1= RULE_INT )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:187:2: (kw= '-' )? this_INT_1= RULE_INT
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:188:1: ( (kw= '-' )? this_INT_1= RULE_INT )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:188:2: (kw= '-' )? this_INT_1= RULE_INT
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:187:2: (kw= '-' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:188:2: (kw= '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -570,7 +571,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:188:2: kw= '-'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:189:2: kw= '-'
                     {
                     kw=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleSIGNED316); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -619,7 +620,7 @@
 
 
     // $ANTLR start "entryRuleEnumerationLiteralName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:208:1: entryRuleEnumerationLiteralName returns [String current=null] : iv_ruleEnumerationLiteralName= ruleEnumerationLiteralName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:209:1: entryRuleEnumerationLiteralName returns [String current=null] : iv_ruleEnumerationLiteralName= ruleEnumerationLiteralName EOF ;
     public final String entryRuleEnumerationLiteralName() throws RecognitionException {
         String current = null;
 
@@ -627,8 +628,8 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:209:2: (iv_ruleEnumerationLiteralName= ruleEnumerationLiteralName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:210:2: iv_ruleEnumerationLiteralName= ruleEnumerationLiteralName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:210:2: (iv_ruleEnumerationLiteralName= ruleEnumerationLiteralName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:211:2: iv_ruleEnumerationLiteralName= ruleEnumerationLiteralName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getEnumerationLiteralNameRule()); 
@@ -659,7 +660,7 @@
 
 
     // $ANTLR start "ruleEnumerationLiteralName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:217:1: ruleEnumerationLiteralName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName | kw= 'abstract' | kw= 'attribute' | kw= 'body' | kw= 'callable' | kw= 'class' | kw= 'composes' | kw= 'datatype' | kw= 'definition' | kw= 'derivation' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'id' | kw= 'import' | kw= 'initial' | kw= 'interface' | kw= 'key' | kw= 'library' | kw= 'module' | kw= 'operation' | kw= 'ordered' | kw= 'package' | kw= 'postcondition' | kw= 'precondition' | kw= 'primitive' | kw= 'property' | kw= 'readonly' | kw= 'reference' | kw= 'resolve' | kw= 'static' | kw= 'super' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unsettable' | kw= 'volatile' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:218:1: ruleEnumerationLiteralName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName | kw= 'abstract' | kw= 'attribute' | kw= 'body' | kw= 'callable' | kw= 'class' | kw= 'composes' | kw= 'datatype' | kw= 'definition' | kw= 'derivation' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'id' | kw= 'import' | kw= 'initial' | kw= 'interface' | kw= 'key' | kw= 'library' | kw= 'module' | kw= 'operation' | kw= 'ordered' | kw= 'package' | kw= 'postcondition' | kw= 'precondition' | kw= 'primitive' | kw= 'property' | kw= 'readonly' | kw= 'reference' | kw= 'resolve' | kw= 'static' | kw= 'super' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unsettable' | kw= 'volatile' ) ;
     public final AntlrDatatypeRuleToken ruleEnumerationLiteralName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -670,10 +671,10 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:220:28: ( (this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName | kw= 'abstract' | kw= 'attribute' | kw= 'body' | kw= 'callable' | kw= 'class' | kw= 'composes' | kw= 'datatype' | kw= 'definition' | kw= 'derivation' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'id' | kw= 'import' | kw= 'initial' | kw= 'interface' | kw= 'key' | kw= 'library' | kw= 'module' | kw= 'operation' | kw= 'ordered' | kw= 'package' | kw= 'postcondition' | kw= 'precondition' | kw= 'primitive' | kw= 'property' | kw= 'readonly' | kw= 'reference' | kw= 'resolve' | kw= 'static' | kw= 'super' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unsettable' | kw= 'volatile' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:221:1: (this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName | kw= 'abstract' | kw= 'attribute' | kw= 'body' | kw= 'callable' | kw= 'class' | kw= 'composes' | kw= 'datatype' | kw= 'definition' | kw= 'derivation' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'id' | kw= 'import' | kw= 'initial' | kw= 'interface' | kw= 'key' | kw= 'library' | kw= 'module' | kw= 'operation' | kw= 'ordered' | kw= 'package' | kw= 'postcondition' | kw= 'precondition' | kw= 'primitive' | kw= 'property' | kw= 'readonly' | kw= 'reference' | kw= 'resolve' | kw= 'static' | kw= 'super' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unsettable' | kw= 'volatile' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:221:28: ( (this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName | kw= 'abstract' | kw= 'attribute' | kw= 'body' | kw= 'callable' | kw= 'class' | kw= 'composes' | kw= 'datatype' | kw= 'definition' | kw= 'derivation' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'id' | kw= 'import' | kw= 'initial' | kw= 'interface' | kw= 'key' | kw= 'library' | kw= 'module' | kw= 'operation' | kw= 'ordered' | kw= 'package' | kw= 'postcondition' | kw= 'precondition' | kw= 'primitive' | kw= 'property' | kw= 'readonly' | kw= 'reference' | kw= 'resolve' | kw= 'static' | kw= 'super' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unsettable' | kw= 'volatile' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:222:1: (this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName | kw= 'abstract' | kw= 'attribute' | kw= 'body' | kw= 'callable' | kw= 'class' | kw= 'composes' | kw= 'datatype' | kw= 'definition' | kw= 'derivation' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'id' | kw= 'import' | kw= 'initial' | kw= 'interface' | kw= 'key' | kw= 'library' | kw= 'module' | kw= 'operation' | kw= 'ordered' | kw= 'package' | kw= 'postcondition' | kw= 'precondition' | kw= 'primitive' | kw= 'property' | kw= 'readonly' | kw= 'reference' | kw= 'resolve' | kw= 'static' | kw= 'super' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unsettable' | kw= 'volatile' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:221:1: (this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName | kw= 'abstract' | kw= 'attribute' | kw= 'body' | kw= 'callable' | kw= 'class' | kw= 'composes' | kw= 'datatype' | kw= 'definition' | kw= 'derivation' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'id' | kw= 'import' | kw= 'initial' | kw= 'interface' | kw= 'key' | kw= 'library' | kw= 'module' | kw= 'operation' | kw= 'ordered' | kw= 'package' | kw= 'postcondition' | kw= 'precondition' | kw= 'primitive' | kw= 'property' | kw= 'readonly' | kw= 'reference' | kw= 'resolve' | kw= 'static' | kw= 'super' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unsettable' | kw= 'volatile' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:222:1: (this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName | kw= 'abstract' | kw= 'attribute' | kw= 'body' | kw= 'callable' | kw= 'class' | kw= 'composes' | kw= 'datatype' | kw= 'definition' | kw= 'derivation' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'id' | kw= 'import' | kw= 'initial' | kw= 'interface' | kw= 'key' | kw= 'library' | kw= 'module' | kw= 'operation' | kw= 'ordered' | kw= 'package' | kw= 'postcondition' | kw= 'precondition' | kw= 'primitive' | kw= 'property' | kw= 'readonly' | kw= 'reference' | kw= 'resolve' | kw= 'static' | kw= 'super' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unsettable' | kw= 'volatile' )
             int alt6=37;
             switch ( input.LA(1) ) {
             case RULE_SIMPLE_ID:
@@ -872,7 +873,7 @@
 
             switch (alt6) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:222:5: this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:223:5: this_EssentialOCLUnrestrictedName_0= ruleEssentialOCLUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -898,7 +899,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:234:2: kw= 'abstract'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:235:2: kw= 'abstract'
                     {
                     kw=(Token)match(input,19,FollowSets000.FOLLOW_19_in_ruleEnumerationLiteralName461); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -911,7 +912,7 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:241:2: kw= 'attribute'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:242:2: kw= 'attribute'
                     {
                     kw=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleEnumerationLiteralName480); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -924,7 +925,7 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:248:2: kw= 'body'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:249:2: kw= 'body'
                     {
                     kw=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleEnumerationLiteralName499); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -937,7 +938,7 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:255:2: kw= 'callable'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:256:2: kw= 'callable'
                     {
                     kw=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleEnumerationLiteralName518); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -950,7 +951,7 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:262:2: kw= 'class'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:263:2: kw= 'class'
                     {
                     kw=(Token)match(input,23,FollowSets000.FOLLOW_23_in_ruleEnumerationLiteralName537); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -963,7 +964,7 @@
                     }
                     break;
                 case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:269:2: kw= 'composes'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:270:2: kw= 'composes'
                     {
                     kw=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleEnumerationLiteralName556); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -976,7 +977,7 @@
                     }
                     break;
                 case 8 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:276:2: kw= 'datatype'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:277:2: kw= 'datatype'
                     {
                     kw=(Token)match(input,25,FollowSets000.FOLLOW_25_in_ruleEnumerationLiteralName575); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -989,7 +990,7 @@
                     }
                     break;
                 case 9 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:283:2: kw= 'definition'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:284:2: kw= 'definition'
                     {
                     kw=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleEnumerationLiteralName594); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1002,7 +1003,7 @@
                     }
                     break;
                 case 10 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:290:2: kw= 'derivation'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:291:2: kw= 'derivation'
                     {
                     kw=(Token)match(input,27,FollowSets000.FOLLOW_27_in_ruleEnumerationLiteralName613); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1015,7 +1016,7 @@
                     }
                     break;
                 case 11 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:297:2: kw= 'derived'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:298:2: kw= 'derived'
                     {
                     kw=(Token)match(input,28,FollowSets000.FOLLOW_28_in_ruleEnumerationLiteralName632); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1028,7 +1029,7 @@
                     }
                     break;
                 case 12 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:304:2: kw= 'enum'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:305:2: kw= 'enum'
                     {
                     kw=(Token)match(input,29,FollowSets000.FOLLOW_29_in_ruleEnumerationLiteralName651); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1041,7 +1042,7 @@
                     }
                     break;
                 case 13 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:311:2: kw= 'extends'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:312:2: kw= 'extends'
                     {
                     kw=(Token)match(input,30,FollowSets000.FOLLOW_30_in_ruleEnumerationLiteralName670); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1054,7 +1055,7 @@
                     }
                     break;
                 case 14 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:318:2: kw= 'id'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:319:2: kw= 'id'
                     {
                     kw=(Token)match(input,31,FollowSets000.FOLLOW_31_in_ruleEnumerationLiteralName689); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1067,7 +1068,7 @@
                     }
                     break;
                 case 15 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:325:2: kw= 'import'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:326:2: kw= 'import'
                     {
                     kw=(Token)match(input,32,FollowSets000.FOLLOW_32_in_ruleEnumerationLiteralName708); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1080,7 +1081,7 @@
                     }
                     break;
                 case 16 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:332:2: kw= 'initial'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:333:2: kw= 'initial'
                     {
                     kw=(Token)match(input,33,FollowSets000.FOLLOW_33_in_ruleEnumerationLiteralName727); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1093,7 +1094,7 @@
                     }
                     break;
                 case 17 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:339:2: kw= 'interface'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:340:2: kw= 'interface'
                     {
                     kw=(Token)match(input,34,FollowSets000.FOLLOW_34_in_ruleEnumerationLiteralName746); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1106,7 +1107,7 @@
                     }
                     break;
                 case 18 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:346:2: kw= 'key'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:347:2: kw= 'key'
                     {
                     kw=(Token)match(input,35,FollowSets000.FOLLOW_35_in_ruleEnumerationLiteralName765); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1119,7 +1120,7 @@
                     }
                     break;
                 case 19 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:353:2: kw= 'library'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:354:2: kw= 'library'
                     {
                     kw=(Token)match(input,36,FollowSets000.FOLLOW_36_in_ruleEnumerationLiteralName784); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1132,7 +1133,7 @@
                     }
                     break;
                 case 20 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:360:2: kw= 'module'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:361:2: kw= 'module'
                     {
                     kw=(Token)match(input,17,FollowSets000.FOLLOW_17_in_ruleEnumerationLiteralName803); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1145,7 +1146,7 @@
                     }
                     break;
                 case 21 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:367:2: kw= 'operation'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:368:2: kw= 'operation'
                     {
                     kw=(Token)match(input,37,FollowSets000.FOLLOW_37_in_ruleEnumerationLiteralName822); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1158,7 +1159,7 @@
                     }
                     break;
                 case 22 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:374:2: kw= 'ordered'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:375:2: kw= 'ordered'
                     {
                     kw=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleEnumerationLiteralName841); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1171,7 +1172,7 @@
                     }
                     break;
                 case 23 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:381:2: kw= 'package'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:382:2: kw= 'package'
                     {
                     kw=(Token)match(input,39,FollowSets000.FOLLOW_39_in_ruleEnumerationLiteralName860); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1184,7 +1185,7 @@
                     }
                     break;
                 case 24 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:388:2: kw= 'postcondition'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:389:2: kw= 'postcondition'
                     {
                     kw=(Token)match(input,40,FollowSets000.FOLLOW_40_in_ruleEnumerationLiteralName879); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1197,7 +1198,7 @@
                     }
                     break;
                 case 25 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:395:2: kw= 'precondition'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:396:2: kw= 'precondition'
                     {
                     kw=(Token)match(input,41,FollowSets000.FOLLOW_41_in_ruleEnumerationLiteralName898); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1210,7 +1211,7 @@
                     }
                     break;
                 case 26 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:402:2: kw= 'primitive'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:403:2: kw= 'primitive'
                     {
                     kw=(Token)match(input,42,FollowSets000.FOLLOW_42_in_ruleEnumerationLiteralName917); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1223,7 +1224,7 @@
                     }
                     break;
                 case 27 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:409:2: kw= 'property'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:410:2: kw= 'property'
                     {
                     kw=(Token)match(input,43,FollowSets000.FOLLOW_43_in_ruleEnumerationLiteralName936); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1236,7 +1237,7 @@
                     }
                     break;
                 case 28 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:416:2: kw= 'readonly'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:417:2: kw= 'readonly'
                     {
                     kw=(Token)match(input,44,FollowSets000.FOLLOW_44_in_ruleEnumerationLiteralName955); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1249,7 +1250,7 @@
                     }
                     break;
                 case 29 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:423:2: kw= 'reference'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:424:2: kw= 'reference'
                     {
                     kw=(Token)match(input,45,FollowSets000.FOLLOW_45_in_ruleEnumerationLiteralName974); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1262,7 +1263,7 @@
                     }
                     break;
                 case 30 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:430:2: kw= 'resolve'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:431:2: kw= 'resolve'
                     {
                     kw=(Token)match(input,46,FollowSets000.FOLLOW_46_in_ruleEnumerationLiteralName993); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1275,7 +1276,7 @@
                     }
                     break;
                 case 31 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:437:2: kw= 'static'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:438:2: kw= 'static'
                     {
                     kw=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleEnumerationLiteralName1012); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1288,7 +1289,7 @@
                     }
                     break;
                 case 32 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:444:2: kw= 'super'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:445:2: kw= 'super'
                     {
                     kw=(Token)match(input,48,FollowSets000.FOLLOW_48_in_ruleEnumerationLiteralName1031); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1301,7 +1302,7 @@
                     }
                     break;
                 case 33 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:451:2: kw= 'throws'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:452:2: kw= 'throws'
                     {
                     kw=(Token)match(input,49,FollowSets000.FOLLOW_49_in_ruleEnumerationLiteralName1050); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1314,7 +1315,7 @@
                     }
                     break;
                 case 34 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:458:2: kw= 'transient'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:459:2: kw= 'transient'
                     {
                     kw=(Token)match(input,50,FollowSets000.FOLLOW_50_in_ruleEnumerationLiteralName1069); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1327,7 +1328,7 @@
                     }
                     break;
                 case 35 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:465:2: kw= 'unique'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:466:2: kw= 'unique'
                     {
                     kw=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleEnumerationLiteralName1088); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1340,7 +1341,7 @@
                     }
                     break;
                 case 36 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:472:2: kw= 'unsettable'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:473:2: kw= 'unsettable'
                     {
                     kw=(Token)match(input,52,FollowSets000.FOLLOW_52_in_ruleEnumerationLiteralName1107); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1353,7 +1354,7 @@
                     }
                     break;
                 case 37 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:479:2: kw= 'volatile'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:480:2: kw= 'volatile'
                     {
                     kw=(Token)match(input,53,FollowSets000.FOLLOW_53_in_ruleEnumerationLiteralName1126); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1388,7 +1389,7 @@
 
 
     // $ANTLR start "entryRuleInvariantConstraintCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:492:1: entryRuleInvariantConstraintCS returns [EObject current=null] : iv_ruleInvariantConstraintCS= ruleInvariantConstraintCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:493:1: entryRuleInvariantConstraintCS returns [EObject current=null] : iv_ruleInvariantConstraintCS= ruleInvariantConstraintCS EOF ;
     public final EObject entryRuleInvariantConstraintCS() throws RecognitionException {
         EObject current = null;
 
@@ -1396,8 +1397,8 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:493:2: (iv_ruleInvariantConstraintCS= ruleInvariantConstraintCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:494:2: iv_ruleInvariantConstraintCS= ruleInvariantConstraintCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:494:2: (iv_ruleInvariantConstraintCS= ruleInvariantConstraintCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:495:2: iv_ruleInvariantConstraintCS= ruleInvariantConstraintCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getInvariantConstraintCSRule()); 
@@ -1428,7 +1429,7 @@
 
 
     // $ANTLR start "ruleInvariantConstraintCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:501:1: ruleInvariantConstraintCS returns [EObject current=null] : ( ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:502:1: ruleInvariantConstraintCS returns [EObject current=null] : ( ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' ) ) ;
     public final EObject ruleInvariantConstraintCS() throws RecognitionException {
         EObject current = null;
 
@@ -1449,13 +1450,13 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:504:28: ( ( ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:505:1: ( ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:505:28: ( ( ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:506:1: ( ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:505:1: ( ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:505:2: ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:506:1: ( ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:506:2: ( (lv_isCallable_0_0= 'callable' ) )? ( (lv_stereotype_1_0= 'invariant' ) ) ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )? ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:505:2: ( (lv_isCallable_0_0= 'callable' ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:506:2: ( (lv_isCallable_0_0= 'callable' ) )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -1464,10 +1465,10 @@
             }
             switch (alt7) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:506:1: (lv_isCallable_0_0= 'callable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:507:1: (lv_isCallable_0_0= 'callable' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:506:1: (lv_isCallable_0_0= 'callable' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:507:3: lv_isCallable_0_0= 'callable'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:507:1: (lv_isCallable_0_0= 'callable' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:508:3: lv_isCallable_0_0= 'callable'
                     {
                     lv_isCallable_0_0=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleInvariantConstraintCS1219); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1492,11 +1493,11 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:520:3: ( (lv_stereotype_1_0= 'invariant' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:521:1: (lv_stereotype_1_0= 'invariant' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:521:3: ( (lv_stereotype_1_0= 'invariant' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:522:1: (lv_stereotype_1_0= 'invariant' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:521:1: (lv_stereotype_1_0= 'invariant' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:522:3: lv_stereotype_1_0= 'invariant'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:522:1: (lv_stereotype_1_0= 'invariant' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:523:3: lv_stereotype_1_0= 'invariant'
             {
             lv_stereotype_1_0=(Token)match(input,54,FollowSets000.FOLLOW_54_in_ruleInvariantConstraintCS1251); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -1518,7 +1519,7 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:535:2: ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:536:2: ( ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )? )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -1527,13 +1528,13 @@
             }
             switch (alt9) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:535:3: ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:536:3: ( (lv_name_2_0= ruleUnrestrictedName ) ) (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )?
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:535:3: ( (lv_name_2_0= ruleUnrestrictedName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:536:1: (lv_name_2_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:536:3: ( (lv_name_2_0= ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:537:1: (lv_name_2_0= ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:536:1: (lv_name_2_0= ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:537:3: lv_name_2_0= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:537:1: (lv_name_2_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:538:3: lv_name_2_0= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -1564,7 +1565,7 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:553:2: (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:554:2: (otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')' )?
                     int alt8=2;
                     int LA8_0 = input.LA(1);
 
@@ -1573,7 +1574,7 @@
                     }
                     switch (alt8) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:553:4: otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:554:4: otherlv_3= '(' ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) ) otherlv_5= ')'
                             {
                             otherlv_3=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleInvariantConstraintCS1299); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
@@ -1581,11 +1582,11 @@
                                   	newLeafNode(otherlv_3, grammarAccess.getInvariantConstraintCSAccess().getLeftParenthesisKeyword_2_1_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:557:1: ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:558:1: (lv_ownedMessageSpecification_4_0= ruleSpecificationCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:558:1: ( (lv_ownedMessageSpecification_4_0= ruleSpecificationCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:559:1: (lv_ownedMessageSpecification_4_0= ruleSpecificationCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:558:1: (lv_ownedMessageSpecification_4_0= ruleSpecificationCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:559:3: lv_ownedMessageSpecification_4_0= ruleSpecificationCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:559:1: (lv_ownedMessageSpecification_4_0= ruleSpecificationCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:560:3: lv_ownedMessageSpecification_4_0= ruleSpecificationCS
                             {
                             if ( state.backtracking==0 ) {
                                
@@ -1634,7 +1635,7 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:579:5: ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:580:5: ( (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' ) | otherlv_9= ';' )
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -1653,10 +1654,10 @@
             }
             switch (alt11) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:579:6: (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:580:6: (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:579:6: (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:579:8: otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:580:6: (otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:580:8: otherlv_6= ':' ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )? otherlv_8= ';'
                     {
                     otherlv_6=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleInvariantConstraintCS1350); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1664,7 +1665,7 @@
                           	newLeafNode(otherlv_6, grammarAccess.getInvariantConstraintCSAccess().getColonKeyword_3_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:583:1: ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:584:1: ( (lv_ownedSpecification_7_0= ruleSpecificationCS ) )?
                     int alt10=2;
                     int LA10_0 = input.LA(1);
 
@@ -1673,10 +1674,10 @@
                     }
                     switch (alt10) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:584:1: (lv_ownedSpecification_7_0= ruleSpecificationCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:585:1: (lv_ownedSpecification_7_0= ruleSpecificationCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:584:1: (lv_ownedSpecification_7_0= ruleSpecificationCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:585:3: lv_ownedSpecification_7_0= ruleSpecificationCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:585:1: (lv_ownedSpecification_7_0= ruleSpecificationCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:586:3: lv_ownedSpecification_7_0= ruleSpecificationCS
                             {
                             if ( state.backtracking==0 ) {
                                
@@ -1723,7 +1724,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:606:7: otherlv_9= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:607:7: otherlv_9= ';'
                     {
                     otherlv_9=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleInvariantConstraintCS1403); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -1760,7 +1761,7 @@
 
 
     // $ANTLR start "entryRulePostconditionConstraintCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:618:1: entryRulePostconditionConstraintCS returns [EObject current=null] : iv_rulePostconditionConstraintCS= rulePostconditionConstraintCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:619:1: entryRulePostconditionConstraintCS returns [EObject current=null] : iv_rulePostconditionConstraintCS= rulePostconditionConstraintCS EOF ;
     public final EObject entryRulePostconditionConstraintCS() throws RecognitionException {
         EObject current = null;
 
@@ -1768,8 +1769,8 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:619:2: (iv_rulePostconditionConstraintCS= rulePostconditionConstraintCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:620:2: iv_rulePostconditionConstraintCS= rulePostconditionConstraintCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:620:2: (iv_rulePostconditionConstraintCS= rulePostconditionConstraintCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:621:2: iv_rulePostconditionConstraintCS= rulePostconditionConstraintCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPostconditionConstraintCSRule()); 
@@ -1800,7 +1801,7 @@
 
 
     // $ANTLR start "rulePostconditionConstraintCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:627:1: rulePostconditionConstraintCS returns [EObject current=null] : ( ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:628:1: rulePostconditionConstraintCS returns [EObject current=null] : ( ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' ) ;
     public final EObject rulePostconditionConstraintCS() throws RecognitionException {
         EObject current = null;
 
@@ -1819,17 +1820,17 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:630:28: ( ( ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:631:1: ( ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:631:28: ( ( ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:632:1: ( ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:631:1: ( ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:631:2: ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:632:1: ( ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:632:2: ( (lv_stereotype_0_0= 'postcondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:631:2: ( (lv_stereotype_0_0= 'postcondition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:632:1: (lv_stereotype_0_0= 'postcondition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:632:2: ( (lv_stereotype_0_0= 'postcondition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:633:1: (lv_stereotype_0_0= 'postcondition' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:632:1: (lv_stereotype_0_0= 'postcondition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:633:3: lv_stereotype_0_0= 'postcondition'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:633:1: (lv_stereotype_0_0= 'postcondition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:634:3: lv_stereotype_0_0= 'postcondition'
             {
             lv_stereotype_0_0=(Token)match(input,40,FollowSets000.FOLLOW_40_in_rulePostconditionConstraintCS1493); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -1851,7 +1852,7 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:646:2: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:647:2: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1860,13 +1861,13 @@
             }
             switch (alt13) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:646:3: ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:647:3: ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )?
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:646:3: ( (lv_name_1_0= ruleUnrestrictedName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:647:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:647:3: ( (lv_name_1_0= ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:648:1: (lv_name_1_0= ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:647:1: (lv_name_1_0= ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:648:3: lv_name_1_0= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:648:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:649:3: lv_name_1_0= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -1897,7 +1898,7 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:664:2: (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:665:2: (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )?
                     int alt12=2;
                     int LA12_0 = input.LA(1);
 
@@ -1906,7 +1907,7 @@
                     }
                     switch (alt12) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:664:4: otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:665:4: otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')'
                             {
                             otherlv_2=(Token)match(input,55,FollowSets000.FOLLOW_55_in_rulePostconditionConstraintCS1541); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
@@ -1914,11 +1915,11 @@
                                   	newLeafNode(otherlv_2, grammarAccess.getPostconditionConstraintCSAccess().getLeftParenthesisKeyword_1_1_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:668:1: ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:669:1: (lv_ownedMessageSpecification_3_0= ruleSpecificationCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:669:1: ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:670:1: (lv_ownedMessageSpecification_3_0= ruleSpecificationCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:669:1: (lv_ownedMessageSpecification_3_0= ruleSpecificationCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:670:3: lv_ownedMessageSpecification_3_0= ruleSpecificationCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:670:1: (lv_ownedMessageSpecification_3_0= ruleSpecificationCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:671:3: lv_ownedMessageSpecification_3_0= ruleSpecificationCS
                             {
                             if ( state.backtracking==0 ) {
                                
@@ -1973,7 +1974,7 @@
                   	newLeafNode(otherlv_5, grammarAccess.getPostconditionConstraintCSAccess().getColonKeyword_2());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:694:1: ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:695:1: ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )?
             int alt14=2;
             int LA14_0 = input.LA(1);
 
@@ -1982,10 +1983,10 @@
             }
             switch (alt14) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:695:1: (lv_ownedSpecification_6_0= ruleSpecificationCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:696:1: (lv_ownedSpecification_6_0= ruleSpecificationCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:695:1: (lv_ownedSpecification_6_0= ruleSpecificationCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:696:3: lv_ownedSpecification_6_0= ruleSpecificationCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:696:1: (lv_ownedSpecification_6_0= ruleSpecificationCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:697:3: lv_ownedSpecification_6_0= ruleSpecificationCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -2048,7 +2049,7 @@
 
 
     // $ANTLR start "entryRulePreconditionConstraintCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:724:1: entryRulePreconditionConstraintCS returns [EObject current=null] : iv_rulePreconditionConstraintCS= rulePreconditionConstraintCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:725:1: entryRulePreconditionConstraintCS returns [EObject current=null] : iv_rulePreconditionConstraintCS= rulePreconditionConstraintCS EOF ;
     public final EObject entryRulePreconditionConstraintCS() throws RecognitionException {
         EObject current = null;
 
@@ -2056,8 +2057,8 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:725:2: (iv_rulePreconditionConstraintCS= rulePreconditionConstraintCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:726:2: iv_rulePreconditionConstraintCS= rulePreconditionConstraintCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:726:2: (iv_rulePreconditionConstraintCS= rulePreconditionConstraintCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:727:2: iv_rulePreconditionConstraintCS= rulePreconditionConstraintCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPreconditionConstraintCSRule()); 
@@ -2088,7 +2089,7 @@
 
 
     // $ANTLR start "rulePreconditionConstraintCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:733:1: rulePreconditionConstraintCS returns [EObject current=null] : ( ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:734:1: rulePreconditionConstraintCS returns [EObject current=null] : ( ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' ) ;
     public final EObject rulePreconditionConstraintCS() throws RecognitionException {
         EObject current = null;
 
@@ -2107,17 +2108,17 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:736:28: ( ( ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:737:1: ( ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:737:28: ( ( ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:738:1: ( ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:737:1: ( ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:737:2: ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:738:1: ( ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:738:2: ( (lv_stereotype_0_0= 'precondition' ) ) ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )? otherlv_5= ':' ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )? otherlv_7= ';'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:737:2: ( (lv_stereotype_0_0= 'precondition' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:738:1: (lv_stereotype_0_0= 'precondition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:738:2: ( (lv_stereotype_0_0= 'precondition' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:739:1: (lv_stereotype_0_0= 'precondition' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:738:1: (lv_stereotype_0_0= 'precondition' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:739:3: lv_stereotype_0_0= 'precondition'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:739:1: (lv_stereotype_0_0= 'precondition' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:740:3: lv_stereotype_0_0= 'precondition'
             {
             lv_stereotype_0_0=(Token)match(input,41,FollowSets000.FOLLOW_41_in_rulePreconditionConstraintCS1713); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -2139,7 +2140,7 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:752:2: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:753:2: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )? )?
             int alt16=2;
             int LA16_0 = input.LA(1);
 
@@ -2148,13 +2149,13 @@
             }
             switch (alt16) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:752:3: ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:753:3: ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )?
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:752:3: ( (lv_name_1_0= ruleUnrestrictedName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:753:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:753:3: ( (lv_name_1_0= ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:754:1: (lv_name_1_0= ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:753:1: (lv_name_1_0= ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:754:3: lv_name_1_0= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:754:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:755:3: lv_name_1_0= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -2185,7 +2186,7 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:770:2: (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:771:2: (otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')' )?
                     int alt15=2;
                     int LA15_0 = input.LA(1);
 
@@ -2194,7 +2195,7 @@
                     }
                     switch (alt15) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:770:4: otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:771:4: otherlv_2= '(' ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) ) otherlv_4= ')'
                             {
                             otherlv_2=(Token)match(input,55,FollowSets000.FOLLOW_55_in_rulePreconditionConstraintCS1761); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
@@ -2202,11 +2203,11 @@
                                   	newLeafNode(otherlv_2, grammarAccess.getPreconditionConstraintCSAccess().getLeftParenthesisKeyword_1_1_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:774:1: ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:775:1: (lv_ownedMessageSpecification_3_0= ruleSpecificationCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:775:1: ( (lv_ownedMessageSpecification_3_0= ruleSpecificationCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:776:1: (lv_ownedMessageSpecification_3_0= ruleSpecificationCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:775:1: (lv_ownedMessageSpecification_3_0= ruleSpecificationCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:776:3: lv_ownedMessageSpecification_3_0= ruleSpecificationCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:776:1: (lv_ownedMessageSpecification_3_0= ruleSpecificationCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:777:3: lv_ownedMessageSpecification_3_0= ruleSpecificationCS
                             {
                             if ( state.backtracking==0 ) {
                                
@@ -2261,7 +2262,7 @@
                   	newLeafNode(otherlv_5, grammarAccess.getPreconditionConstraintCSAccess().getColonKeyword_2());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:800:1: ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:801:1: ( (lv_ownedSpecification_6_0= ruleSpecificationCS ) )?
             int alt17=2;
             int LA17_0 = input.LA(1);
 
@@ -2270,10 +2271,10 @@
             }
             switch (alt17) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:801:1: (lv_ownedSpecification_6_0= ruleSpecificationCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:802:1: (lv_ownedSpecification_6_0= ruleSpecificationCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:801:1: (lv_ownedSpecification_6_0= ruleSpecificationCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:802:3: lv_ownedSpecification_6_0= ruleSpecificationCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:802:1: (lv_ownedSpecification_6_0= ruleSpecificationCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:803:3: lv_ownedSpecification_6_0= ruleSpecificationCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -2336,7 +2337,7 @@
 
 
     // $ANTLR start "entryRuleAnnotationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:830:1: entryRuleAnnotationCS returns [EObject current=null] : iv_ruleAnnotationCS= ruleAnnotationCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:831:1: entryRuleAnnotationCS returns [EObject current=null] : iv_ruleAnnotationCS= ruleAnnotationCS EOF ;
     public final EObject entryRuleAnnotationCS() throws RecognitionException {
         EObject current = null;
 
@@ -2344,8 +2345,8 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:831:2: (iv_ruleAnnotationCS= ruleAnnotationCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:832:2: iv_ruleAnnotationCS= ruleAnnotationCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:832:2: (iv_ruleAnnotationCS= ruleAnnotationCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:833:2: iv_ruleAnnotationCS= ruleAnnotationCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getAnnotationCSRule()); 
@@ -2376,7 +2377,7 @@
 
 
     // $ANTLR start "ruleAnnotationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:839:1: ruleAnnotationCS returns [EObject current=null] : ( () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:840:1: ruleAnnotationCS returns [EObject current=null] : ( () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' ) ) ;
     public final EObject ruleAnnotationCS() throws RecognitionException {
         EObject current = null;
 
@@ -2404,14 +2405,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:842:28: ( ( () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:843:1: ( () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:843:28: ( ( () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:844:1: ( () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:843:1: ( () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:843:2: () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:844:1: ( () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:844:2: () otherlv_1= 'annotation' ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:843:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:844:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:844:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:845:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -2434,7 +2435,7 @@
                   	newLeafNode(otherlv_1, grammarAccess.getAnnotationCSAccess().getAnnotationKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:856:1: ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:857:1: ( ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) ) )?
             int alt19=2;
             int LA19_0 = input.LA(1);
 
@@ -2443,12 +2444,12 @@
             }
             switch (alt19) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:857:1: ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:858:1: ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:857:1: ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:858:1: (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:858:1: ( (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:859:1: (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:858:1: (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:859:1: (lv_name_2_1= ruleUnrestrictedName | lv_name_2_2= RULE_SINGLE_QUOTED_STRING )
                     int alt18=2;
                     int LA18_0 = input.LA(1);
 
@@ -2467,7 +2468,7 @@
                     }
                     switch (alt18) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:859:3: lv_name_2_1= ruleUnrestrictedName
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:860:3: lv_name_2_1= ruleUnrestrictedName
                             {
                             if ( state.backtracking==0 ) {
                                
@@ -2496,7 +2497,7 @@
                             }
                             break;
                         case 2 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:874:8: lv_name_2_2= RULE_SINGLE_QUOTED_STRING
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:875:8: lv_name_2_2= RULE_SINGLE_QUOTED_STRING
                             {
                             lv_name_2_2=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleAnnotationCS1977); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
@@ -2531,7 +2532,7 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:892:3: (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:893:3: (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )?
             int alt21=2;
             int LA21_0 = input.LA(1);
 
@@ -2540,7 +2541,7 @@
             }
             switch (alt21) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:892:5: otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:893:5: otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')'
                     {
                     otherlv_3=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleAnnotationCS1999); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -2548,11 +2549,11 @@
                           	newLeafNode(otherlv_3, grammarAccess.getAnnotationCSAccess().getLeftParenthesisKeyword_3_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:896:1: ( (lv_ownedDetails_4_0= ruleDetailCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:897:1: (lv_ownedDetails_4_0= ruleDetailCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:897:1: ( (lv_ownedDetails_4_0= ruleDetailCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:898:1: (lv_ownedDetails_4_0= ruleDetailCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:897:1: (lv_ownedDetails_4_0= ruleDetailCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:898:3: lv_ownedDetails_4_0= ruleDetailCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:898:1: (lv_ownedDetails_4_0= ruleDetailCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:899:3: lv_ownedDetails_4_0= ruleDetailCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -2583,7 +2584,7 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:914:2: (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )*
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:915:2: (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )*
                     loop20:
                     do {
                         int alt20=2;
@@ -2596,7 +2597,7 @@
 
                         switch (alt20) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:914:4: otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:915:4: otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) )
                     	    {
                     	    otherlv_5=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAnnotationCS2033); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
@@ -2604,11 +2605,11 @@
                     	          	newLeafNode(otherlv_5, grammarAccess.getAnnotationCSAccess().getCommaKeyword_3_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:918:1: ( (lv_ownedDetails_6_0= ruleDetailCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:919:1: (lv_ownedDetails_6_0= ruleDetailCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:919:1: ( (lv_ownedDetails_6_0= ruleDetailCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:920:1: (lv_ownedDetails_6_0= ruleDetailCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:919:1: (lv_ownedDetails_6_0= ruleDetailCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:920:3: lv_ownedDetails_6_0= ruleDetailCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:920:1: (lv_ownedDetails_6_0= ruleDetailCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:921:3: lv_ownedDetails_6_0= ruleDetailCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
@@ -2660,7 +2661,7 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:940:3: ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:941:3: ( (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' ) | otherlv_13= ';' )
             int alt23=2;
             int LA23_0 = input.LA(1);
 
@@ -2679,10 +2680,10 @@
             }
             switch (alt23) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:940:4: (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:941:4: (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:940:4: (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:940:6: otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:941:4: (otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:941:6: otherlv_8= '{' ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+ otherlv_12= '}'
                     {
                     otherlv_8=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleAnnotationCS2084); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -2690,7 +2691,7 @@
                           	newLeafNode(otherlv_8, grammarAccess.getAnnotationCSAccess().getLeftCurlyBracketKeyword_4_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:944:1: ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:945:1: ( ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) ) | ( (lv_ownedContents_10_0= ruleModelElementCS ) ) | ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) ) )+
                     int cnt22=0;
                     loop22:
                     do {
@@ -2764,13 +2765,13 @@
 
                         switch (alt22) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:944:2: ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:945:2: ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:944:2: ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:945:1: (lv_ownedAnnotations_9_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:945:2: ( (lv_ownedAnnotations_9_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:946:1: (lv_ownedAnnotations_9_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:945:1: (lv_ownedAnnotations_9_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:946:3: lv_ownedAnnotations_9_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:946:1: (lv_ownedAnnotations_9_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:947:3: lv_ownedAnnotations_9_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
@@ -2805,13 +2806,13 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:963:6: ( (lv_ownedContents_10_0= ruleModelElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:964:6: ( (lv_ownedContents_10_0= ruleModelElementCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:963:6: ( (lv_ownedContents_10_0= ruleModelElementCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:964:1: (lv_ownedContents_10_0= ruleModelElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:964:6: ( (lv_ownedContents_10_0= ruleModelElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:965:1: (lv_ownedContents_10_0= ruleModelElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:964:1: (lv_ownedContents_10_0= ruleModelElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:965:3: lv_ownedContents_10_0= ruleModelElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:965:1: (lv_ownedContents_10_0= ruleModelElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:966:3: lv_ownedContents_10_0= ruleModelElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
@@ -2846,13 +2847,13 @@
                     	    }
                     	    break;
                     	case 3 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:982:6: ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:983:6: ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:982:6: ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:983:1: (lv_ownedReferences_11_0= ruleModelElementRefCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:983:6: ( (lv_ownedReferences_11_0= ruleModelElementRefCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:984:1: (lv_ownedReferences_11_0= ruleModelElementRefCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:983:1: (lv_ownedReferences_11_0= ruleModelElementRefCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:984:3: lv_ownedReferences_11_0= ruleModelElementRefCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:984:1: (lv_ownedReferences_11_0= ruleModelElementRefCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:985:3: lv_ownedReferences_11_0= ruleModelElementRefCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
@@ -2910,7 +2911,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1005:7: otherlv_13= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1006:7: otherlv_13= ';'
                     {
                     otherlv_13=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleAnnotationCS2193); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -2947,7 +2948,7 @@
 
 
     // $ANTLR start "entryRuleAnnotationElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1017:1: entryRuleAnnotationElementCS returns [EObject current=null] : iv_ruleAnnotationElementCS= ruleAnnotationElementCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1018:1: entryRuleAnnotationElementCS returns [EObject current=null] : iv_ruleAnnotationElementCS= ruleAnnotationElementCS EOF ;
     public final EObject entryRuleAnnotationElementCS() throws RecognitionException {
         EObject current = null;
 
@@ -2955,8 +2956,8 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1018:2: (iv_ruleAnnotationElementCS= ruleAnnotationElementCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1019:2: iv_ruleAnnotationElementCS= ruleAnnotationElementCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1019:2: (iv_ruleAnnotationElementCS= ruleAnnotationElementCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1020:2: iv_ruleAnnotationElementCS= ruleAnnotationElementCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getAnnotationElementCSRule()); 
@@ -2987,7 +2988,7 @@
 
 
     // $ANTLR start "ruleAnnotationElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1026:1: ruleAnnotationElementCS returns [EObject current=null] : (this_AnnotationCS_0= ruleAnnotationCS | this_DocumentationCS_1= ruleDocumentationCS | this_SysMLCS_2= ruleSysMLCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1027:1: ruleAnnotationElementCS returns [EObject current=null] : (this_AnnotationCS_0= ruleAnnotationCS | this_DocumentationCS_1= ruleDocumentationCS | this_SysMLCS_2= ruleSysMLCS ) ;
     public final EObject ruleAnnotationElementCS() throws RecognitionException {
         EObject current = null;
 
@@ -3001,10 +3002,10 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1029:28: ( (this_AnnotationCS_0= ruleAnnotationCS | this_DocumentationCS_1= ruleDocumentationCS | this_SysMLCS_2= ruleSysMLCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1030:1: (this_AnnotationCS_0= ruleAnnotationCS | this_DocumentationCS_1= ruleDocumentationCS | this_SysMLCS_2= ruleSysMLCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1030:28: ( (this_AnnotationCS_0= ruleAnnotationCS | this_DocumentationCS_1= ruleDocumentationCS | this_SysMLCS_2= ruleSysMLCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1031:1: (this_AnnotationCS_0= ruleAnnotationCS | this_DocumentationCS_1= ruleDocumentationCS | this_SysMLCS_2= ruleSysMLCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1030:1: (this_AnnotationCS_0= ruleAnnotationCS | this_DocumentationCS_1= ruleDocumentationCS | this_SysMLCS_2= ruleSysMLCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1031:1: (this_AnnotationCS_0= ruleAnnotationCS | this_DocumentationCS_1= ruleDocumentationCS | this_SysMLCS_2= ruleSysMLCS )
             int alt24=3;
             switch ( input.LA(1) ) {
             case 59:
@@ -3032,7 +3033,7 @@
 
             switch (alt24) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1031:2: this_AnnotationCS_0= ruleAnnotationCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1032:2: this_AnnotationCS_0= ruleAnnotationCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -3059,7 +3060,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1044:2: this_DocumentationCS_1= ruleDocumentationCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1045:2: this_DocumentationCS_1= ruleDocumentationCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -3086,7 +3087,7 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1057:2: this_SysMLCS_2= ruleSysMLCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1058:2: this_SysMLCS_2= ruleSysMLCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -3135,21 +3136,27 @@
 
 
     // $ANTLR start "entryRuleAttributeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1076:1: entryRuleAttributeCS returns [EObject current=null] : iv_ruleAttributeCS= ruleAttributeCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1077:1: entryRuleAttributeCS returns [EObject current=null] : iv_ruleAttributeCS= ruleAttributeCS EOF ;
     public final EObject entryRuleAttributeCS() throws RecognitionException {
         EObject current = null;
 
         EObject iv_ruleAttributeCS = null;
 
 
+         
+        		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+        			grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 
+        			grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()
+        		);
+        	
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1077:2: (iv_ruleAttributeCS= ruleAttributeCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1078:2: iv_ruleAttributeCS= ruleAttributeCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1084:2: (iv_ruleAttributeCS= ruleAttributeCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1085:2: iv_ruleAttributeCS= ruleAttributeCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getAttributeCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleAttributeCS_in_entryRuleAttributeCS2385);
+            pushFollow(FollowSets000.FOLLOW_ruleAttributeCS_in_entryRuleAttributeCS2391);
             iv_ruleAttributeCS=ruleAttributeCS();
 
             state._fsp--;
@@ -3157,7 +3164,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleAttributeCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleAttributeCS2395); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleAttributeCS2401); if (state.failed) return current;
 
             }
 
@@ -3168,6 +3175,9 @@
                 appendSkippedTokens();
             } 
         finally {
+
+            	myUnorderedGroupState.restore();
+
         }
         return current;
     }
@@ -3175,249 +3185,255 @@
 
 
     // $ANTLR start "ruleAttributeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1085:1: ruleAttributeCS returns [EObject current=null] : ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'attribute' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= ':' ( (lv_ownedType_7_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_8= '=' ( (lv_default_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) ) (otherlv_27= ',' )? )+ otherlv_28= '}' )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )* otherlv_41= '}' ) | otherlv_42= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1095:1: ruleAttributeCS returns [EObject current=null] : ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'attribute' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= ':' ( (lv_ownedType_6_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_7= '=' ( (lv_default_8_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_36= '{' ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )* otherlv_48= '}' ) | otherlv_49= ';' ) ) ;
     public final EObject ruleAttributeCS() throws RecognitionException {
         EObject current = null;
 
-        Token lv_qualifiers_0_0=null;
-        Token lv_qualifiers_1_0=null;
-        Token lv_qualifiers_2_0=null;
-        Token lv_qualifiers_3_0=null;
-        Token otherlv_4=null;
-        Token otherlv_6=null;
-        Token otherlv_8=null;
-        Token lv_default_9_0=null;
+        Token lv_isStatic_1_0=null;
+        Token lv_isDefinition_2_0=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        Token lv_default_8_0=null;
         Token otherlv_10=null;
-        Token lv_qualifiers_11_0=null;
-        Token lv_qualifiers_12_0=null;
-        Token lv_qualifiers_13_0=null;
-        Token lv_qualifiers_14_0=null;
-        Token lv_qualifiers_15_0=null;
-        Token lv_qualifiers_16_0=null;
-        Token lv_qualifiers_17_0=null;
-        Token lv_qualifiers_18_0=null;
-        Token lv_qualifiers_19_0=null;
-        Token lv_qualifiers_20_0=null;
-        Token lv_qualifiers_21_0=null;
-        Token lv_qualifiers_22_0=null;
-        Token lv_qualifiers_23_0=null;
-        Token lv_qualifiers_24_0=null;
-        Token lv_qualifiers_25_0=null;
-        Token lv_qualifiers_26_0=null;
+        Token lv_isDerived_11_0=null;
+        Token otherlv_12=null;
+        Token otherlv_13=null;
+        Token lv_isId_14_0=null;
+        Token otherlv_15=null;
+        Token otherlv_16=null;
+        Token lv_isOrdered_17_0=null;
+        Token otherlv_18=null;
+        Token otherlv_19=null;
+        Token lv_isReadonly_20_0=null;
+        Token otherlv_21=null;
+        Token otherlv_22=null;
+        Token lv_isTransient_23_0=null;
+        Token otherlv_24=null;
+        Token otherlv_25=null;
+        Token lv_isNotUnique_26_0=null;
         Token otherlv_27=null;
         Token otherlv_28=null;
-        Token otherlv_29=null;
+        Token lv_isUnsettable_29_0=null;
+        Token otherlv_30=null;
         Token otherlv_31=null;
+        Token lv_isVolatile_32_0=null;
         Token otherlv_33=null;
+        Token otherlv_34=null;
         Token otherlv_35=null;
         Token otherlv_36=null;
         Token otherlv_38=null;
         Token otherlv_40=null;
-        Token otherlv_41=null;
         Token otherlv_42=null;
-        AntlrDatatypeRuleToken lv_name_5_0 = null;
+        Token otherlv_43=null;
+        Token otherlv_45=null;
+        Token otherlv_47=null;
+        Token otherlv_48=null;
+        Token otherlv_49=null;
+        AntlrDatatypeRuleToken lv_name_4_0 = null;
 
-        EObject lv_ownedType_7_0 = null;
+        EObject lv_ownedType_6_0 = null;
 
-        EObject lv_ownedAnnotations_30_0 = null;
+        EObject lv_ownedAnnotations_37_0 = null;
 
-        EObject lv_ownedDefaultExpressions_34_0 = null;
+        EObject lv_ownedDefaultExpressions_41_0 = null;
 
-        EObject lv_ownedDefaultExpressions_39_0 = null;
+        EObject lv_ownedDefaultExpressions_46_0 = null;
 
 
          enterRule(); 
+        		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+        			grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 
+        			grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()
+        		);
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1088:28: ( ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'attribute' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= ':' ( (lv_ownedType_7_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_8= '=' ( (lv_default_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) ) (otherlv_27= ',' )? )+ otherlv_28= '}' )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )* otherlv_41= '}' ) | otherlv_42= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1089:1: ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'attribute' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= ':' ( (lv_ownedType_7_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_8= '=' ( (lv_default_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) ) (otherlv_27= ',' )? )+ otherlv_28= '}' )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )* otherlv_41= '}' ) | otherlv_42= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1102:28: ( ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'attribute' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= ':' ( (lv_ownedType_6_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_7= '=' ( (lv_default_8_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_36= '{' ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )* otherlv_48= '}' ) | otherlv_49= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1103:1: ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'attribute' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= ':' ( (lv_ownedType_6_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_7= '=' ( (lv_default_8_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_36= '{' ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )* otherlv_48= '}' ) | otherlv_49= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1089:1: ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'attribute' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= ':' ( (lv_ownedType_7_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_8= '=' ( (lv_default_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) ) (otherlv_27= ',' )? )+ otherlv_28= '}' )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )* otherlv_41= '}' ) | otherlv_42= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1089:2: ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'attribute' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= ':' ( (lv_ownedType_7_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_8= '=' ( (lv_default_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) ) (otherlv_27= ',' )? )+ otherlv_28= '}' )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )* otherlv_41= '}' ) | otherlv_42= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1103:1: ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'attribute' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= ':' ( (lv_ownedType_6_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_7= '=' ( (lv_default_8_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_36= '{' ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )* otherlv_48= '}' ) | otherlv_49= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1103:2: ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'attribute' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= ':' ( (lv_ownedType_6_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_7= '=' ( (lv_default_8_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_36= '{' ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )* otherlv_48= '}' ) | otherlv_49= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1089:2: ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )?
-            int alt27=3;
-            int LA27_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1103:2: ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1105:1: ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1105:1: ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1106:2: ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* )
+            {
+            getUnorderedGroupHelper().enter(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1109:2: ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1110:3: ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )*
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1110:3: ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )*
+            loop25:
+            do {
+                int alt25=3;
+                int LA25_0 = input.LA(1);
 
-            if ( (LA27_0==47) ) {
-                alt27=1;
-            }
-            else if ( (LA27_0==26) ) {
-                alt27=2;
-            }
-            switch (alt27) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1089:3: ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1089:3: ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1089:4: ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )?
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1089:4: ( (lv_qualifiers_0_0= 'static' ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1090:1: (lv_qualifiers_0_0= 'static' )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1090:1: (lv_qualifiers_0_0= 'static' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1091:3: lv_qualifiers_0_0= 'static'
-                    {
-                    lv_qualifiers_0_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleAttributeCS2440); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                              newLeafNode(lv_qualifiers_0_0, grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_0_0_0());
-                          
-                    }
-                    if ( state.backtracking==0 ) {
-
-                      	        if (current==null) {
-                      	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                      	        }
-                             		addWithLastConsumed(current, "qualifiers", lv_qualifiers_0_0, "static");
-                      	    
-                    }
-
-                    }
+                if ( LA25_0 ==47 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0) ) {
+                    alt25=1;
+                }
+                else if ( LA25_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1) ) {
+                    alt25=2;
+                }
 
 
-                    }
+                switch (alt25) {
+            	case 1 :
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1112:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1112:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1113:5: {...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+            	    {
+            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0)");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1113:108: ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1114:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+            	    {
+            	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0);
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1117:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1117:7: {...}? => ( (lv_isStatic_1_0= 'static' ) )
+            	    {
+            	    if ( !((true)) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1117:16: ( (lv_isStatic_1_0= 'static' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1118:1: (lv_isStatic_1_0= 'static' )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1118:1: (lv_isStatic_1_0= 'static' )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1119:3: lv_isStatic_1_0= 'static'
+            	    {
+            	    lv_isStatic_1_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleAttributeCS2493); if (state.failed) return current;
+            	    if ( state.backtracking==0 ) {
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1104:2: ( (lv_qualifiers_1_0= 'definition' ) )?
-                    int alt25=2;
-                    int LA25_0 = input.LA(1);
+            	              newLeafNode(lv_isStatic_1_0, grammarAccess.getAttributeCSAccess().getIsStaticStaticKeyword_0_0_0());
+            	          
+            	    }
+            	    if ( state.backtracking==0 ) {
 
-                    if ( (LA25_0==26) ) {
-                        alt25=1;
-                    }
-                    switch (alt25) {
-                        case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1105:1: (lv_qualifiers_1_0= 'definition' )
-                            {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1105:1: (lv_qualifiers_1_0= 'definition' )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1106:3: lv_qualifiers_1_0= 'definition'
-                            {
-                            lv_qualifiers_1_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleAttributeCS2471); if (state.failed) return current;
-                            if ( state.backtracking==0 ) {
+            	      	        if (current==null) {
+            	      	            current = createModelElement(grammarAccess.getAttributeCSRule());
+            	      	        }
+            	             		setWithLastConsumed(current, "isStatic", true, "static");
+            	      	    
+            	    }
 
-                                      newLeafNode(lv_qualifiers_1_0, grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_0_1_0());
-                                  
-                            }
-                            if ( state.backtracking==0 ) {
-
-                              	        if (current==null) {
-                              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                              	        }
-                                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_1_0, "definition");
-                              	    
-                            }
-
-                            }
+            	    }
 
 
-                            }
-                            break;
-
-                    }
+            	    }
 
 
-                    }
+            	    }
+
+            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+
+            	    }
 
 
-                    }
-                    break;
-                case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1120:6: ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1120:6: ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1120:7: ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )?
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1120:7: ( (lv_qualifiers_2_0= 'definition' ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1121:1: (lv_qualifiers_2_0= 'definition' )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1121:1: (lv_qualifiers_2_0= 'definition' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1122:3: lv_qualifiers_2_0= 'definition'
-                    {
-                    lv_qualifiers_2_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleAttributeCS2511); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                              newLeafNode(lv_qualifiers_2_0, grammarAccess.getAttributeCSAccess().getQualifiersDefinitionKeyword_0_1_0_0());
-                          
-                    }
-                    if ( state.backtracking==0 ) {
-
-                      	        if (current==null) {
-                      	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                      	        }
-                             		addWithLastConsumed(current, "qualifiers", lv_qualifiers_2_0, "definition");
-                      	    
-                    }
-
-                    }
+            	    }
 
 
-                    }
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1139:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1139:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1140:5: {...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+            	    {
+            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1)");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1140:108: ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1141:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+            	    {
+            	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1);
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1144:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1144:7: {...}? => ( (lv_isDefinition_2_0= 'definition' ) )
+            	    {
+            	    if ( !((true)) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1144:16: ( (lv_isDefinition_2_0= 'definition' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1145:1: (lv_isDefinition_2_0= 'definition' )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1145:1: (lv_isDefinition_2_0= 'definition' )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1146:3: lv_isDefinition_2_0= 'definition'
+            	    {
+            	    lv_isDefinition_2_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleAttributeCS2578); if (state.failed) return current;
+            	    if ( state.backtracking==0 ) {
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1135:2: ( (lv_qualifiers_3_0= 'static' ) )?
-                    int alt26=2;
-                    int LA26_0 = input.LA(1);
+            	              newLeafNode(lv_isDefinition_2_0, grammarAccess.getAttributeCSAccess().getIsDefinitionDefinitionKeyword_0_1_0());
+            	          
+            	    }
+            	    if ( state.backtracking==0 ) {
 
-                    if ( (LA26_0==47) ) {
-                        alt26=1;
-                    }
-                    switch (alt26) {
-                        case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1136:1: (lv_qualifiers_3_0= 'static' )
-                            {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1136:1: (lv_qualifiers_3_0= 'static' )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1137:3: lv_qualifiers_3_0= 'static'
-                            {
-                            lv_qualifiers_3_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleAttributeCS2542); if (state.failed) return current;
-                            if ( state.backtracking==0 ) {
+            	      	        if (current==null) {
+            	      	            current = createModelElement(grammarAccess.getAttributeCSRule());
+            	      	        }
+            	             		setWithLastConsumed(current, "isDefinition", true, "definition");
+            	      	    
+            	    }
 
-                                      newLeafNode(lv_qualifiers_3_0, grammarAccess.getAttributeCSAccess().getQualifiersStaticKeyword_0_1_1_0());
-                                  
-                            }
-                            if ( state.backtracking==0 ) {
-
-                              	        if (current==null) {
-                              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                              	        }
-                                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_3_0, "static");
-                              	    
-                            }
-
-                            }
+            	    }
 
 
-                            }
-                            break;
-
-                    }
+            	    }
 
 
-                    }
+            	    }
+
+            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+
+            	    }
 
 
-                    }
-                    break;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop25;
+                }
+            } while (true);
+
 
             }
 
-            otherlv_4=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleAttributeCS2571); if (state.failed) return current;
+
+            }
+
+            getUnorderedGroupHelper().leave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0());
+
+            }
+
+            otherlv_3=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleAttributeCS2643); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
-                  	newLeafNode(otherlv_4, grammarAccess.getAttributeCSAccess().getAttributeKeyword_1());
+                  	newLeafNode(otherlv_3, grammarAccess.getAttributeCSAccess().getAttributeKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1154:1: ( (lv_name_5_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1155:1: (lv_name_5_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1177:1: ( (lv_name_4_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1178:1: (lv_name_4_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1155:1: (lv_name_5_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1156:3: lv_name_5_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1178:1: (lv_name_4_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1179:3: lv_name_4_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getAttributeCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS2592);
-            lv_name_5_0=ruleUnrestrictedName();
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS2664);
+            lv_name_4_0=ruleUnrestrictedName();
 
             state._fsp--;
             if (state.failed) return current;
@@ -3429,7 +3445,7 @@
                      		set(
                      			current, 
                      			"name",
-                      		lv_name_5_0, 
+                      		lv_name_4_0, 
                       		"UnrestrictedName");
               	        afterParserOrEnumRuleCall();
               	    
@@ -3440,36 +3456,36 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1172:2: (otherlv_6= ':' ( (lv_ownedType_7_0= ruleTypedMultiplicityRefCS ) ) )?
-            int alt28=2;
-            int LA28_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1195:2: (otherlv_5= ':' ( (lv_ownedType_6_0= ruleTypedMultiplicityRefCS ) ) )?
+            int alt26=2;
+            int LA26_0 = input.LA(1);
 
-            if ( (LA28_0==57) ) {
-                alt28=1;
+            if ( (LA26_0==57) ) {
+                alt26=1;
             }
-            switch (alt28) {
+            switch (alt26) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1172:4: otherlv_6= ':' ( (lv_ownedType_7_0= ruleTypedMultiplicityRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1195:4: otherlv_5= ':' ( (lv_ownedType_6_0= ruleTypedMultiplicityRefCS ) )
                     {
-                    otherlv_6=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleAttributeCS2605); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleAttributeCS2677); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_6, grammarAccess.getAttributeCSAccess().getColonKeyword_3_0());
+                          	newLeafNode(otherlv_5, grammarAccess.getAttributeCSAccess().getColonKeyword_3_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1176:1: ( (lv_ownedType_7_0= ruleTypedMultiplicityRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1177:1: (lv_ownedType_7_0= ruleTypedMultiplicityRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1199:1: ( (lv_ownedType_6_0= ruleTypedMultiplicityRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1200:1: (lv_ownedType_6_0= ruleTypedMultiplicityRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1177:1: (lv_ownedType_7_0= ruleTypedMultiplicityRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1178:3: lv_ownedType_7_0= ruleTypedMultiplicityRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1200:1: (lv_ownedType_6_0= ruleTypedMultiplicityRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1201:3: lv_ownedType_6_0= ruleTypedMultiplicityRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getAttributeCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_3_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_ruleAttributeCS2626);
-                    lv_ownedType_7_0=ruleTypedMultiplicityRefCS();
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_ruleAttributeCS2698);
+                    lv_ownedType_6_0=ruleTypedMultiplicityRefCS();
 
                     state._fsp--;
                     if (state.failed) return current;
@@ -3481,7 +3497,7 @@
                              		set(
                              			current, 
                              			"ownedType",
-                              		lv_ownedType_7_0, 
+                              		lv_ownedType_6_0, 
                               		"TypedMultiplicityRefCS");
                       	        afterParserOrEnumRuleCall();
                       	    
@@ -3498,33 +3514,33 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1194:4: (otherlv_8= '=' ( (lv_default_9_0= RULE_SINGLE_QUOTED_STRING ) ) )?
-            int alt29=2;
-            int LA29_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1217:4: (otherlv_7= '=' ( (lv_default_8_0= RULE_SINGLE_QUOTED_STRING ) ) )?
+            int alt27=2;
+            int LA27_0 = input.LA(1);
 
-            if ( (LA29_0==63) ) {
-                alt29=1;
+            if ( (LA27_0==63) ) {
+                alt27=1;
             }
-            switch (alt29) {
+            switch (alt27) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1194:6: otherlv_8= '=' ( (lv_default_9_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1217:6: otherlv_7= '=' ( (lv_default_8_0= RULE_SINGLE_QUOTED_STRING ) )
                     {
-                    otherlv_8=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleAttributeCS2641); if (state.failed) return current;
+                    otherlv_7=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleAttributeCS2713); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_8, grammarAccess.getAttributeCSAccess().getEqualsSignKeyword_4_0());
+                          	newLeafNode(otherlv_7, grammarAccess.getAttributeCSAccess().getEqualsSignKeyword_4_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1198:1: ( (lv_default_9_0= RULE_SINGLE_QUOTED_STRING ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1199:1: (lv_default_9_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1221:1: ( (lv_default_8_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1222:1: (lv_default_8_0= RULE_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1199:1: (lv_default_9_0= RULE_SINGLE_QUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1200:3: lv_default_9_0= RULE_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1222:1: (lv_default_8_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1223:3: lv_default_8_0= RULE_SINGLE_QUOTED_STRING
                     {
-                    lv_default_9_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleAttributeCS2658); if (state.failed) return current;
+                    lv_default_8_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleAttributeCS2730); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			newLeafNode(lv_default_9_0, grammarAccess.getAttributeCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0()); 
+                      			newLeafNode(lv_default_8_0, grammarAccess.getAttributeCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0()); 
                       		
                     }
                     if ( state.backtracking==0 ) {
@@ -3535,7 +3551,7 @@
                              		setWithLastConsumed(
                              			current, 
                              			"default",
-                              		lv_default_9_0, 
+                              		lv_default_8_0, 
                               		"SINGLE_QUOTED_STRING");
                       	    
                     }
@@ -3551,148 +3567,233 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1216:4: (otherlv_10= '{' ( ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) ) (otherlv_27= ',' )? )+ otherlv_28= '}' )?
-            int alt33=2;
-            int LA33_0 = input.LA(1);
-
-            if ( (LA33_0==61) ) {
-                int LA33_1 = input.LA(2);
-
-                if ( (LA33_1==28||LA33_1==31||LA33_1==38||LA33_1==44||(LA33_1>=50 && LA33_1<=53)||(LA33_1>=64 && LA33_1<=71)) ) {
-                    alt33=1;
-                }
-            }
-            switch (alt33) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1239:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) ) )?
+            int alt47=2;
+            alt47 = dfa47.predict(input);
+            switch (alt47) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1216:6: otherlv_10= '{' ( ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) ) (otherlv_27= ',' )? )+ otherlv_28= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1241:1: ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) )
                     {
-                    otherlv_10=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleAttributeCS2678); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                          	newLeafNode(otherlv_10, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0());
-                          
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1220:1: ( ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) ) (otherlv_27= ',' )? )+
-                    int cnt32=0;
-                    loop32:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1241:1: ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1242:2: ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?)
+                    {
+                    getUnorderedGroupHelper().enter(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1245:2: ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?)
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1246:3: ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1246:3: ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+
+                    int cnt46=0;
+                    loop46:
                     do {
-                        int alt32=2;
-                        int LA32_0 = input.LA(1);
-
-                        if ( (LA32_0==28||LA32_0==31||LA32_0==38||LA32_0==44||(LA32_0>=50 && LA32_0<=53)||(LA32_0>=64 && LA32_0<=71)) ) {
-                            alt32=1;
-                        }
-
-
-                        switch (alt32) {
+                        int alt46=9;
+                        alt46 = dfa46.predict(input);
+                        switch (alt46) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1220:2: ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) ) (otherlv_27= ',' )?
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1248:4: ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1220:2: ( ( (lv_qualifiers_11_0= 'derived' ) ) | ( (lv_qualifiers_12_0= '!derived' ) ) | ( (lv_qualifiers_13_0= 'id' ) ) | ( (lv_qualifiers_14_0= '!id' ) ) | ( (lv_qualifiers_15_0= 'ordered' ) ) | ( (lv_qualifiers_16_0= '!ordered' ) ) | ( (lv_qualifiers_17_0= 'readonly' ) ) | ( (lv_qualifiers_18_0= '!readonly' ) ) | ( (lv_qualifiers_19_0= 'transient' ) ) | ( (lv_qualifiers_20_0= '!transient' ) ) | ( (lv_qualifiers_21_0= 'unique' ) ) | ( (lv_qualifiers_22_0= '!unique' ) ) | ( (lv_qualifiers_23_0= 'unsettable' ) ) | ( (lv_qualifiers_24_0= '!unsettable' ) ) | ( (lv_qualifiers_25_0= 'volatile' ) ) | ( (lv_qualifiers_26_0= '!volatile' ) ) )
-                    	    int alt30=16;
-                    	    switch ( input.LA(1) ) {
-                    	    case 28:
-                    	        {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1248:4: ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1249:5: {...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1249:108: ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1250:6: ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:6: ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:7: {...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:16: (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:18: otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )?
+                    	    {
+                    	    otherlv_10=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleAttributeCS2795); if (state.failed) return current;
+                    	    if ( state.backtracking==0 ) {
+
+                    	          	newLeafNode(otherlv_10, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0());
+                    	          
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:1: ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )?
+                    	    int alt30=2;
+                    	    int LA30_0 = input.LA(1);
+
+                    	    if ( (LA30_0==28||LA30_0==64) ) {
                     	        alt30=1;
-                    	        }
-                    	        break;
-                    	    case 64:
-                    	        {
-                    	        alt30=2;
-                    	        }
-                    	        break;
-                    	    case 31:
-                    	        {
-                    	        alt30=3;
-                    	        }
-                    	        break;
-                    	    case 65:
-                    	        {
-                    	        alt30=4;
-                    	        }
-                    	        break;
-                    	    case 38:
-                    	        {
-                    	        alt30=5;
-                    	        }
-                    	        break;
-                    	    case 66:
-                    	        {
-                    	        alt30=6;
-                    	        }
-                    	        break;
-                    	    case 44:
-                    	        {
-                    	        alt30=7;
-                    	        }
-                    	        break;
-                    	    case 67:
-                    	        {
-                    	        alt30=8;
-                    	        }
-                    	        break;
-                    	    case 50:
-                    	        {
-                    	        alt30=9;
-                    	        }
-                    	        break;
-                    	    case 68:
-                    	        {
-                    	        alt30=10;
-                    	        }
-                    	        break;
-                    	    case 51:
-                    	        {
-                    	        alt30=11;
-                    	        }
-                    	        break;
-                    	    case 69:
-                    	        {
-                    	        alt30=12;
-                    	        }
-                    	        break;
-                    	    case 52:
-                    	        {
-                    	        alt30=13;
-                    	        }
-                    	        break;
-                    	    case 70:
-                    	        {
-                    	        alt30=14;
-                    	        }
-                    	        break;
-                    	    case 53:
-                    	        {
-                    	        alt30=15;
-                    	        }
-                    	        break;
-                    	    case 71:
-                    	        {
-                    	        alt30=16;
-                    	        }
-                    	        break;
-                    	    default:
+                    	    }
+                    	    switch (alt30) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:2: ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )?
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:2: ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' )
+                    	            int alt28=2;
+                    	            int LA28_0 = input.LA(1);
+
+                    	            if ( (LA28_0==28) ) {
+                    	                alt28=1;
+                    	            }
+                    	            else if ( (LA28_0==64) ) {
+                    	                alt28=2;
+                    	            }
+                    	            else {
+                    	                if (state.backtracking>0) {state.failed=true; return current;}
+                    	                NoViableAltException nvae =
+                    	                    new NoViableAltException("", 28, 0, input);
+
+                    	                throw nvae;
+                    	            }
+                    	            switch (alt28) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:3: ( (lv_isDerived_11_0= 'derived' ) )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:3: ( (lv_isDerived_11_0= 'derived' ) )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1258:1: (lv_isDerived_11_0= 'derived' )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1258:1: (lv_isDerived_11_0= 'derived' )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1259:3: lv_isDerived_11_0= 'derived'
+                    	                    {
+                    	                    lv_isDerived_11_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_ruleAttributeCS2815); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                              newLeafNode(lv_isDerived_11_0, grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0());
+                    	                          
+                    	                    }
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                      	        if (current==null) {
+                    	                      	            current = createModelElement(grammarAccess.getAttributeCSRule());
+                    	                      	        }
+                    	                             		setWithLastConsumed(current, "isDerived", true, "derived");
+                    	                      	    
+                    	                    }
+
+                    	                    }
+
+
+                    	                    }
+
+
+                    	                    }
+                    	                    break;
+                    	                case 2 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1273:7: otherlv_12= '!derived'
+                    	                    {
+                    	                    otherlv_12=(Token)match(input,64,FollowSets000.FOLLOW_64_in_ruleAttributeCS2846); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_12, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1277:2: (otherlv_13= ',' )?
+                    	            int alt29=2;
+                    	            int LA29_0 = input.LA(1);
+
+                    	            if ( (LA29_0==60) ) {
+                    	                alt29=1;
+                    	            }
+                    	            switch (alt29) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1277:4: otherlv_13= ','
+                    	                    {
+                    	                    otherlv_13=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAttributeCS2860); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_13, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1288:4: ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1288:4: ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1289:5: {...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1289:108: ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1290:6: ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:6: ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:7: {...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:16: ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:17: ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:17: ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' )
+                    	    int alt31=2;
+                    	    int LA31_0 = input.LA(1);
+
+                    	    if ( (LA31_0==31) ) {
+                    	        alt31=1;
+                    	    }
+                    	    else if ( (LA31_0==65) ) {
+                    	        alt31=2;
+                    	    }
+                    	    else {
                     	        if (state.backtracking>0) {state.failed=true; return current;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("", 30, 0, input);
+                    	            new NoViableAltException("", 31, 0, input);
 
                     	        throw nvae;
                     	    }
-
-                    	    switch (alt30) {
+                    	    switch (alt31) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1220:3: ( (lv_qualifiers_11_0= 'derived' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:18: ( (lv_isId_14_0= 'id' ) )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1220:3: ( (lv_qualifiers_11_0= 'derived' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1221:1: (lv_qualifiers_11_0= 'derived' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:18: ( (lv_isId_14_0= 'id' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1294:1: (lv_isId_14_0= 'id' )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1221:1: (lv_qualifiers_11_0= 'derived' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1222:3: lv_qualifiers_11_0= 'derived'
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1294:1: (lv_isId_14_0= 'id' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1295:3: lv_isId_14_0= 'id'
                     	            {
-                    	            lv_qualifiers_11_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_ruleAttributeCS2698); if (state.failed) return current;
+                    	            lv_isId_14_0=(Token)match(input,31,FollowSets000.FOLLOW_31_in_ruleAttributeCS2939); if (state.failed) return current;
                     	            if ( state.backtracking==0 ) {
 
-                    	                      newLeafNode(lv_qualifiers_11_0, grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_0_0());
+                    	                      newLeafNode(lv_isId_14_0, grammarAccess.getAttributeCSAccess().getIsIdIdKeyword_5_1_0_0_0());
                     	                  
                     	            }
                     	            if ( state.backtracking==0 ) {
@@ -3700,7 +3801,7 @@
                     	              	        if (current==null) {
                     	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
                     	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_11_0, "derived");
+                    	                     		setWithLastConsumed(current, "isId", true, "id");
                     	              	    
                     	            }
 
@@ -3713,503 +3814,35 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1236:6: ( (lv_qualifiers_12_0= '!derived' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1309:7: otherlv_15= '!id'
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1236:6: ( (lv_qualifiers_12_0= '!derived' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1237:1: (lv_qualifiers_12_0= '!derived' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1237:1: (lv_qualifiers_12_0= '!derived' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1238:3: lv_qualifiers_12_0= '!derived'
-                    	            {
-                    	            lv_qualifiers_12_0=(Token)match(input,64,FollowSets000.FOLLOW_64_in_ruleAttributeCS2735); if (state.failed) return current;
+                    	            otherlv_15=(Token)match(input,65,FollowSets000.FOLLOW_65_in_ruleAttributeCS2970); if (state.failed) return current;
                     	            if ( state.backtracking==0 ) {
 
-                    	                      newLeafNode(lv_qualifiers_12_0, grammarAccess.getAttributeCSAccess().getQualifiersDerivedKeyword_5_1_0_1_0());
+                    	                  	newLeafNode(otherlv_15, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1());
                     	                  
                     	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_12_0, "!derived");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 3 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1252:6: ( (lv_qualifiers_13_0= 'id' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1252:6: ( (lv_qualifiers_13_0= 'id' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:1: (lv_qualifiers_13_0= 'id' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:1: (lv_qualifiers_13_0= 'id' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1254:3: lv_qualifiers_13_0= 'id'
-                    	            {
-                    	            lv_qualifiers_13_0=(Token)match(input,31,FollowSets000.FOLLOW_31_in_ruleAttributeCS2772); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_13_0, grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_2_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_13_0, "id");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 4 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1268:6: ( (lv_qualifiers_14_0= '!id' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1268:6: ( (lv_qualifiers_14_0= '!id' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1269:1: (lv_qualifiers_14_0= '!id' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1269:1: (lv_qualifiers_14_0= '!id' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1270:3: lv_qualifiers_14_0= '!id'
-                    	            {
-                    	            lv_qualifiers_14_0=(Token)match(input,65,FollowSets000.FOLLOW_65_in_ruleAttributeCS2809); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_14_0, grammarAccess.getAttributeCSAccess().getQualifiersIdKeyword_5_1_0_3_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_14_0, "!id");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 5 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1284:6: ( (lv_qualifiers_15_0= 'ordered' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1284:6: ( (lv_qualifiers_15_0= 'ordered' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1285:1: (lv_qualifiers_15_0= 'ordered' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1285:1: (lv_qualifiers_15_0= 'ordered' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1286:3: lv_qualifiers_15_0= 'ordered'
-                    	            {
-                    	            lv_qualifiers_15_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleAttributeCS2846); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_15_0, grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_4_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_15_0, "ordered");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 6 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1300:6: ( (lv_qualifiers_16_0= '!ordered' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1300:6: ( (lv_qualifiers_16_0= '!ordered' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1301:1: (lv_qualifiers_16_0= '!ordered' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1301:1: (lv_qualifiers_16_0= '!ordered' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1302:3: lv_qualifiers_16_0= '!ordered'
-                    	            {
-                    	            lv_qualifiers_16_0=(Token)match(input,66,FollowSets000.FOLLOW_66_in_ruleAttributeCS2883); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_16_0, grammarAccess.getAttributeCSAccess().getQualifiersOrderedKeyword_5_1_0_5_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_16_0, "!ordered");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 7 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1316:6: ( (lv_qualifiers_17_0= 'readonly' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1316:6: ( (lv_qualifiers_17_0= 'readonly' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1317:1: (lv_qualifiers_17_0= 'readonly' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1317:1: (lv_qualifiers_17_0= 'readonly' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1318:3: lv_qualifiers_17_0= 'readonly'
-                    	            {
-                    	            lv_qualifiers_17_0=(Token)match(input,44,FollowSets000.FOLLOW_44_in_ruleAttributeCS2920); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_17_0, grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_6_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_17_0, "readonly");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 8 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1332:6: ( (lv_qualifiers_18_0= '!readonly' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1332:6: ( (lv_qualifiers_18_0= '!readonly' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1333:1: (lv_qualifiers_18_0= '!readonly' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1333:1: (lv_qualifiers_18_0= '!readonly' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1334:3: lv_qualifiers_18_0= '!readonly'
-                    	            {
-                    	            lv_qualifiers_18_0=(Token)match(input,67,FollowSets000.FOLLOW_67_in_ruleAttributeCS2957); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_18_0, grammarAccess.getAttributeCSAccess().getQualifiersReadonlyKeyword_5_1_0_7_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_18_0, "!readonly");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 9 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1348:6: ( (lv_qualifiers_19_0= 'transient' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1348:6: ( (lv_qualifiers_19_0= 'transient' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1349:1: (lv_qualifiers_19_0= 'transient' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1349:1: (lv_qualifiers_19_0= 'transient' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1350:3: lv_qualifiers_19_0= 'transient'
-                    	            {
-                    	            lv_qualifiers_19_0=(Token)match(input,50,FollowSets000.FOLLOW_50_in_ruleAttributeCS2994); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_19_0, grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_8_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_19_0, "transient");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 10 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1364:6: ( (lv_qualifiers_20_0= '!transient' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1364:6: ( (lv_qualifiers_20_0= '!transient' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:1: (lv_qualifiers_20_0= '!transient' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:1: (lv_qualifiers_20_0= '!transient' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1366:3: lv_qualifiers_20_0= '!transient'
-                    	            {
-                    	            lv_qualifiers_20_0=(Token)match(input,68,FollowSets000.FOLLOW_68_in_ruleAttributeCS3031); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_20_0, grammarAccess.getAttributeCSAccess().getQualifiersTransientKeyword_5_1_0_9_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_20_0, "!transient");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 11 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1380:6: ( (lv_qualifiers_21_0= 'unique' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1380:6: ( (lv_qualifiers_21_0= 'unique' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1381:1: (lv_qualifiers_21_0= 'unique' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1381:1: (lv_qualifiers_21_0= 'unique' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1382:3: lv_qualifiers_21_0= 'unique'
-                    	            {
-                    	            lv_qualifiers_21_0=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleAttributeCS3068); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_21_0, grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_10_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_21_0, "unique");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 12 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1396:6: ( (lv_qualifiers_22_0= '!unique' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1396:6: ( (lv_qualifiers_22_0= '!unique' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1397:1: (lv_qualifiers_22_0= '!unique' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1397:1: (lv_qualifiers_22_0= '!unique' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1398:3: lv_qualifiers_22_0= '!unique'
-                    	            {
-                    	            lv_qualifiers_22_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_ruleAttributeCS3105); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_22_0, grammarAccess.getAttributeCSAccess().getQualifiersUniqueKeyword_5_1_0_11_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_22_0, "!unique");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 13 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1412:6: ( (lv_qualifiers_23_0= 'unsettable' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1412:6: ( (lv_qualifiers_23_0= 'unsettable' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1413:1: (lv_qualifiers_23_0= 'unsettable' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1413:1: (lv_qualifiers_23_0= 'unsettable' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1414:3: lv_qualifiers_23_0= 'unsettable'
-                    	            {
-                    	            lv_qualifiers_23_0=(Token)match(input,52,FollowSets000.FOLLOW_52_in_ruleAttributeCS3142); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_23_0, grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_12_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_23_0, "unsettable");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 14 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1428:6: ( (lv_qualifiers_24_0= '!unsettable' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1428:6: ( (lv_qualifiers_24_0= '!unsettable' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1429:1: (lv_qualifiers_24_0= '!unsettable' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1429:1: (lv_qualifiers_24_0= '!unsettable' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1430:3: lv_qualifiers_24_0= '!unsettable'
-                    	            {
-                    	            lv_qualifiers_24_0=(Token)match(input,70,FollowSets000.FOLLOW_70_in_ruleAttributeCS3179); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_24_0, grammarAccess.getAttributeCSAccess().getQualifiersUnsettableKeyword_5_1_0_13_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_24_0, "!unsettable");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 15 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1444:6: ( (lv_qualifiers_25_0= 'volatile' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1444:6: ( (lv_qualifiers_25_0= 'volatile' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1445:1: (lv_qualifiers_25_0= 'volatile' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1445:1: (lv_qualifiers_25_0= 'volatile' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1446:3: lv_qualifiers_25_0= 'volatile'
-                    	            {
-                    	            lv_qualifiers_25_0=(Token)match(input,53,FollowSets000.FOLLOW_53_in_ruleAttributeCS3216); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_25_0, grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_14_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_25_0, "volatile");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 16 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1460:6: ( (lv_qualifiers_26_0= '!volatile' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1460:6: ( (lv_qualifiers_26_0= '!volatile' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1461:1: (lv_qualifiers_26_0= '!volatile' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1461:1: (lv_qualifiers_26_0= '!volatile' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1462:3: lv_qualifiers_26_0= '!volatile'
-                    	            {
-                    	            lv_qualifiers_26_0=(Token)match(input,71,FollowSets000.FOLLOW_71_in_ruleAttributeCS3253); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_26_0, grammarAccess.getAttributeCSAccess().getQualifiersVolatileKeyword_5_1_0_15_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_26_0, "!volatile");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
 
                     	            }
                     	            break;
 
                     	    }
 
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1475:3: (otherlv_27= ',' )?
-                    	    int alt31=2;
-                    	    int LA31_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1313:2: (otherlv_16= ',' )?
+                    	    int alt32=2;
+                    	    int LA32_0 = input.LA(1);
 
-                    	    if ( (LA31_0==60) ) {
-                    	        alt31=1;
+                    	    if ( (LA32_0==60) ) {
+                    	        alt32=1;
                     	    }
-                    	    switch (alt31) {
+                    	    switch (alt32) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1475:5: otherlv_27= ','
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1313:4: otherlv_16= ','
                     	            {
-                    	            otherlv_27=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAttributeCS3280); if (state.failed) return current;
+                    	            otherlv_16=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAttributeCS2984); if (state.failed) return current;
                     	            if ( state.backtracking==0 ) {
 
-                    	                  	newLeafNode(otherlv_27, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1());
+                    	                  	newLeafNode(otherlv_16, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1());
                     	                  
                     	            }
 
@@ -4220,102 +3853,911 @@
 
 
                     	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 3 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1324:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1324:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1325:5: {...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1325:108: ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1326:6: ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:6: ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:7: {...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:16: ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:17: ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:17: ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' )
+                    	    int alt33=2;
+                    	    int LA33_0 = input.LA(1);
+
+                    	    if ( (LA33_0==38) ) {
+                    	        alt33=1;
+                    	    }
+                    	    else if ( (LA33_0==66) ) {
+                    	        alt33=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 33, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt33) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:18: ( (lv_isOrdered_17_0= 'ordered' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:18: ( (lv_isOrdered_17_0= 'ordered' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1330:1: (lv_isOrdered_17_0= 'ordered' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1330:1: (lv_isOrdered_17_0= 'ordered' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1331:3: lv_isOrdered_17_0= 'ordered'
+                    	            {
+                    	            lv_isOrdered_17_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleAttributeCS3061); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isOrdered_17_0, grammarAccess.getAttributeCSAccess().getIsOrderedOrderedKeyword_5_2_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isOrdered", true, "ordered");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1345:7: otherlv_18= '!ordered'
+                    	            {
+                    	            otherlv_18=(Token)match(input,66,FollowSets000.FOLLOW_66_in_ruleAttributeCS3092); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_18, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1349:2: (otherlv_19= ',' )?
+                    	    int alt34=2;
+                    	    int LA34_0 = input.LA(1);
+
+                    	    if ( (LA34_0==60) ) {
+                    	        alt34=1;
+                    	    }
+                    	    switch (alt34) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1349:4: otherlv_19= ','
+                    	            {
+                    	            otherlv_19=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAttributeCS3106); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_19, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 4 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1360:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1360:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1361:5: {...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1361:108: ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1362:6: ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:6: ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:7: {...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:16: ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:17: ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:17: ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' )
+                    	    int alt35=2;
+                    	    int LA35_0 = input.LA(1);
+
+                    	    if ( (LA35_0==44) ) {
+                    	        alt35=1;
+                    	    }
+                    	    else if ( (LA35_0==67) ) {
+                    	        alt35=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 35, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt35) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:18: ( (lv_isReadonly_20_0= 'readonly' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:18: ( (lv_isReadonly_20_0= 'readonly' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1366:1: (lv_isReadonly_20_0= 'readonly' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1366:1: (lv_isReadonly_20_0= 'readonly' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1367:3: lv_isReadonly_20_0= 'readonly'
+                    	            {
+                    	            lv_isReadonly_20_0=(Token)match(input,44,FollowSets000.FOLLOW_44_in_ruleAttributeCS3183); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isReadonly_20_0, grammarAccess.getAttributeCSAccess().getIsReadonlyReadonlyKeyword_5_3_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isReadonly", true, "readonly");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1381:7: otherlv_21= '!readonly'
+                    	            {
+                    	            otherlv_21=(Token)match(input,67,FollowSets000.FOLLOW_67_in_ruleAttributeCS3214); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_21, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1385:2: (otherlv_22= ',' )?
+                    	    int alt36=2;
+                    	    int LA36_0 = input.LA(1);
+
+                    	    if ( (LA36_0==60) ) {
+                    	        alt36=1;
+                    	    }
+                    	    switch (alt36) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1385:4: otherlv_22= ','
+                    	            {
+                    	            otherlv_22=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAttributeCS3228); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_22, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 5 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1396:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1396:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1397:5: {...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1397:108: ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1398:6: ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:6: ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:7: {...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:16: ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:17: ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:17: ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' )
+                    	    int alt37=2;
+                    	    int LA37_0 = input.LA(1);
+
+                    	    if ( (LA37_0==50) ) {
+                    	        alt37=1;
+                    	    }
+                    	    else if ( (LA37_0==68) ) {
+                    	        alt37=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 37, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt37) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:18: ( (lv_isTransient_23_0= 'transient' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:18: ( (lv_isTransient_23_0= 'transient' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1402:1: (lv_isTransient_23_0= 'transient' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1402:1: (lv_isTransient_23_0= 'transient' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1403:3: lv_isTransient_23_0= 'transient'
+                    	            {
+                    	            lv_isTransient_23_0=(Token)match(input,50,FollowSets000.FOLLOW_50_in_ruleAttributeCS3305); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isTransient_23_0, grammarAccess.getAttributeCSAccess().getIsTransientTransientKeyword_5_4_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isTransient", true, "transient");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1417:7: otherlv_24= '!transient'
+                    	            {
+                    	            otherlv_24=(Token)match(input,68,FollowSets000.FOLLOW_68_in_ruleAttributeCS3336); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_24, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1421:2: (otherlv_25= ',' )?
+                    	    int alt38=2;
+                    	    int LA38_0 = input.LA(1);
+
+                    	    if ( (LA38_0==60) ) {
+                    	        alt38=1;
+                    	    }
+                    	    switch (alt38) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1421:4: otherlv_25= ','
+                    	            {
+                    	            otherlv_25=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAttributeCS3350); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_25, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 6 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1432:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1432:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1433:5: {...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1433:108: ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1434:6: ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:6: ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:7: {...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:16: ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:17: ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:17: ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' )
+                    	    int alt39=2;
+                    	    int LA39_0 = input.LA(1);
+
+                    	    if ( (LA39_0==69) ) {
+                    	        alt39=1;
+                    	    }
+                    	    else if ( (LA39_0==51) ) {
+                    	        alt39=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 39, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt39) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:18: ( (lv_isNotUnique_26_0= '!unique' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:18: ( (lv_isNotUnique_26_0= '!unique' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1438:1: (lv_isNotUnique_26_0= '!unique' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1438:1: (lv_isNotUnique_26_0= '!unique' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1439:3: lv_isNotUnique_26_0= '!unique'
+                    	            {
+                    	            lv_isNotUnique_26_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_ruleAttributeCS3427); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isNotUnique_26_0, grammarAccess.getAttributeCSAccess().getIsNotUniqueUniqueKeyword_5_5_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isNotUnique", true, "!unique");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1453:7: otherlv_27= 'unique'
+                    	            {
+                    	            otherlv_27=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleAttributeCS3458); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_27, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1457:2: (otherlv_28= ',' )?
+                    	    int alt40=2;
+                    	    int LA40_0 = input.LA(1);
+
+                    	    if ( (LA40_0==60) ) {
+                    	        alt40=1;
+                    	    }
+                    	    switch (alt40) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1457:4: otherlv_28= ','
+                    	            {
+                    	            otherlv_28=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAttributeCS3472); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_28, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 7 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1468:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1468:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1469:5: {...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1469:108: ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1470:6: ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:6: ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:7: {...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:16: ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:17: ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:17: ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' )
+                    	    int alt41=2;
+                    	    int LA41_0 = input.LA(1);
+
+                    	    if ( (LA41_0==52) ) {
+                    	        alt41=1;
+                    	    }
+                    	    else if ( (LA41_0==70) ) {
+                    	        alt41=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 41, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt41) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:18: ( (lv_isUnsettable_29_0= 'unsettable' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:18: ( (lv_isUnsettable_29_0= 'unsettable' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1474:1: (lv_isUnsettable_29_0= 'unsettable' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1474:1: (lv_isUnsettable_29_0= 'unsettable' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1475:3: lv_isUnsettable_29_0= 'unsettable'
+                    	            {
+                    	            lv_isUnsettable_29_0=(Token)match(input,52,FollowSets000.FOLLOW_52_in_ruleAttributeCS3549); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isUnsettable_29_0, grammarAccess.getAttributeCSAccess().getIsUnsettableUnsettableKeyword_5_6_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getAttributeCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isUnsettable", true, "unsettable");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1489:7: otherlv_30= '!unsettable'
+                    	            {
+                    	            otherlv_30=(Token)match(input,70,FollowSets000.FOLLOW_70_in_ruleAttributeCS3580); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_30, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1493:2: (otherlv_31= ',' )?
+                    	    int alt42=2;
+                    	    int LA42_0 = input.LA(1);
+
+                    	    if ( (LA42_0==60) ) {
+                    	        alt42=1;
+                    	    }
+                    	    switch (alt42) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1493:4: otherlv_31= ','
+                    	            {
+                    	            otherlv_31=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAttributeCS3594); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_31, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 8 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1504:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1504:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1505:5: {...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1505:108: ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1506:6: ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:6: ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:7: {...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleAttributeCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:16: ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:17: ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}'
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:17: ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )?
+                    	    int alt45=2;
+                    	    int LA45_0 = input.LA(1);
+
+                    	    if ( (LA45_0==53||LA45_0==71) ) {
+                    	        alt45=1;
+                    	    }
+                    	    switch (alt45) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:18: ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )?
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:18: ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' )
+                    	            int alt43=2;
+                    	            int LA43_0 = input.LA(1);
+
+                    	            if ( (LA43_0==53) ) {
+                    	                alt43=1;
+                    	            }
+                    	            else if ( (LA43_0==71) ) {
+                    	                alt43=2;
+                    	            }
+                    	            else {
+                    	                if (state.backtracking>0) {state.failed=true; return current;}
+                    	                NoViableAltException nvae =
+                    	                    new NoViableAltException("", 43, 0, input);
+
+                    	                throw nvae;
+                    	            }
+                    	            switch (alt43) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:19: ( (lv_isVolatile_32_0= 'volatile' ) )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:19: ( (lv_isVolatile_32_0= 'volatile' ) )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1510:1: (lv_isVolatile_32_0= 'volatile' )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1510:1: (lv_isVolatile_32_0= 'volatile' )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1511:3: lv_isVolatile_32_0= 'volatile'
+                    	                    {
+                    	                    lv_isVolatile_32_0=(Token)match(input,53,FollowSets000.FOLLOW_53_in_ruleAttributeCS3672); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                              newLeafNode(lv_isVolatile_32_0, grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0());
+                    	                          
+                    	                    }
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                      	        if (current==null) {
+                    	                      	            current = createModelElement(grammarAccess.getAttributeCSRule());
+                    	                      	        }
+                    	                             		setWithLastConsumed(current, "isVolatile", true, "volatile");
+                    	                      	    
+                    	                    }
+
+                    	                    }
+
+
+                    	                    }
+
+
+                    	                    }
+                    	                    break;
+                    	                case 2 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1525:7: otherlv_33= '!volatile'
+                    	                    {
+                    	                    otherlv_33=(Token)match(input,71,FollowSets000.FOLLOW_71_in_ruleAttributeCS3703); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_33, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1529:2: (otherlv_34= ',' )?
+                    	            int alt44=2;
+                    	            int LA44_0 = input.LA(1);
+
+                    	            if ( (LA44_0==60) ) {
+                    	                alt44=1;
+                    	            }
+                    	            switch (alt44) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1529:4: otherlv_34= ','
+                    	                    {
+                    	                    otherlv_34=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleAttributeCS3717); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_34, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    otherlv_35=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleAttributeCS3733); if (state.failed) return current;
+                    	    if ( state.backtracking==0 ) {
+
+                    	          	newLeafNode(otherlv_35, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1());
+                    	          
+                    	    }
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt32 >= 1 ) break loop32;
+                    	    if ( cnt46 >= 1 ) break loop46;
                     	    if (state.backtracking>0) {state.failed=true; return current;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(32, input);
+                                    new EarlyExitException(46, input);
                                 throw eee;
                         }
-                        cnt32++;
+                        cnt46++;
                     } while (true);
 
-                    otherlv_28=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleAttributeCS3296); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                          	newLeafNode(otherlv_28, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_2());
-                          
+                    if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()) ) {
+                        if (state.backtracking>0) {state.failed=true; return current;}
+                        throw new FailedPredicateException(input, "ruleAttributeCS", "getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5())");
                     }
 
                     }
+
+
+                    }
+
+                    getUnorderedGroupHelper().leave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+
+                    }
                     break;
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1483:3: ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )* otherlv_41= '}' ) | otherlv_42= ';' )
-            int alt39=2;
-            int LA39_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1552:3: ( (otherlv_36= '{' ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )* otherlv_48= '}' ) | otherlv_49= ';' )
+            int alt53=2;
+            int LA53_0 = input.LA(1);
 
-            if ( (LA39_0==61) ) {
-                alt39=1;
+            if ( (LA53_0==61) ) {
+                alt53=1;
             }
-            else if ( (LA39_0==58) ) {
-                alt39=2;
+            else if ( (LA53_0==58) ) {
+                alt53=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 39, 0, input);
+                    new NoViableAltException("", 53, 0, input);
 
                 throw nvae;
             }
-            switch (alt39) {
+            switch (alt53) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1483:4: (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )* otherlv_41= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1552:4: (otherlv_36= '{' ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )* otherlv_48= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1483:4: (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )* otherlv_41= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1483:6: otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )* otherlv_41= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1552:4: (otherlv_36= '{' ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )* otherlv_48= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1552:6: otherlv_36= '{' ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )* otherlv_48= '}'
                     {
-                    otherlv_29=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleAttributeCS3312); if (state.failed) return current;
+                    otherlv_36=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleAttributeCS3795); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_29, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_6_0_0());
+                          	newLeafNode(otherlv_36, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_6_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1487:1: ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' ) | (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' ) )*
-                    loop38:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1556:1: ( ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) ) | (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' ) | (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' ) )*
+                    loop52:
                     do {
-                        int alt38=4;
+                        int alt52=4;
                         switch ( input.LA(1) ) {
                         case 59:
                         case 74:
                         case 80:
                             {
-                            alt38=1;
+                            alt52=1;
                             }
                             break;
                         case 27:
                             {
-                            alt38=2;
+                            alt52=2;
                             }
                             break;
                         case 33:
                             {
-                            alt38=3;
+                            alt52=3;
                             }
                             break;
 
                         }
 
-                        switch (alt38) {
+                        switch (alt52) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1487:2: ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1556:2: ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1487:2: ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1488:1: (lv_ownedAnnotations_30_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1556:2: ( (lv_ownedAnnotations_37_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1557:1: (lv_ownedAnnotations_37_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1488:1: (lv_ownedAnnotations_30_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1489:3: lv_ownedAnnotations_30_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1557:1: (lv_ownedAnnotations_37_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1558:3: lv_ownedAnnotations_37_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getAttributeCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_6_0_1_0_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleAttributeCS3334);
-                    	    lv_ownedAnnotations_30_0=ruleAnnotationElementCS();
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleAttributeCS3817);
+                    	    lv_ownedAnnotations_37_0=ruleAnnotationElementCS();
 
                     	    state._fsp--;
                     	    if (state.failed) return current;
@@ -4327,7 +4769,7 @@
                     	             		add(
                     	             			current, 
                     	             			"ownedAnnotations",
-                    	              		lv_ownedAnnotations_30_0, 
+                    	              		lv_ownedAnnotations_37_0, 
                     	              		"AnnotationElementCS");
                     	      	        afterParserOrEnumRuleCall();
                     	      	    
@@ -4342,27 +4784,27 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1506:6: (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1575:6: (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1506:6: (otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';' )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1506:8: otherlv_31= 'derivation' ( ruleUnrestrictedName )? otherlv_33= ':' ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )? otherlv_35= ';'
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1575:6: (otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1575:8: otherlv_38= 'derivation' ( ruleUnrestrictedName )? otherlv_40= ':' ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )? otherlv_42= ';'
                     	    {
-                    	    otherlv_31=(Token)match(input,27,FollowSets000.FOLLOW_27_in_ruleAttributeCS3353); if (state.failed) return current;
+                    	    otherlv_38=(Token)match(input,27,FollowSets000.FOLLOW_27_in_ruleAttributeCS3836); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_31, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0());
+                    	          	newLeafNode(otherlv_38, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1510:1: ( ruleUnrestrictedName )?
-                    	    int alt34=2;
-                    	    int LA34_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1579:1: ( ruleUnrestrictedName )?
+                    	    int alt48=2;
+                    	    int LA48_0 = input.LA(1);
 
-                    	    if ( ((LA34_0>=RULE_SIMPLE_ID && LA34_0<=RULE_ESCAPED_ID)||LA34_0==17||(LA34_0>=19 && LA34_0<=54)||LA34_0==59||LA34_0==72||(LA34_0>=74 && LA34_0<=75)||LA34_0==80) ) {
-                    	        alt34=1;
+                    	    if ( ((LA48_0>=RULE_SIMPLE_ID && LA48_0<=RULE_ESCAPED_ID)||LA48_0==17||(LA48_0>=19 && LA48_0<=54)||LA48_0==59||LA48_0==72||(LA48_0>=74 && LA48_0<=75)||LA48_0==80) ) {
+                    	        alt48=1;
                     	    }
-                    	    switch (alt34) {
+                    	    switch (alt48) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1511:2: ruleUnrestrictedName
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1580:2: ruleUnrestrictedName
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
@@ -4374,7 +4816,7 @@
                     	                      newCompositeNode(grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()); 
                     	                  
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS3373);
+                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS3856);
                     	            ruleUnrestrictedName();
 
                     	            state._fsp--;
@@ -4390,33 +4832,33 @@
 
                     	    }
 
-                    	    otherlv_33=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleAttributeCS3386); if (state.failed) return current;
+                    	    otherlv_40=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleAttributeCS3869); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_33, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2());
+                    	          	newLeafNode(otherlv_40, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1525:1: ( (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS ) )?
-                    	    int alt35=2;
-                    	    int LA35_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1594:1: ( (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS ) )?
+                    	    int alt49=2;
+                    	    int LA49_0 = input.LA(1);
 
-                    	    if ( ((LA35_0>=RULE_INT && LA35_0<=RULE_SINGLE_QUOTED_STRING)||(LA35_0>=RULE_UNQUOTED_STRING && LA35_0<=RULE_ESCAPED_ID)||(LA35_0>=17 && LA35_0<=55)||LA35_0==59||LA35_0==72||(LA35_0>=74 && LA35_0<=75)||LA35_0==80||(LA35_0>=83 && LA35_0<=84)||LA35_0==98||(LA35_0>=100 && LA35_0<=112)||(LA35_0>=115 && LA35_0<=119)||LA35_0==126||(LA35_0>=131 && LA35_0<=132)) ) {
-                    	        alt35=1;
+                    	    if ( ((LA49_0>=RULE_INT && LA49_0<=RULE_SINGLE_QUOTED_STRING)||(LA49_0>=RULE_UNQUOTED_STRING && LA49_0<=RULE_ESCAPED_ID)||(LA49_0>=17 && LA49_0<=55)||LA49_0==59||LA49_0==72||(LA49_0>=74 && LA49_0<=75)||LA49_0==80||(LA49_0>=83 && LA49_0<=84)||LA49_0==98||(LA49_0>=100 && LA49_0<=112)||(LA49_0>=115 && LA49_0<=119)||LA49_0==126||(LA49_0>=131 && LA49_0<=132)) ) {
+                    	        alt49=1;
                     	    }
-                    	    switch (alt35) {
+                    	    switch (alt49) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1526:1: (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1595:1: (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1526:1: (lv_ownedDefaultExpressions_34_0= ruleSpecificationCS )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1527:3: lv_ownedDefaultExpressions_34_0= ruleSpecificationCS
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1595:1: (lv_ownedDefaultExpressions_41_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1596:3: lv_ownedDefaultExpressions_41_0= ruleSpecificationCS
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
                     	              	        newCompositeNode(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_6_0_1_1_3_0()); 
                     	              	    
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleAttributeCS3407);
-                    	            lv_ownedDefaultExpressions_34_0=ruleSpecificationCS();
+                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleAttributeCS3890);
+                    	            lv_ownedDefaultExpressions_41_0=ruleSpecificationCS();
 
                     	            state._fsp--;
                     	            if (state.failed) return current;
@@ -4428,7 +4870,7 @@
                     	                     		add(
                     	                     			current, 
                     	                     			"ownedDefaultExpressions",
-                    	                      		lv_ownedDefaultExpressions_34_0, 
+                    	                      		lv_ownedDefaultExpressions_41_0, 
                     	                      		"SpecificationCS");
                     	              	        afterParserOrEnumRuleCall();
                     	              	    
@@ -4442,10 +4884,10 @@
 
                     	    }
 
-                    	    otherlv_35=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleAttributeCS3420); if (state.failed) return current;
+                    	    otherlv_42=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleAttributeCS3903); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_35, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4());
+                    	          	newLeafNode(otherlv_42, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4());
                     	          
                     	    }
 
@@ -4455,27 +4897,27 @@
                     	    }
                     	    break;
                     	case 3 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1548:6: (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1617:6: (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1548:6: (otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';' )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1548:8: otherlv_36= 'initial' ( ruleUnrestrictedName )? otherlv_38= ':' ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )? otherlv_40= ';'
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1617:6: (otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1617:8: otherlv_43= 'initial' ( ruleUnrestrictedName )? otherlv_45= ':' ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )? otherlv_47= ';'
                     	    {
-                    	    otherlv_36=(Token)match(input,33,FollowSets000.FOLLOW_33_in_ruleAttributeCS3440); if (state.failed) return current;
+                    	    otherlv_43=(Token)match(input,33,FollowSets000.FOLLOW_33_in_ruleAttributeCS3923); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_36, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0());
+                    	          	newLeafNode(otherlv_43, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1552:1: ( ruleUnrestrictedName )?
-                    	    int alt36=2;
-                    	    int LA36_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1621:1: ( ruleUnrestrictedName )?
+                    	    int alt50=2;
+                    	    int LA50_0 = input.LA(1);
 
-                    	    if ( ((LA36_0>=RULE_SIMPLE_ID && LA36_0<=RULE_ESCAPED_ID)||LA36_0==17||(LA36_0>=19 && LA36_0<=54)||LA36_0==59||LA36_0==72||(LA36_0>=74 && LA36_0<=75)||LA36_0==80) ) {
-                    	        alt36=1;
+                    	    if ( ((LA50_0>=RULE_SIMPLE_ID && LA50_0<=RULE_ESCAPED_ID)||LA50_0==17||(LA50_0>=19 && LA50_0<=54)||LA50_0==59||LA50_0==72||(LA50_0>=74 && LA50_0<=75)||LA50_0==80) ) {
+                    	        alt50=1;
                     	    }
-                    	    switch (alt36) {
+                    	    switch (alt50) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1553:2: ruleUnrestrictedName
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1622:2: ruleUnrestrictedName
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
@@ -4487,7 +4929,7 @@
                     	                      newCompositeNode(grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()); 
                     	                  
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS3460);
+                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS3943);
                     	            ruleUnrestrictedName();
 
                     	            state._fsp--;
@@ -4503,33 +4945,33 @@
 
                     	    }
 
-                    	    otherlv_38=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleAttributeCS3473); if (state.failed) return current;
+                    	    otherlv_45=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleAttributeCS3956); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_38, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2());
+                    	          	newLeafNode(otherlv_45, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1567:1: ( (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS ) )?
-                    	    int alt37=2;
-                    	    int LA37_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1636:1: ( (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS ) )?
+                    	    int alt51=2;
+                    	    int LA51_0 = input.LA(1);
 
-                    	    if ( ((LA37_0>=RULE_INT && LA37_0<=RULE_SINGLE_QUOTED_STRING)||(LA37_0>=RULE_UNQUOTED_STRING && LA37_0<=RULE_ESCAPED_ID)||(LA37_0>=17 && LA37_0<=55)||LA37_0==59||LA37_0==72||(LA37_0>=74 && LA37_0<=75)||LA37_0==80||(LA37_0>=83 && LA37_0<=84)||LA37_0==98||(LA37_0>=100 && LA37_0<=112)||(LA37_0>=115 && LA37_0<=119)||LA37_0==126||(LA37_0>=131 && LA37_0<=132)) ) {
-                    	        alt37=1;
+                    	    if ( ((LA51_0>=RULE_INT && LA51_0<=RULE_SINGLE_QUOTED_STRING)||(LA51_0>=RULE_UNQUOTED_STRING && LA51_0<=RULE_ESCAPED_ID)||(LA51_0>=17 && LA51_0<=55)||LA51_0==59||LA51_0==72||(LA51_0>=74 && LA51_0<=75)||LA51_0==80||(LA51_0>=83 && LA51_0<=84)||LA51_0==98||(LA51_0>=100 && LA51_0<=112)||(LA51_0>=115 && LA51_0<=119)||LA51_0==126||(LA51_0>=131 && LA51_0<=132)) ) {
+                    	        alt51=1;
                     	    }
-                    	    switch (alt37) {
+                    	    switch (alt51) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1568:1: (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1637:1: (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1568:1: (lv_ownedDefaultExpressions_39_0= ruleSpecificationCS )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1569:3: lv_ownedDefaultExpressions_39_0= ruleSpecificationCS
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1637:1: (lv_ownedDefaultExpressions_46_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1638:3: lv_ownedDefaultExpressions_46_0= ruleSpecificationCS
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
                     	              	        newCompositeNode(grammarAccess.getAttributeCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_6_0_1_2_3_0()); 
                     	              	    
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleAttributeCS3494);
-                    	            lv_ownedDefaultExpressions_39_0=ruleSpecificationCS();
+                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleAttributeCS3977);
+                    	            lv_ownedDefaultExpressions_46_0=ruleSpecificationCS();
 
                     	            state._fsp--;
                     	            if (state.failed) return current;
@@ -4541,7 +4983,7 @@
                     	                     		add(
                     	                     			current, 
                     	                     			"ownedDefaultExpressions",
-                    	                      		lv_ownedDefaultExpressions_39_0, 
+                    	                      		lv_ownedDefaultExpressions_46_0, 
                     	                      		"SpecificationCS");
                     	              	        afterParserOrEnumRuleCall();
                     	              	    
@@ -4555,10 +4997,10 @@
 
                     	    }
 
-                    	    otherlv_40=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleAttributeCS3507); if (state.failed) return current;
+                    	    otherlv_47=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleAttributeCS3990); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_40, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4());
+                    	          	newLeafNode(otherlv_47, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4());
                     	          
                     	    }
 
@@ -4569,14 +5011,14 @@
                     	    break;
 
                     	default :
-                    	    break loop38;
+                    	    break loop52;
                         }
                     } while (true);
 
-                    otherlv_41=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleAttributeCS3522); if (state.failed) return current;
+                    otherlv_48=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleAttributeCS4005); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_41, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_6_0_2());
+                          	newLeafNode(otherlv_48, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_6_0_2());
                           
                     }
 
@@ -4586,12 +5028,12 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1594:7: otherlv_42= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1663:7: otherlv_49= ';'
                     {
-                    otherlv_42=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleAttributeCS3541); if (state.failed) return current;
+                    otherlv_49=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleAttributeCS4024); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_42, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_1());
+                          	newLeafNode(otherlv_49, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_1());
                           
                     }
 
@@ -4616,6 +5058,9 @@
                 appendSkippedTokens();
             } 
         finally {
+
+            	myUnorderedGroupState.restore();
+
         }
         return current;
     }
@@ -4623,7 +5068,7 @@
 
 
     // $ANTLR start "entryRuleClassCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1606:1: entryRuleClassCS returns [EObject current=null] : iv_ruleClassCS= ruleClassCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1678:1: entryRuleClassCS returns [EObject current=null] : iv_ruleClassCS= ruleClassCS EOF ;
     public final EObject entryRuleClassCS() throws RecognitionException {
         EObject current = null;
 
@@ -4631,13 +5076,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1607:2: (iv_ruleClassCS= ruleClassCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1608:2: iv_ruleClassCS= ruleClassCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1679:2: (iv_ruleClassCS= ruleClassCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1680:2: iv_ruleClassCS= ruleClassCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getClassCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleClassCS_in_entryRuleClassCS3578);
+            pushFollow(FollowSets000.FOLLOW_ruleClassCS_in_entryRuleClassCS4065);
             iv_ruleClassCS=ruleClassCS();
 
             state._fsp--;
@@ -4645,7 +5090,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleClassCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleClassCS3588); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleClassCS4075); if (state.failed) return current;
 
             }
 
@@ -4663,7 +5108,7 @@
 
 
     // $ANTLR start "ruleClassCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1615:1: ruleClassCS returns [EObject current=null] : (this_StructuredClassCS_0= ruleStructuredClassCS | this_DataTypeCS_1= ruleDataTypeCS | this_EnumerationCS_2= ruleEnumerationCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1687:1: ruleClassCS returns [EObject current=null] : (this_StructuredClassCS_0= ruleStructuredClassCS | this_DataTypeCS_1= ruleDataTypeCS | this_EnumerationCS_2= ruleEnumerationCS ) ;
     public final EObject ruleClassCS() throws RecognitionException {
         EObject current = null;
 
@@ -4677,40 +5122,40 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1618:28: ( (this_StructuredClassCS_0= ruleStructuredClassCS | this_DataTypeCS_1= ruleDataTypeCS | this_EnumerationCS_2= ruleEnumerationCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1619:1: (this_StructuredClassCS_0= ruleStructuredClassCS | this_DataTypeCS_1= ruleDataTypeCS | this_EnumerationCS_2= ruleEnumerationCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1690:28: ( (this_StructuredClassCS_0= ruleStructuredClassCS | this_DataTypeCS_1= ruleDataTypeCS | this_EnumerationCS_2= ruleEnumerationCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1691:1: (this_StructuredClassCS_0= ruleStructuredClassCS | this_DataTypeCS_1= ruleDataTypeCS | this_EnumerationCS_2= ruleEnumerationCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1619:1: (this_StructuredClassCS_0= ruleStructuredClassCS | this_DataTypeCS_1= ruleDataTypeCS | this_EnumerationCS_2= ruleEnumerationCS )
-            int alt40=3;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1691:1: (this_StructuredClassCS_0= ruleStructuredClassCS | this_DataTypeCS_1= ruleDataTypeCS | this_EnumerationCS_2= ruleEnumerationCS )
+            int alt54=3;
             switch ( input.LA(1) ) {
             case 19:
             case 23:
                 {
-                alt40=1;
+                alt54=1;
                 }
                 break;
             case 25:
             case 42:
                 {
-                alt40=2;
+                alt54=2;
                 }
                 break;
             case 29:
                 {
-                alt40=3;
+                alt54=3;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 40, 0, input);
+                    new NoViableAltException("", 54, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt40) {
+            switch (alt54) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1620:2: this_StructuredClassCS_0= ruleStructuredClassCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1692:2: this_StructuredClassCS_0= ruleStructuredClassCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -4722,7 +5167,7 @@
                               newCompositeNode(grammarAccess.getClassCSAccess().getStructuredClassCSParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleStructuredClassCS_in_ruleClassCS3638);
+                    pushFollow(FollowSets000.FOLLOW_ruleStructuredClassCS_in_ruleClassCS4125);
                     this_StructuredClassCS_0=ruleStructuredClassCS();
 
                     state._fsp--;
@@ -4737,7 +5182,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1633:2: this_DataTypeCS_1= ruleDataTypeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1705:2: this_DataTypeCS_1= ruleDataTypeCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -4749,7 +5194,7 @@
                               newCompositeNode(grammarAccess.getClassCSAccess().getDataTypeCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleDataTypeCS_in_ruleClassCS3668);
+                    pushFollow(FollowSets000.FOLLOW_ruleDataTypeCS_in_ruleClassCS4155);
                     this_DataTypeCS_1=ruleDataTypeCS();
 
                     state._fsp--;
@@ -4764,7 +5209,7 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1646:2: this_EnumerationCS_2= ruleEnumerationCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1718:2: this_EnumerationCS_2= ruleEnumerationCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -4776,7 +5221,7 @@
                               newCompositeNode(grammarAccess.getClassCSAccess().getEnumerationCSParserRuleCall_2()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationCS_in_ruleClassCS3698);
+                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationCS_in_ruleClassCS4185);
                     this_EnumerationCS_2=ruleEnumerationCS();
 
                     state._fsp--;
@@ -4813,7 +5258,7 @@
 
 
     // $ANTLR start "entryRuleDataTypeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1665:1: entryRuleDataTypeCS returns [EObject current=null] : iv_ruleDataTypeCS= ruleDataTypeCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1737:1: entryRuleDataTypeCS returns [EObject current=null] : iv_ruleDataTypeCS= ruleDataTypeCS EOF ;
     public final EObject entryRuleDataTypeCS() throws RecognitionException {
         EObject current = null;
 
@@ -4821,13 +5266,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1666:2: (iv_ruleDataTypeCS= ruleDataTypeCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1667:2: iv_ruleDataTypeCS= ruleDataTypeCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1738:2: (iv_ruleDataTypeCS= ruleDataTypeCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1739:2: iv_ruleDataTypeCS= ruleDataTypeCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getDataTypeCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleDataTypeCS_in_entryRuleDataTypeCS3733);
+            pushFollow(FollowSets000.FOLLOW_ruleDataTypeCS_in_entryRuleDataTypeCS4220);
             iv_ruleDataTypeCS=ruleDataTypeCS();
 
             state._fsp--;
@@ -4835,7 +5280,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleDataTypeCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDataTypeCS3743); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDataTypeCS4230); if (state.failed) return current;
 
             }
 
@@ -4853,7 +5298,7 @@
 
 
     // $ANTLR start "ruleDataTypeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1674:1: ruleDataTypeCS returns [EObject current=null] : ( ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1746:1: ruleDataTypeCS returns [EObject current=null] : ( ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) ) ;
     public final EObject ruleDataTypeCS() throws RecognitionException {
         EObject current = null;
 
@@ -4880,27 +5325,27 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1677:28: ( ( ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1678:1: ( ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1749:28: ( ( ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1750:1: ( ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1678:1: ( ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1678:2: ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1750:1: ( ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1750:2: ( (lv_isPrimitive_0_0= 'primitive' ) )? otherlv_1= 'datatype' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )? ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1678:2: ( (lv_isPrimitive_0_0= 'primitive' ) )?
-            int alt41=2;
-            int LA41_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1750:2: ( (lv_isPrimitive_0_0= 'primitive' ) )?
+            int alt55=2;
+            int LA55_0 = input.LA(1);
 
-            if ( (LA41_0==42) ) {
-                alt41=1;
+            if ( (LA55_0==42) ) {
+                alt55=1;
             }
-            switch (alt41) {
+            switch (alt55) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1679:1: (lv_isPrimitive_0_0= 'primitive' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1751:1: (lv_isPrimitive_0_0= 'primitive' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1679:1: (lv_isPrimitive_0_0= 'primitive' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1680:3: lv_isPrimitive_0_0= 'primitive'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1751:1: (lv_isPrimitive_0_0= 'primitive' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1752:3: lv_isPrimitive_0_0= 'primitive'
                     {
-                    lv_isPrimitive_0_0=(Token)match(input,42,FollowSets000.FOLLOW_42_in_ruleDataTypeCS3786); if (state.failed) return current;
+                    lv_isPrimitive_0_0=(Token)match(input,42,FollowSets000.FOLLOW_42_in_ruleDataTypeCS4273); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               newLeafNode(lv_isPrimitive_0_0, grammarAccess.getDataTypeCSAccess().getIsPrimitivePrimitiveKeyword_0_0());
@@ -4923,24 +5368,24 @@
 
             }
 
-            otherlv_1=(Token)match(input,25,FollowSets000.FOLLOW_25_in_ruleDataTypeCS3812); if (state.failed) return current;
+            otherlv_1=(Token)match(input,25,FollowSets000.FOLLOW_25_in_ruleDataTypeCS4299); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getDataTypeCSAccess().getDatatypeKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1697:1: ( (lv_name_2_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1698:1: (lv_name_2_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1769:1: ( (lv_name_2_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1770:1: (lv_name_2_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1698:1: (lv_name_2_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1699:3: lv_name_2_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1770:1: (lv_name_2_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1771:3: lv_name_2_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getDataTypeCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleDataTypeCS3833);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleDataTypeCS4320);
             lv_name_2_0=ruleUnrestrictedName();
 
             state._fsp--;
@@ -4964,26 +5409,26 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1715:2: ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )?
-            int alt42=2;
-            int LA42_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1787:2: ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )?
+            int alt56=2;
+            int LA56_0 = input.LA(1);
 
-            if ( (LA42_0==55||LA42_0==81) ) {
-                alt42=1;
+            if ( (LA56_0==55||LA56_0==81) ) {
+                alt56=1;
             }
-            switch (alt42) {
+            switch (alt56) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1716:1: (lv_ownedSignature_3_0= ruleTemplateSignatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1788:1: (lv_ownedSignature_3_0= ruleTemplateSignatureCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1716:1: (lv_ownedSignature_3_0= ruleTemplateSignatureCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1717:3: lv_ownedSignature_3_0= ruleTemplateSignatureCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1788:1: (lv_ownedSignature_3_0= ruleTemplateSignatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1789:3: lv_ownedSignature_3_0= ruleTemplateSignatureCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getDataTypeCSAccess().getOwnedSignatureTemplateSignatureCSParserRuleCall_3_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_ruleDataTypeCS3854);
+                    pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_ruleDataTypeCS4341);
                     lv_ownedSignature_3_0=ruleTemplateSignatureCS();
 
                     state._fsp--;
@@ -5010,30 +5455,30 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1733:3: (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )?
-            int alt43=2;
-            int LA43_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1805:3: (otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) ) )?
+            int alt57=2;
+            int LA57_0 = input.LA(1);
 
-            if ( (LA43_0==57) ) {
-                alt43=1;
+            if ( (LA57_0==57) ) {
+                alt57=1;
             }
-            switch (alt43) {
+            switch (alt57) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1733:5: otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1805:5: otherlv_4= ':' ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) )
                     {
-                    otherlv_4=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleDataTypeCS3868); if (state.failed) return current;
+                    otherlv_4=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleDataTypeCS4355); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_4, grammarAccess.getDataTypeCSAccess().getColonKeyword_4_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1737:1: ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1738:1: (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1809:1: ( (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1810:1: (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1738:1: (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1739:3: lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1810:1: (lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1811:3: lv_instanceClassName_5_0= RULE_SINGLE_QUOTED_STRING
                     {
-                    lv_instanceClassName_5_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDataTypeCS3885); if (state.failed) return current;
+                    lv_instanceClassName_5_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDataTypeCS4372); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       			newLeafNode(lv_instanceClassName_5_0, grammarAccess.getDataTypeCSAccess().getInstanceClassNameSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0()); 
@@ -5063,55 +5508,55 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1755:4: (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )?
-            int alt45=2;
-            int LA45_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1827:4: (otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}' )?
+            int alt59=2;
+            int LA59_0 = input.LA(1);
 
-            if ( (LA45_0==61) ) {
-                int LA45_1 = input.LA(2);
+            if ( (LA59_0==61) ) {
+                int LA59_1 = input.LA(2);
 
-                if ( (LA45_1==62) ) {
-                    int LA45_3 = input.LA(3);
+                if ( (LA59_1==62) ) {
+                    int LA59_3 = input.LA(3);
 
-                    if ( (LA45_3==58||LA45_3==61) ) {
-                        alt45=1;
+                    if ( (LA59_3==58||LA59_3==61) ) {
+                        alt59=1;
                     }
                 }
-                else if ( ((LA45_1>=72 && LA45_1<=73)) ) {
-                    alt45=1;
+                else if ( ((LA59_1>=72 && LA59_1<=73)) ) {
+                    alt59=1;
                 }
             }
-            switch (alt45) {
+            switch (alt59) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1755:6: otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1827:6: otherlv_6= '{' ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )? otherlv_9= '}'
                     {
-                    otherlv_6=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleDataTypeCS3905); if (state.failed) return current;
+                    otherlv_6=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleDataTypeCS4392); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_6, grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_5_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1759:1: ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )?
-                    int alt44=3;
-                    int LA44_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1831:1: ( ( (lv_isSerializable_7_0= 'serializable' ) ) | otherlv_8= '!serializable' )?
+                    int alt58=3;
+                    int LA58_0 = input.LA(1);
 
-                    if ( (LA44_0==72) ) {
-                        alt44=1;
+                    if ( (LA58_0==72) ) {
+                        alt58=1;
                     }
-                    else if ( (LA44_0==73) ) {
-                        alt44=2;
+                    else if ( (LA58_0==73) ) {
+                        alt58=2;
                     }
-                    switch (alt44) {
+                    switch (alt58) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1759:2: ( (lv_isSerializable_7_0= 'serializable' ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1831:2: ( (lv_isSerializable_7_0= 'serializable' ) )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1759:2: ( (lv_isSerializable_7_0= 'serializable' ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1760:1: (lv_isSerializable_7_0= 'serializable' )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1831:2: ( (lv_isSerializable_7_0= 'serializable' ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1832:1: (lv_isSerializable_7_0= 'serializable' )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1760:1: (lv_isSerializable_7_0= 'serializable' )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1761:3: lv_isSerializable_7_0= 'serializable'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1832:1: (lv_isSerializable_7_0= 'serializable' )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1833:3: lv_isSerializable_7_0= 'serializable'
                             {
-                            lv_isSerializable_7_0=(Token)match(input,72,FollowSets000.FOLLOW_72_in_ruleDataTypeCS3924); if (state.failed) return current;
+                            lv_isSerializable_7_0=(Token)match(input,72,FollowSets000.FOLLOW_72_in_ruleDataTypeCS4411); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                       newLeafNode(lv_isSerializable_7_0, grammarAccess.getDataTypeCSAccess().getIsSerializableSerializableKeyword_5_1_0_0());
@@ -5135,9 +5580,9 @@
                             }
                             break;
                         case 2 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1775:7: otherlv_8= '!serializable'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1847:7: otherlv_8= '!serializable'
                             {
-                            otherlv_8=(Token)match(input,73,FollowSets000.FOLLOW_73_in_ruleDataTypeCS3955); if (state.failed) return current;
+                            otherlv_8=(Token)match(input,73,FollowSets000.FOLLOW_73_in_ruleDataTypeCS4442); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_8, grammarAccess.getDataTypeCSAccess().getSerializableKeyword_5_1_1());
@@ -5149,7 +5594,7 @@
 
                     }
 
-                    otherlv_9=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleDataTypeCS3969); if (state.failed) return current;
+                    otherlv_9=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleDataTypeCS4456); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_9, grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_5_2());
@@ -5161,66 +5606,66 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1783:3: ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' )
-            int alt47=2;
-            int LA47_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1855:3: ( (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' )
+            int alt61=2;
+            int LA61_0 = input.LA(1);
 
-            if ( (LA47_0==61) ) {
-                alt47=1;
+            if ( (LA61_0==61) ) {
+                alt61=1;
             }
-            else if ( (LA47_0==58) ) {
-                alt47=2;
+            else if ( (LA61_0==58) ) {
+                alt61=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 47, 0, input);
+                    new NoViableAltException("", 61, 0, input);
 
                 throw nvae;
             }
-            switch (alt47) {
+            switch (alt61) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1783:4: (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1855:4: (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1783:4: (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1783:6: otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1855:4: (otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1855:6: otherlv_10= '{' ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}'
                     {
-                    otherlv_10=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleDataTypeCS3985); if (state.failed) return current;
+                    otherlv_10=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleDataTypeCS4472); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_10, grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_6_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1787:1: ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )*
-                    loop46:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1859:1: ( ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )*
+                    loop60:
                     do {
-                        int alt46=3;
-                        int LA46_0 = input.LA(1);
+                        int alt60=3;
+                        int LA60_0 = input.LA(1);
 
-                        if ( (LA46_0==59||LA46_0==74||LA46_0==80) ) {
-                            alt46=1;
+                        if ( (LA60_0==59||LA60_0==74||LA60_0==80) ) {
+                            alt60=1;
                         }
-                        else if ( (LA46_0==22||LA46_0==54) ) {
-                            alt46=2;
+                        else if ( (LA60_0==22||LA60_0==54) ) {
+                            alt60=2;
                         }
 
 
-                        switch (alt46) {
+                        switch (alt60) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1787:2: ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1859:2: ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1787:2: ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1788:1: (lv_ownedAnnotations_11_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1859:2: ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1860:1: (lv_ownedAnnotations_11_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1788:1: (lv_ownedAnnotations_11_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1789:3: lv_ownedAnnotations_11_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1860:1: (lv_ownedAnnotations_11_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1861:3: lv_ownedAnnotations_11_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getDataTypeCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_6_0_1_0_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleDataTypeCS4007);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleDataTypeCS4494);
                     	    lv_ownedAnnotations_11_0=ruleAnnotationElementCS();
 
                     	    state._fsp--;
@@ -5248,20 +5693,20 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1806:6: ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1878:6: ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1806:6: ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1807:1: (lv_ownedConstraints_12_0= ruleInvariantConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1878:6: ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1879:1: (lv_ownedConstraints_12_0= ruleInvariantConstraintCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1807:1: (lv_ownedConstraints_12_0= ruleInvariantConstraintCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1808:3: lv_ownedConstraints_12_0= ruleInvariantConstraintCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1879:1: (lv_ownedConstraints_12_0= ruleInvariantConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1880:3: lv_ownedConstraints_12_0= ruleInvariantConstraintCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getDataTypeCSAccess().getOwnedConstraintsInvariantConstraintCSParserRuleCall_6_0_1_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleInvariantConstraintCS_in_ruleDataTypeCS4034);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleInvariantConstraintCS_in_ruleDataTypeCS4521);
                     	    lv_ownedConstraints_12_0=ruleInvariantConstraintCS();
 
                     	    state._fsp--;
@@ -5290,11 +5735,11 @@
                     	    break;
 
                     	default :
-                    	    break loop46;
+                    	    break loop60;
                         }
                     } while (true);
 
-                    otherlv_13=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleDataTypeCS4048); if (state.failed) return current;
+                    otherlv_13=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleDataTypeCS4535); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_13, grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_6_0_2());
@@ -5307,9 +5752,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1829:7: otherlv_14= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1901:7: otherlv_14= ';'
                     {
-                    otherlv_14=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleDataTypeCS4067); if (state.failed) return current;
+                    otherlv_14=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleDataTypeCS4554); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_14, grammarAccess.getDataTypeCSAccess().getSemicolonKeyword_6_1());
@@ -5344,7 +5789,7 @@
 
 
     // $ANTLR start "entryRuleDetailCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1841:1: entryRuleDetailCS returns [EObject current=null] : iv_ruleDetailCS= ruleDetailCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1913:1: entryRuleDetailCS returns [EObject current=null] : iv_ruleDetailCS= ruleDetailCS EOF ;
     public final EObject entryRuleDetailCS() throws RecognitionException {
         EObject current = null;
 
@@ -5352,13 +5797,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1842:2: (iv_ruleDetailCS= ruleDetailCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1843:2: iv_ruleDetailCS= ruleDetailCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1914:2: (iv_ruleDetailCS= ruleDetailCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1915:2: iv_ruleDetailCS= ruleDetailCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getDetailCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_entryRuleDetailCS4104);
+            pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_entryRuleDetailCS4591);
             iv_ruleDetailCS=ruleDetailCS();
 
             state._fsp--;
@@ -5366,7 +5811,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleDetailCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDetailCS4114); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDetailCS4601); if (state.failed) return current;
 
             }
 
@@ -5384,7 +5829,7 @@
 
 
     // $ANTLR start "ruleDetailCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1850:1: ruleDetailCS returns [EObject current=null] : ( ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1922:1: ruleDetailCS returns [EObject current=null] : ( ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )* ) ;
     public final EObject ruleDetailCS() throws RecognitionException {
         EObject current = null;
 
@@ -5398,45 +5843,45 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1853:28: ( ( ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1854:1: ( ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1925:28: ( ( ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1926:1: ( ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1854:1: ( ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1854:2: ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1926:1: ( ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1926:2: ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) ) otherlv_1= '=' ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )*
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1854:2: ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1855:1: ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1926:2: ( ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1927:1: ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1855:1: ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1856:1: (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1927:1: ( (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1928:1: (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1856:1: (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING )
-            int alt48=2;
-            int LA48_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1928:1: (lv_name_0_1= ruleUnrestrictedName | lv_name_0_2= RULE_SINGLE_QUOTED_STRING )
+            int alt62=2;
+            int LA62_0 = input.LA(1);
 
-            if ( ((LA48_0>=RULE_SIMPLE_ID && LA48_0<=RULE_ESCAPED_ID)||LA48_0==17||(LA48_0>=19 && LA48_0<=54)||LA48_0==59||LA48_0==72||(LA48_0>=74 && LA48_0<=75)||LA48_0==80) ) {
-                alt48=1;
+            if ( ((LA62_0>=RULE_SIMPLE_ID && LA62_0<=RULE_ESCAPED_ID)||LA62_0==17||(LA62_0>=19 && LA62_0<=54)||LA62_0==59||LA62_0==72||(LA62_0>=74 && LA62_0<=75)||LA62_0==80) ) {
+                alt62=1;
             }
-            else if ( (LA48_0==RULE_SINGLE_QUOTED_STRING) ) {
-                alt48=2;
+            else if ( (LA62_0==RULE_SINGLE_QUOTED_STRING) ) {
+                alt62=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 48, 0, input);
+                    new NoViableAltException("", 62, 0, input);
 
                 throw nvae;
             }
-            switch (alt48) {
+            switch (alt62) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1857:3: lv_name_0_1= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1929:3: lv_name_0_1= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getDetailCSAccess().getNameUnrestrictedNameParserRuleCall_0_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleDetailCS4162);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleDetailCS4649);
                     lv_name_0_1=ruleUnrestrictedName();
 
                     state._fsp--;
@@ -5458,9 +5903,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1872:8: lv_name_0_2= RULE_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1944:8: lv_name_0_2= RULE_SINGLE_QUOTED_STRING
                     {
-                    lv_name_0_2=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDetailCS4177); if (state.failed) return current;
+                    lv_name_0_2=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDetailCS4664); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       			newLeafNode(lv_name_0_2, grammarAccess.getDetailCSAccess().getNameSINGLE_QUOTED_STRINGTerminalRuleCall_0_0_1()); 
@@ -5490,52 +5935,52 @@
 
             }
 
-            otherlv_1=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleDetailCS4197); if (state.failed) return current;
+            otherlv_1=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleDetailCS4684); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getDetailCSAccess().getEqualsSignKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1894:1: ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )*
-            loop50:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1966:1: ( ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) ) )*
+            loop64:
             do {
-                int alt50=2;
-                int LA50_0 = input.LA(1);
+                int alt64=2;
+                int LA64_0 = input.LA(1);
 
-                if ( ((LA50_0>=RULE_SINGLE_QUOTED_STRING && LA50_0<=RULE_ML_SINGLE_QUOTED_STRING)) ) {
-                    alt50=1;
+                if ( ((LA64_0>=RULE_SINGLE_QUOTED_STRING && LA64_0<=RULE_ML_SINGLE_QUOTED_STRING)) ) {
+                    alt64=1;
                 }
 
 
-                switch (alt50) {
+                switch (alt64) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1895:1: ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1967:1: ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1895:1: ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1896:1: (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1967:1: ( (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1968:1: (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1896:1: (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING )
-            	    int alt49=2;
-            	    int LA49_0 = input.LA(1);
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1968:1: (lv_values_2_1= RULE_SINGLE_QUOTED_STRING | lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING )
+            	    int alt63=2;
+            	    int LA63_0 = input.LA(1);
 
-            	    if ( (LA49_0==RULE_SINGLE_QUOTED_STRING) ) {
-            	        alt49=1;
+            	    if ( (LA63_0==RULE_SINGLE_QUOTED_STRING) ) {
+            	        alt63=1;
             	    }
-            	    else if ( (LA49_0==RULE_ML_SINGLE_QUOTED_STRING) ) {
-            	        alt49=2;
+            	    else if ( (LA63_0==RULE_ML_SINGLE_QUOTED_STRING) ) {
+            	        alt63=2;
             	    }
             	    else {
             	        if (state.backtracking>0) {state.failed=true; return current;}
             	        NoViableAltException nvae =
-            	            new NoViableAltException("", 49, 0, input);
+            	            new NoViableAltException("", 63, 0, input);
 
             	        throw nvae;
             	    }
-            	    switch (alt49) {
+            	    switch (alt63) {
             	        case 1 :
-            	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1897:3: lv_values_2_1= RULE_SINGLE_QUOTED_STRING
+            	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1969:3: lv_values_2_1= RULE_SINGLE_QUOTED_STRING
             	            {
-            	            lv_values_2_1=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDetailCS4216); if (state.failed) return current;
+            	            lv_values_2_1=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDetailCS4703); if (state.failed) return current;
             	            if ( state.backtracking==0 ) {
 
             	              			newLeafNode(lv_values_2_1, grammarAccess.getDetailCSAccess().getValuesSINGLE_QUOTED_STRINGTerminalRuleCall_2_0_0()); 
@@ -5557,9 +6002,9 @@
             	            }
             	            break;
             	        case 2 :
-            	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1912:8: lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING
+            	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1984:8: lv_values_2_2= RULE_ML_SINGLE_QUOTED_STRING
             	            {
-            	            lv_values_2_2=(Token)match(input,RULE_ML_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_ML_SINGLE_QUOTED_STRING_in_ruleDetailCS4236); if (state.failed) return current;
+            	            lv_values_2_2=(Token)match(input,RULE_ML_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_ML_SINGLE_QUOTED_STRING_in_ruleDetailCS4723); if (state.failed) return current;
             	            if ( state.backtracking==0 ) {
 
             	              			newLeafNode(lv_values_2_2, grammarAccess.getDetailCSAccess().getValuesML_SINGLE_QUOTED_STRINGTerminalRuleCall_2_0_1()); 
@@ -5591,7 +6036,7 @@
             	    break;
 
             	default :
-            	    break loop50;
+            	    break loop64;
                 }
             } while (true);
 
@@ -5618,7 +6063,7 @@
 
 
     // $ANTLR start "entryRuleDocumentationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1938:1: entryRuleDocumentationCS returns [EObject current=null] : iv_ruleDocumentationCS= ruleDocumentationCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2010:1: entryRuleDocumentationCS returns [EObject current=null] : iv_ruleDocumentationCS= ruleDocumentationCS EOF ;
     public final EObject entryRuleDocumentationCS() throws RecognitionException {
         EObject current = null;
 
@@ -5626,13 +6071,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1939:2: (iv_ruleDocumentationCS= ruleDocumentationCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1940:2: iv_ruleDocumentationCS= ruleDocumentationCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2011:2: (iv_ruleDocumentationCS= ruleDocumentationCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2012:2: iv_ruleDocumentationCS= ruleDocumentationCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getDocumentationCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleDocumentationCS_in_entryRuleDocumentationCS4281);
+            pushFollow(FollowSets000.FOLLOW_ruleDocumentationCS_in_entryRuleDocumentationCS4768);
             iv_ruleDocumentationCS=ruleDocumentationCS();
 
             state._fsp--;
@@ -5640,7 +6085,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleDocumentationCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDocumentationCS4291); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDocumentationCS4778); if (state.failed) return current;
 
             }
 
@@ -5658,7 +6103,7 @@
 
 
     // $ANTLR start "ruleDocumentationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1947:1: ruleDocumentationCS returns [EObject current=null] : ( () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2019:1: ruleDocumentationCS returns [EObject current=null] : ( () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';' ) ;
     public final EObject ruleDocumentationCS() throws RecognitionException {
         EObject current = null;
 
@@ -5676,14 +6121,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1950:28: ( ( () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1951:1: ( () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2022:28: ( ( () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2023:1: ( () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1951:1: ( () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1951:2: () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2023:1: ( () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2023:2: () otherlv_1= 'documentation' ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )? (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )? otherlv_8= ';'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1951:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1952:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2023:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2024:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -5700,27 +6145,27 @@
 
             }
 
-            otherlv_1=(Token)match(input,74,FollowSets000.FOLLOW_74_in_ruleDocumentationCS4340); if (state.failed) return current;
+            otherlv_1=(Token)match(input,74,FollowSets000.FOLLOW_74_in_ruleDocumentationCS4827); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getDocumentationCSAccess().getDocumentationKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1964:1: ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )?
-            int alt51=2;
-            int LA51_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2036:1: ( (lv_value_2_0= RULE_SINGLE_QUOTED_STRING ) )?
+            int alt65=2;
+            int LA65_0 = input.LA(1);
 
-            if ( (LA51_0==RULE_SINGLE_QUOTED_STRING) ) {
-                alt51=1;
+            if ( (LA65_0==RULE_SINGLE_QUOTED_STRING) ) {
+                alt65=1;
             }
-            switch (alt51) {
+            switch (alt65) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1965:1: (lv_value_2_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2037:1: (lv_value_2_0= RULE_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1965:1: (lv_value_2_0= RULE_SINGLE_QUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1966:3: lv_value_2_0= RULE_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2037:1: (lv_value_2_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2038:3: lv_value_2_0= RULE_SINGLE_QUOTED_STRING
                     {
-                    lv_value_2_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDocumentationCS4357); if (state.failed) return current;
+                    lv_value_2_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDocumentationCS4844); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       			newLeafNode(lv_value_2_0, grammarAccess.getDocumentationCSAccess().getValueSINGLE_QUOTED_STRINGTerminalRuleCall_2_0()); 
@@ -5747,35 +6192,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1982:3: (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )?
-            int alt53=2;
-            int LA53_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2054:3: (otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')' )?
+            int alt67=2;
+            int LA67_0 = input.LA(1);
 
-            if ( (LA53_0==55) ) {
-                alt53=1;
+            if ( (LA67_0==55) ) {
+                alt67=1;
             }
-            switch (alt53) {
+            switch (alt67) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1982:5: otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2054:5: otherlv_3= '(' ( (lv_ownedDetails_4_0= ruleDetailCS ) ) (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )* otherlv_7= ')'
                     {
-                    otherlv_3=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleDocumentationCS4376); if (state.failed) return current;
+                    otherlv_3=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleDocumentationCS4863); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_3, grammarAccess.getDocumentationCSAccess().getLeftParenthesisKeyword_3_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1986:1: ( (lv_ownedDetails_4_0= ruleDetailCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1987:1: (lv_ownedDetails_4_0= ruleDetailCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2058:1: ( (lv_ownedDetails_4_0= ruleDetailCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2059:1: (lv_ownedDetails_4_0= ruleDetailCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1987:1: (lv_ownedDetails_4_0= ruleDetailCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1988:3: lv_ownedDetails_4_0= ruleDetailCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2059:1: (lv_ownedDetails_4_0= ruleDetailCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2060:3: lv_ownedDetails_4_0= ruleDetailCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getDocumentationCSAccess().getOwnedDetailsDetailCSParserRuleCall_3_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_ruleDocumentationCS4397);
+                    pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_ruleDocumentationCS4884);
                     lv_ownedDetails_4_0=ruleDetailCS();
 
                     state._fsp--;
@@ -5799,39 +6244,39 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2004:2: (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )*
-                    loop52:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2076:2: (otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) ) )*
+                    loop66:
                     do {
-                        int alt52=2;
-                        int LA52_0 = input.LA(1);
+                        int alt66=2;
+                        int LA66_0 = input.LA(1);
 
-                        if ( (LA52_0==60) ) {
-                            alt52=1;
+                        if ( (LA66_0==60) ) {
+                            alt66=1;
                         }
 
 
-                        switch (alt52) {
+                        switch (alt66) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2004:4: otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2076:4: otherlv_5= ',' ( (lv_ownedDetails_6_0= ruleDetailCS ) )
                     	    {
-                    	    otherlv_5=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleDocumentationCS4410); if (state.failed) return current;
+                    	    otherlv_5=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleDocumentationCS4897); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_5, grammarAccess.getDocumentationCSAccess().getCommaKeyword_3_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2008:1: ( (lv_ownedDetails_6_0= ruleDetailCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2009:1: (lv_ownedDetails_6_0= ruleDetailCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2080:1: ( (lv_ownedDetails_6_0= ruleDetailCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2081:1: (lv_ownedDetails_6_0= ruleDetailCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2009:1: (lv_ownedDetails_6_0= ruleDetailCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2010:3: lv_ownedDetails_6_0= ruleDetailCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2081:1: (lv_ownedDetails_6_0= ruleDetailCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2082:3: lv_ownedDetails_6_0= ruleDetailCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getDocumentationCSAccess().getOwnedDetailsDetailCSParserRuleCall_3_2_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_ruleDocumentationCS4431);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_ruleDocumentationCS4918);
                     	    lv_ownedDetails_6_0=ruleDetailCS();
 
                     	    state._fsp--;
@@ -5860,11 +6305,11 @@
                     	    break;
 
                     	default :
-                    	    break loop52;
+                    	    break loop66;
                         }
                     } while (true);
 
-                    otherlv_7=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleDocumentationCS4445); if (state.failed) return current;
+                    otherlv_7=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleDocumentationCS4932); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_7, grammarAccess.getDocumentationCSAccess().getRightParenthesisKeyword_3_3());
@@ -5876,7 +6321,7 @@
 
             }
 
-            otherlv_8=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleDocumentationCS4459); if (state.failed) return current;
+            otherlv_8=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleDocumentationCS4946); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_8, grammarAccess.getDocumentationCSAccess().getSemicolonKeyword_4());
@@ -5905,7 +6350,7 @@
 
 
     // $ANTLR start "entryRuleEnumerationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2042:1: entryRuleEnumerationCS returns [EObject current=null] : iv_ruleEnumerationCS= ruleEnumerationCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2114:1: entryRuleEnumerationCS returns [EObject current=null] : iv_ruleEnumerationCS= ruleEnumerationCS EOF ;
     public final EObject entryRuleEnumerationCS() throws RecognitionException {
         EObject current = null;
 
@@ -5913,13 +6358,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2043:2: (iv_ruleEnumerationCS= ruleEnumerationCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2044:2: iv_ruleEnumerationCS= ruleEnumerationCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2115:2: (iv_ruleEnumerationCS= ruleEnumerationCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2116:2: iv_ruleEnumerationCS= ruleEnumerationCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getEnumerationCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEnumerationCS_in_entryRuleEnumerationCS4495);
+            pushFollow(FollowSets000.FOLLOW_ruleEnumerationCS_in_entryRuleEnumerationCS4982);
             iv_ruleEnumerationCS=ruleEnumerationCS();
 
             state._fsp--;
@@ -5927,7 +6372,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleEnumerationCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEnumerationCS4505); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEnumerationCS4992); if (state.failed) return current;
 
             }
 
@@ -5945,7 +6390,7 @@
 
 
     // $ANTLR start "ruleEnumerationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2051:1: ruleEnumerationCS returns [EObject current=null] : (otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2123:1: ruleEnumerationCS returns [EObject current=null] : (otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) ) ;
     public final EObject ruleEnumerationCS() throws RecognitionException {
         EObject current = null;
 
@@ -5973,30 +6418,30 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2054:28: ( (otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2055:1: (otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2126:28: ( (otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2127:1: (otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2055:1: (otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2055:3: otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2127:1: (otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2127:3: otherlv_0= 'enum' ( (lv_name_1_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )? (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )? ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' )
             {
-            otherlv_0=(Token)match(input,29,FollowSets000.FOLLOW_29_in_ruleEnumerationCS4542); if (state.failed) return current;
+            otherlv_0=(Token)match(input,29,FollowSets000.FOLLOW_29_in_ruleEnumerationCS5029); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getEnumerationCSAccess().getEnumKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2059:1: ( (lv_name_1_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2060:1: (lv_name_1_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2131:1: ( (lv_name_1_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2132:1: (lv_name_1_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2060:1: (lv_name_1_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2061:3: lv_name_1_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2132:1: (lv_name_1_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2133:3: lv_name_1_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getEnumerationCSAccess().getNameUnrestrictedNameParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleEnumerationCS4563);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleEnumerationCS5050);
             lv_name_1_0=ruleUnrestrictedName();
 
             state._fsp--;
@@ -6020,26 +6465,26 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2077:2: ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )?
-            int alt54=2;
-            int LA54_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2149:2: ( (lv_ownedSignature_2_0= ruleTemplateSignatureCS ) )?
+            int alt68=2;
+            int LA68_0 = input.LA(1);
 
-            if ( (LA54_0==55||LA54_0==81) ) {
-                alt54=1;
+            if ( (LA68_0==55||LA68_0==81) ) {
+                alt68=1;
             }
-            switch (alt54) {
+            switch (alt68) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2078:1: (lv_ownedSignature_2_0= ruleTemplateSignatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2150:1: (lv_ownedSignature_2_0= ruleTemplateSignatureCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2078:1: (lv_ownedSignature_2_0= ruleTemplateSignatureCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2079:3: lv_ownedSignature_2_0= ruleTemplateSignatureCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2150:1: (lv_ownedSignature_2_0= ruleTemplateSignatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2151:3: lv_ownedSignature_2_0= ruleTemplateSignatureCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getEnumerationCSAccess().getOwnedSignatureTemplateSignatureCSParserRuleCall_2_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_ruleEnumerationCS4584);
+                    pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_ruleEnumerationCS5071);
                     lv_ownedSignature_2_0=ruleTemplateSignatureCS();
 
                     state._fsp--;
@@ -6066,30 +6511,30 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2095:3: (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )?
-            int alt55=2;
-            int LA55_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2167:3: (otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) ) )?
+            int alt69=2;
+            int LA69_0 = input.LA(1);
 
-            if ( (LA55_0==57) ) {
-                alt55=1;
+            if ( (LA69_0==57) ) {
+                alt69=1;
             }
-            switch (alt55) {
+            switch (alt69) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2095:5: otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2167:5: otherlv_3= ':' ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) )
                     {
-                    otherlv_3=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleEnumerationCS4598); if (state.failed) return current;
+                    otherlv_3=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleEnumerationCS5085); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_3, grammarAccess.getEnumerationCSAccess().getColonKeyword_3_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2099:1: ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2100:1: (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2171:1: ( (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2172:1: (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2100:1: (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2101:3: lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2172:1: (lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2173:3: lv_instanceClassName_4_0= RULE_SINGLE_QUOTED_STRING
                     {
-                    lv_instanceClassName_4_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleEnumerationCS4615); if (state.failed) return current;
+                    lv_instanceClassName_4_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleEnumerationCS5102); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       			newLeafNode(lv_instanceClassName_4_0, grammarAccess.getEnumerationCSAccess().getInstanceClassNameSINGLE_QUOTED_STRINGTerminalRuleCall_3_1_0()); 
@@ -6119,55 +6564,55 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2117:4: (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )?
-            int alt57=2;
-            int LA57_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2189:4: (otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}' )?
+            int alt71=2;
+            int LA71_0 = input.LA(1);
 
-            if ( (LA57_0==61) ) {
-                int LA57_1 = input.LA(2);
+            if ( (LA71_0==61) ) {
+                int LA71_1 = input.LA(2);
 
-                if ( (LA57_1==62) ) {
-                    int LA57_3 = input.LA(3);
+                if ( (LA71_1==62) ) {
+                    int LA71_3 = input.LA(3);
 
-                    if ( (LA57_3==58||LA57_3==61) ) {
-                        alt57=1;
+                    if ( (LA71_3==58||LA71_3==61) ) {
+                        alt71=1;
                     }
                 }
-                else if ( ((LA57_1>=72 && LA57_1<=73)) ) {
-                    alt57=1;
+                else if ( ((LA71_1>=72 && LA71_1<=73)) ) {
+                    alt71=1;
                 }
             }
-            switch (alt57) {
+            switch (alt71) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2117:6: otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2189:6: otherlv_5= '{' ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )? otherlv_8= '}'
                     {
-                    otherlv_5=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleEnumerationCS4635); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleEnumerationCS5122); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_5, grammarAccess.getEnumerationCSAccess().getLeftCurlyBracketKeyword_4_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2121:1: ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )?
-                    int alt56=3;
-                    int LA56_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2193:1: ( ( (lv_isSerializable_6_0= 'serializable' ) ) | otherlv_7= '!serializable' )?
+                    int alt70=3;
+                    int LA70_0 = input.LA(1);
 
-                    if ( (LA56_0==72) ) {
-                        alt56=1;
+                    if ( (LA70_0==72) ) {
+                        alt70=1;
                     }
-                    else if ( (LA56_0==73) ) {
-                        alt56=2;
+                    else if ( (LA70_0==73) ) {
+                        alt70=2;
                     }
-                    switch (alt56) {
+                    switch (alt70) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2121:2: ( (lv_isSerializable_6_0= 'serializable' ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2193:2: ( (lv_isSerializable_6_0= 'serializable' ) )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2121:2: ( (lv_isSerializable_6_0= 'serializable' ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2122:1: (lv_isSerializable_6_0= 'serializable' )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2193:2: ( (lv_isSerializable_6_0= 'serializable' ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2194:1: (lv_isSerializable_6_0= 'serializable' )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2122:1: (lv_isSerializable_6_0= 'serializable' )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2123:3: lv_isSerializable_6_0= 'serializable'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2194:1: (lv_isSerializable_6_0= 'serializable' )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2195:3: lv_isSerializable_6_0= 'serializable'
                             {
-                            lv_isSerializable_6_0=(Token)match(input,72,FollowSets000.FOLLOW_72_in_ruleEnumerationCS4654); if (state.failed) return current;
+                            lv_isSerializable_6_0=(Token)match(input,72,FollowSets000.FOLLOW_72_in_ruleEnumerationCS5141); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                       newLeafNode(lv_isSerializable_6_0, grammarAccess.getEnumerationCSAccess().getIsSerializableSerializableKeyword_4_1_0_0());
@@ -6191,9 +6636,9 @@
                             }
                             break;
                         case 2 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2137:7: otherlv_7= '!serializable'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2209:7: otherlv_7= '!serializable'
                             {
-                            otherlv_7=(Token)match(input,73,FollowSets000.FOLLOW_73_in_ruleEnumerationCS4685); if (state.failed) return current;
+                            otherlv_7=(Token)match(input,73,FollowSets000.FOLLOW_73_in_ruleEnumerationCS5172); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_7, grammarAccess.getEnumerationCSAccess().getSerializableKeyword_4_1_1());
@@ -6205,7 +6650,7 @@
 
                     }
 
-                    otherlv_8=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleEnumerationCS4699); if (state.failed) return current;
+                    otherlv_8=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleEnumerationCS5186); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_8, grammarAccess.getEnumerationCSAccess().getRightCurlyBracketKeyword_4_2());
@@ -6217,46 +6662,46 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2145:3: ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' )
-            int alt59=2;
-            int LA59_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2217:3: ( (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' ) | otherlv_14= ';' )
+            int alt73=2;
+            int LA73_0 = input.LA(1);
 
-            if ( (LA59_0==61) ) {
-                alt59=1;
+            if ( (LA73_0==61) ) {
+                alt73=1;
             }
-            else if ( (LA59_0==58) ) {
-                alt59=2;
+            else if ( (LA73_0==58) ) {
+                alt73=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 59, 0, input);
+                    new NoViableAltException("", 73, 0, input);
 
                 throw nvae;
             }
-            switch (alt59) {
+            switch (alt73) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2145:4: (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2217:4: (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2145:4: (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2145:6: otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2217:4: (otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2217:6: otherlv_9= '{' ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )* otherlv_13= '}'
                     {
-                    otherlv_9=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleEnumerationCS4715); if (state.failed) return current;
+                    otherlv_9=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleEnumerationCS5202); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_9, grammarAccess.getEnumerationCSAccess().getLeftCurlyBracketKeyword_5_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2149:1: ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )*
-                    loop58:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2221:1: ( ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) ) | ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) ) | ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) ) )*
+                    loop72:
                     do {
-                        int alt58=4;
+                        int alt72=4;
                         switch ( input.LA(1) ) {
                         case 59:
                         case 74:
                         case 80:
                             {
-                            alt58=1;
+                            alt72=1;
                             }
                             break;
                         case RULE_SIMPLE_ID:
@@ -6298,18 +6743,18 @@
                         case 53:
                         case 75:
                             {
-                            alt58=2;
+                            alt72=2;
                             }
                             break;
                         case 22:
                             {
-                            int LA58_4 = input.LA(2);
+                            int LA72_4 = input.LA(2);
 
-                            if ( (LA58_4==54) ) {
-                                alt58=3;
+                            if ( (LA72_4==54) ) {
+                                alt72=3;
                             }
-                            else if ( (LA58_4==58||LA58_4==61||LA58_4==63) ) {
-                                alt58=2;
+                            else if ( (LA72_4==58||LA72_4==61||LA72_4==63) ) {
+                                alt72=2;
                             }
 
 
@@ -6317,28 +6762,28 @@
                             break;
                         case 54:
                             {
-                            alt58=3;
+                            alt72=3;
                             }
                             break;
 
                         }
 
-                        switch (alt58) {
+                        switch (alt72) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2149:2: ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2221:2: ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2149:2: ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2150:1: (lv_ownedAnnotations_10_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2221:2: ( (lv_ownedAnnotations_10_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2222:1: (lv_ownedAnnotations_10_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2150:1: (lv_ownedAnnotations_10_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2151:3: lv_ownedAnnotations_10_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2222:1: (lv_ownedAnnotations_10_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2223:3: lv_ownedAnnotations_10_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getEnumerationCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_5_0_1_0_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleEnumerationCS4737);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleEnumerationCS5224);
                     	    lv_ownedAnnotations_10_0=ruleAnnotationElementCS();
 
                     	    state._fsp--;
@@ -6366,20 +6811,20 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2168:6: ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2240:6: ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2168:6: ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2169:1: (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2240:6: ( (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2241:1: (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2169:1: (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2170:3: lv_ownedLiterals_11_0= ruleEnumerationLiteralCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2241:1: (lv_ownedLiterals_11_0= ruleEnumerationLiteralCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2242:3: lv_ownedLiterals_11_0= ruleEnumerationLiteralCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getEnumerationCSAccess().getOwnedLiteralsEnumerationLiteralCSParserRuleCall_5_0_1_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralCS_in_ruleEnumerationCS4764);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralCS_in_ruleEnumerationCS5251);
                     	    lv_ownedLiterals_11_0=ruleEnumerationLiteralCS();
 
                     	    state._fsp--;
@@ -6407,20 +6852,20 @@
                     	    }
                     	    break;
                     	case 3 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2187:6: ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2259:6: ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2187:6: ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2188:1: (lv_ownedConstraints_12_0= ruleInvariantConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2259:6: ( (lv_ownedConstraints_12_0= ruleInvariantConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2260:1: (lv_ownedConstraints_12_0= ruleInvariantConstraintCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2188:1: (lv_ownedConstraints_12_0= ruleInvariantConstraintCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2189:3: lv_ownedConstraints_12_0= ruleInvariantConstraintCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2260:1: (lv_ownedConstraints_12_0= ruleInvariantConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2261:3: lv_ownedConstraints_12_0= ruleInvariantConstraintCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getEnumerationCSAccess().getOwnedConstraintsInvariantConstraintCSParserRuleCall_5_0_1_2_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleInvariantConstraintCS_in_ruleEnumerationCS4791);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleInvariantConstraintCS_in_ruleEnumerationCS5278);
                     	    lv_ownedConstraints_12_0=ruleInvariantConstraintCS();
 
                     	    state._fsp--;
@@ -6449,11 +6894,11 @@
                     	    break;
 
                     	default :
-                    	    break loop58;
+                    	    break loop72;
                         }
                     } while (true);
 
-                    otherlv_13=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleEnumerationCS4805); if (state.failed) return current;
+                    otherlv_13=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleEnumerationCS5292); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_13, grammarAccess.getEnumerationCSAccess().getRightCurlyBracketKeyword_5_0_2());
@@ -6466,9 +6911,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2210:7: otherlv_14= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2282:7: otherlv_14= ';'
                     {
-                    otherlv_14=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleEnumerationCS4824); if (state.failed) return current;
+                    otherlv_14=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleEnumerationCS5311); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_14, grammarAccess.getEnumerationCSAccess().getSemicolonKeyword_5_1());
@@ -6503,7 +6948,7 @@
 
 
     // $ANTLR start "entryRuleEnumerationLiteralCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2222:1: entryRuleEnumerationLiteralCS returns [EObject current=null] : iv_ruleEnumerationLiteralCS= ruleEnumerationLiteralCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2294:1: entryRuleEnumerationLiteralCS returns [EObject current=null] : iv_ruleEnumerationLiteralCS= ruleEnumerationLiteralCS EOF ;
     public final EObject entryRuleEnumerationLiteralCS() throws RecognitionException {
         EObject current = null;
 
@@ -6511,13 +6956,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2223:2: (iv_ruleEnumerationLiteralCS= ruleEnumerationLiteralCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2224:2: iv_ruleEnumerationLiteralCS= ruleEnumerationLiteralCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2295:2: (iv_ruleEnumerationLiteralCS= ruleEnumerationLiteralCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2296:2: iv_ruleEnumerationLiteralCS= ruleEnumerationLiteralCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getEnumerationLiteralCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralCS_in_entryRuleEnumerationLiteralCS4861);
+            pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralCS_in_entryRuleEnumerationLiteralCS5348);
             iv_ruleEnumerationLiteralCS=ruleEnumerationLiteralCS();
 
             state._fsp--;
@@ -6525,7 +6970,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleEnumerationLiteralCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEnumerationLiteralCS4871); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEnumerationLiteralCS5358); if (state.failed) return current;
 
             }
 
@@ -6543,7 +6988,7 @@
 
 
     // $ANTLR start "ruleEnumerationLiteralCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2231:1: ruleEnumerationLiteralCS returns [EObject current=null] : ( ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2303:1: ruleEnumerationLiteralCS returns [EObject current=null] : ( ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' ) ) ;
     public final EObject ruleEnumerationLiteralCS() throws RecognitionException {
         EObject current = null;
 
@@ -6564,54 +7009,54 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2234:28: ( ( ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2235:1: ( ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2306:28: ( ( ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2307:1: ( ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2235:1: ( ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2235:2: ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2307:1: ( ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2307:2: ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) ) (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )? ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2235:2: ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) )
-            int alt60=2;
-            int LA60_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2307:2: ( (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) ) | ( (lv_name_2_0= ruleEnumerationLiteralName ) ) )
+            int alt74=2;
+            int LA74_0 = input.LA(1);
 
-            if ( (LA60_0==75) ) {
-                alt60=1;
+            if ( (LA74_0==75) ) {
+                alt74=1;
             }
-            else if ( ((LA60_0>=RULE_SIMPLE_ID && LA60_0<=RULE_ESCAPED_ID)||LA60_0==17||(LA60_0>=19 && LA60_0<=53)) ) {
-                alt60=2;
+            else if ( ((LA74_0>=RULE_SIMPLE_ID && LA74_0<=RULE_ESCAPED_ID)||LA74_0==17||(LA74_0>=19 && LA74_0<=53)) ) {
+                alt74=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 60, 0, input);
+                    new NoViableAltException("", 74, 0, input);
 
                 throw nvae;
             }
-            switch (alt60) {
+            switch (alt74) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2235:3: (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2307:3: (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2235:3: (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2235:5: otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2307:3: (otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2307:5: otherlv_0= 'literal' ( (lv_name_1_0= ruleUnrestrictedName ) )
                     {
-                    otherlv_0=(Token)match(input,75,FollowSets000.FOLLOW_75_in_ruleEnumerationLiteralCS4910); if (state.failed) return current;
+                    otherlv_0=(Token)match(input,75,FollowSets000.FOLLOW_75_in_ruleEnumerationLiteralCS5397); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_0, grammarAccess.getEnumerationLiteralCSAccess().getLiteralKeyword_0_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2239:1: ( (lv_name_1_0= ruleUnrestrictedName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2240:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2311:1: ( (lv_name_1_0= ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2312:1: (lv_name_1_0= ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2240:1: (lv_name_1_0= ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2241:3: lv_name_1_0= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2312:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2313:3: lv_name_1_0= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getEnumerationLiteralCSAccess().getNameUnrestrictedNameParserRuleCall_0_0_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleEnumerationLiteralCS4931);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleEnumerationLiteralCS5418);
                     lv_name_1_0=ruleUnrestrictedName();
 
                     state._fsp--;
@@ -6642,20 +7087,20 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2258:6: ( (lv_name_2_0= ruleEnumerationLiteralName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2330:6: ( (lv_name_2_0= ruleEnumerationLiteralName ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2258:6: ( (lv_name_2_0= ruleEnumerationLiteralName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2259:1: (lv_name_2_0= ruleEnumerationLiteralName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2330:6: ( (lv_name_2_0= ruleEnumerationLiteralName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2331:1: (lv_name_2_0= ruleEnumerationLiteralName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2259:1: (lv_name_2_0= ruleEnumerationLiteralName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2260:3: lv_name_2_0= ruleEnumerationLiteralName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2331:1: (lv_name_2_0= ruleEnumerationLiteralName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2332:3: lv_name_2_0= ruleEnumerationLiteralName
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getEnumerationLiteralCSAccess().getNameEnumerationLiteralNameParserRuleCall_0_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralName_in_ruleEnumerationLiteralCS4959);
+                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralName_in_ruleEnumerationLiteralCS5446);
                     lv_name_2_0=ruleEnumerationLiteralName();
 
                     state._fsp--;
@@ -6685,35 +7130,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2276:3: (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )?
-            int alt61=2;
-            int LA61_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2348:3: (otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) ) )?
+            int alt75=2;
+            int LA75_0 = input.LA(1);
 
-            if ( (LA61_0==63) ) {
-                alt61=1;
+            if ( (LA75_0==63) ) {
+                alt75=1;
             }
-            switch (alt61) {
+            switch (alt75) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2276:5: otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2348:5: otherlv_3= '=' ( (lv_value_4_0= ruleSIGNED ) )
                     {
-                    otherlv_3=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleEnumerationLiteralCS4973); if (state.failed) return current;
+                    otherlv_3=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleEnumerationLiteralCS5460); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_3, grammarAccess.getEnumerationLiteralCSAccess().getEqualsSignKeyword_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2280:1: ( (lv_value_4_0= ruleSIGNED ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2281:1: (lv_value_4_0= ruleSIGNED )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2352:1: ( (lv_value_4_0= ruleSIGNED ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2353:1: (lv_value_4_0= ruleSIGNED )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2281:1: (lv_value_4_0= ruleSIGNED )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2282:3: lv_value_4_0= ruleSIGNED
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2353:1: (lv_value_4_0= ruleSIGNED )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2354:3: lv_value_4_0= ruleSIGNED
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getEnumerationLiteralCSAccess().getValueSIGNEDParserRuleCall_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleSIGNED_in_ruleEnumerationLiteralCS4994);
+                    pushFollow(FollowSets000.FOLLOW_ruleSIGNED_in_ruleEnumerationLiteralCS5481);
                     lv_value_4_0=ruleSIGNED();
 
                     state._fsp--;
@@ -6743,60 +7188,60 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2298:4: ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' )
-            int alt63=2;
-            int LA63_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2370:4: ( (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' ) | otherlv_8= ';' )
+            int alt77=2;
+            int LA77_0 = input.LA(1);
 
-            if ( (LA63_0==61) ) {
-                alt63=1;
+            if ( (LA77_0==61) ) {
+                alt77=1;
             }
-            else if ( (LA63_0==58) ) {
-                alt63=2;
+            else if ( (LA77_0==58) ) {
+                alt77=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 63, 0, input);
+                    new NoViableAltException("", 77, 0, input);
 
                 throw nvae;
             }
-            switch (alt63) {
+            switch (alt77) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2298:5: (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2370:5: (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2298:5: (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2298:7: otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2370:5: (otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2370:7: otherlv_5= '{' ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )* otherlv_7= '}'
                     {
-                    otherlv_5=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleEnumerationLiteralCS5010); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleEnumerationLiteralCS5497); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_5, grammarAccess.getEnumerationLiteralCSAccess().getLeftCurlyBracketKeyword_2_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2302:1: ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )*
-                    loop62:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2374:1: ( (lv_ownedAnnotations_6_0= ruleAnnotationElementCS ) )*
+                    loop76:
                     do {
-                        int alt62=2;
-                        int LA62_0 = input.LA(1);
+                        int alt76=2;
+                        int LA76_0 = input.LA(1);
 
-                        if ( (LA62_0==59||LA62_0==74||LA62_0==80) ) {
-                            alt62=1;
+                        if ( (LA76_0==59||LA76_0==74||LA76_0==80) ) {
+                            alt76=1;
                         }
 
 
-                        switch (alt62) {
+                        switch (alt76) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2303:1: (lv_ownedAnnotations_6_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2375:1: (lv_ownedAnnotations_6_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2303:1: (lv_ownedAnnotations_6_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2304:3: lv_ownedAnnotations_6_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2375:1: (lv_ownedAnnotations_6_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2376:3: lv_ownedAnnotations_6_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getEnumerationLiteralCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_2_0_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleEnumerationLiteralCS5031);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleEnumerationLiteralCS5518);
                     	    lv_ownedAnnotations_6_0=ruleAnnotationElementCS();
 
                     	    state._fsp--;
@@ -6822,11 +7267,11 @@
                     	    break;
 
                     	default :
-                    	    break loop62;
+                    	    break loop76;
                         }
                     } while (true);
 
-                    otherlv_7=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleEnumerationLiteralCS5044); if (state.failed) return current;
+                    otherlv_7=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleEnumerationLiteralCS5531); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_7, grammarAccess.getEnumerationLiteralCSAccess().getRightCurlyBracketKeyword_2_0_2());
@@ -6839,9 +7284,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2325:7: otherlv_8= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2397:7: otherlv_8= ';'
                     {
-                    otherlv_8=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleEnumerationLiteralCS5063); if (state.failed) return current;
+                    otherlv_8=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleEnumerationLiteralCS5550); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_8, grammarAccess.getEnumerationLiteralCSAccess().getSemicolonKeyword_2_1());
@@ -6876,7 +7321,7 @@
 
 
     // $ANTLR start "entryRuleImportCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2337:1: entryRuleImportCS returns [EObject current=null] : iv_ruleImportCS= ruleImportCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2409:1: entryRuleImportCS returns [EObject current=null] : iv_ruleImportCS= ruleImportCS EOF ;
     public final EObject entryRuleImportCS() throws RecognitionException {
         EObject current = null;
 
@@ -6884,13 +7329,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2338:2: (iv_ruleImportCS= ruleImportCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2339:2: iv_ruleImportCS= ruleImportCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2410:2: (iv_ruleImportCS= ruleImportCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2411:2: iv_ruleImportCS= ruleImportCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getImportCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleImportCS_in_entryRuleImportCS5100);
+            pushFollow(FollowSets000.FOLLOW_ruleImportCS_in_entryRuleImportCS5587);
             iv_ruleImportCS=ruleImportCS();
 
             state._fsp--;
@@ -6898,7 +7343,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleImportCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleImportCS5110); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleImportCS5597); if (state.failed) return current;
 
             }
 
@@ -6916,7 +7361,7 @@
 
 
     // $ANTLR start "ruleImportCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2346:1: ruleImportCS returns [EObject current=null] : (otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2418:1: ruleImportCS returns [EObject current=null] : (otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';' ) ;
     public final EObject ruleImportCS() throws RecognitionException {
         EObject current = null;
 
@@ -6932,37 +7377,37 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2349:28: ( (otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2350:1: (otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2421:28: ( (otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2422:1: (otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2350:1: (otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2350:3: otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2422:1: (otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2422:3: otherlv_0= 'import' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) ) ( (lv_isAll_4_0= '::*' ) )? otherlv_5= ';'
             {
-            otherlv_0=(Token)match(input,32,FollowSets000.FOLLOW_32_in_ruleImportCS5147); if (state.failed) return current;
+            otherlv_0=(Token)match(input,32,FollowSets000.FOLLOW_32_in_ruleImportCS5634); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getImportCSAccess().getImportKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2354:1: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )?
-            int alt64=2;
-            alt64 = dfa64.predict(input);
-            switch (alt64) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2426:1: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )?
+            int alt78=2;
+            alt78 = dfa78.predict(input);
+            switch (alt78) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2354:2: ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2426:2: ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':'
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2354:2: ( (lv_name_1_0= ruleUnrestrictedName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2355:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2426:2: ( (lv_name_1_0= ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2427:1: (lv_name_1_0= ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2355:1: (lv_name_1_0= ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2356:3: lv_name_1_0= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2427:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2428:3: lv_name_1_0= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getImportCSAccess().getNameUnrestrictedNameParserRuleCall_1_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleImportCS5169);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleImportCS5656);
                     lv_name_1_0=ruleUnrestrictedName();
 
                     state._fsp--;
@@ -6986,7 +7431,7 @@
 
                     }
 
-                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleImportCS5181); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleImportCS5668); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_2, grammarAccess.getImportCSAccess().getColonKeyword_1_1());
@@ -6998,18 +7443,18 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2376:3: ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2377:1: (lv_ownedPathName_3_0= ruleURIPathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2448:3: ( (lv_ownedPathName_3_0= ruleURIPathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2449:1: (lv_ownedPathName_3_0= ruleURIPathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2377:1: (lv_ownedPathName_3_0= ruleURIPathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2378:3: lv_ownedPathName_3_0= ruleURIPathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2449:1: (lv_ownedPathName_3_0= ruleURIPathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2450:3: lv_ownedPathName_3_0= ruleURIPathNameCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getImportCSAccess().getOwnedPathNameURIPathNameCSParserRuleCall_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleURIPathNameCS_in_ruleImportCS5204);
+            pushFollow(FollowSets000.FOLLOW_ruleURIPathNameCS_in_ruleImportCS5691);
             lv_ownedPathName_3_0=ruleURIPathNameCS();
 
             state._fsp--;
@@ -7033,21 +7478,21 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2394:2: ( (lv_isAll_4_0= '::*' ) )?
-            int alt65=2;
-            int LA65_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2466:2: ( (lv_isAll_4_0= '::*' ) )?
+            int alt79=2;
+            int LA79_0 = input.LA(1);
 
-            if ( (LA65_0==76) ) {
-                alt65=1;
+            if ( (LA79_0==76) ) {
+                alt79=1;
             }
-            switch (alt65) {
+            switch (alt79) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2395:1: (lv_isAll_4_0= '::*' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2467:1: (lv_isAll_4_0= '::*' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2395:1: (lv_isAll_4_0= '::*' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2396:3: lv_isAll_4_0= '::*'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2467:1: (lv_isAll_4_0= '::*' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2468:3: lv_isAll_4_0= '::*'
                     {
-                    lv_isAll_4_0=(Token)match(input,76,FollowSets000.FOLLOW_76_in_ruleImportCS5222); if (state.failed) return current;
+                    lv_isAll_4_0=(Token)match(input,76,FollowSets000.FOLLOW_76_in_ruleImportCS5709); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               newLeafNode(lv_isAll_4_0, grammarAccess.getImportCSAccess().getIsAllColonColonAsteriskKeyword_3_0());
@@ -7070,7 +7515,7 @@
 
             }
 
-            otherlv_5=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleImportCS5248); if (state.failed) return current;
+            otherlv_5=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleImportCS5735); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_5, grammarAccess.getImportCSAccess().getSemicolonKeyword_4());
@@ -7099,7 +7544,7 @@
 
 
     // $ANTLR start "entryRuleLibraryCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2421:1: entryRuleLibraryCS returns [EObject current=null] : iv_ruleLibraryCS= ruleLibraryCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2493:1: entryRuleLibraryCS returns [EObject current=null] : iv_ruleLibraryCS= ruleLibraryCS EOF ;
     public final EObject entryRuleLibraryCS() throws RecognitionException {
         EObject current = null;
 
@@ -7107,13 +7552,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2422:2: (iv_ruleLibraryCS= ruleLibraryCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2423:2: iv_ruleLibraryCS= ruleLibraryCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2494:2: (iv_ruleLibraryCS= ruleLibraryCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2495:2: iv_ruleLibraryCS= ruleLibraryCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getLibraryCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleLibraryCS_in_entryRuleLibraryCS5284);
+            pushFollow(FollowSets000.FOLLOW_ruleLibraryCS_in_entryRuleLibraryCS5771);
             iv_ruleLibraryCS=ruleLibraryCS();
 
             state._fsp--;
@@ -7121,7 +7566,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleLibraryCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLibraryCS5294); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLibraryCS5781); if (state.failed) return current;
 
             }
 
@@ -7139,7 +7584,7 @@
 
 
     // $ANTLR start "ruleLibraryCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2430:1: ruleLibraryCS returns [EObject current=null] : (otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2502:1: ruleLibraryCS returns [EObject current=null] : (otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';' ) ;
     public final EObject ruleLibraryCS() throws RecognitionException {
         EObject current = null;
 
@@ -7152,41 +7597,41 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2433:28: ( (otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2434:1: (otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2505:28: ( (otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2506:1: (otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2434:1: (otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2434:3: otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2506:1: (otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2506:3: otherlv_0= 'library' ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )? ( ( ruleURI ) ) otherlv_4= ';'
             {
-            otherlv_0=(Token)match(input,36,FollowSets000.FOLLOW_36_in_ruleLibraryCS5331); if (state.failed) return current;
+            otherlv_0=(Token)match(input,36,FollowSets000.FOLLOW_36_in_ruleLibraryCS5818); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getLibraryCSAccess().getLibraryKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2438:1: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )?
-            int alt66=2;
-            int LA66_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2510:1: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )?
+            int alt80=2;
+            int LA80_0 = input.LA(1);
 
-            if ( ((LA66_0>=RULE_SIMPLE_ID && LA66_0<=RULE_ESCAPED_ID)||LA66_0==17||(LA66_0>=19 && LA66_0<=54)||LA66_0==59||LA66_0==72||(LA66_0>=74 && LA66_0<=75)||LA66_0==80) ) {
-                alt66=1;
+            if ( ((LA80_0>=RULE_SIMPLE_ID && LA80_0<=RULE_ESCAPED_ID)||LA80_0==17||(LA80_0>=19 && LA80_0<=54)||LA80_0==59||LA80_0==72||(LA80_0>=74 && LA80_0<=75)||LA80_0==80) ) {
+                alt80=1;
             }
-            switch (alt66) {
+            switch (alt80) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2438:2: ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2510:2: ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':'
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2438:2: ( (lv_name_1_0= ruleUnrestrictedName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2439:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2510:2: ( (lv_name_1_0= ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2511:1: (lv_name_1_0= ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2439:1: (lv_name_1_0= ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2440:3: lv_name_1_0= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2511:1: (lv_name_1_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2512:3: lv_name_1_0= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getLibraryCSAccess().getNameUnrestrictedNameParserRuleCall_1_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleLibraryCS5353);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleLibraryCS5840);
                     lv_name_1_0=ruleUnrestrictedName();
 
                     state._fsp--;
@@ -7210,7 +7655,7 @@
 
                     }
 
-                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleLibraryCS5365); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleLibraryCS5852); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_2, grammarAccess.getLibraryCSAccess().getColonKeyword_1_1());
@@ -7222,11 +7667,11 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2460:3: ( ( ruleURI ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2461:1: ( ruleURI )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2532:3: ( ( ruleURI ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2533:1: ( ruleURI )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2461:1: ( ruleURI )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2462:3: ruleURI
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2533:1: ( ruleURI )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2534:3: ruleURI
             {
             if ( state.backtracking==0 ) {
                
@@ -7245,7 +7690,7 @@
               	        newCompositeNode(grammarAccess.getLibraryCSAccess().getReferredPackagePackageCrossReference_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleURI_in_ruleLibraryCS5394);
+            pushFollow(FollowSets000.FOLLOW_ruleURI_in_ruleLibraryCS5881);
             ruleURI();
 
             state._fsp--;
@@ -7261,7 +7706,7 @@
 
             }
 
-            otherlv_4=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleLibraryCS5406); if (state.failed) return current;
+            otherlv_4=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleLibraryCS5893); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_4, grammarAccess.getLibraryCSAccess().getSemicolonKeyword_3());
@@ -7290,7 +7735,7 @@
 
 
     // $ANTLR start "entryRuleModelElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2490:1: entryRuleModelElementCS returns [EObject current=null] : iv_ruleModelElementCS= ruleModelElementCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2562:1: entryRuleModelElementCS returns [EObject current=null] : iv_ruleModelElementCS= ruleModelElementCS EOF ;
     public final EObject entryRuleModelElementCS() throws RecognitionException {
         EObject current = null;
 
@@ -7298,13 +7743,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2491:2: (iv_ruleModelElementCS= ruleModelElementCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2492:2: iv_ruleModelElementCS= ruleModelElementCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2563:2: (iv_ruleModelElementCS= ruleModelElementCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2564:2: iv_ruleModelElementCS= ruleModelElementCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getModelElementCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleModelElementCS_in_entryRuleModelElementCS5442);
+            pushFollow(FollowSets000.FOLLOW_ruleModelElementCS_in_entryRuleModelElementCS5929);
             iv_ruleModelElementCS=ruleModelElementCS();
 
             state._fsp--;
@@ -7312,7 +7757,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleModelElementCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleModelElementCS5452); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleModelElementCS5939); if (state.failed) return current;
 
             }
 
@@ -7330,7 +7775,7 @@
 
 
     // $ANTLR start "ruleModelElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2499:1: ruleModelElementCS returns [EObject current=null] : (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2571:1: ruleModelElementCS returns [EObject current=null] : (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS ) ;
     public final EObject ruleModelElementCS() throws RecognitionException {
         EObject current = null;
 
@@ -7348,15 +7793,15 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2502:28: ( (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2503:1: (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2574:28: ( (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2575:1: (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2503:1: (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS )
-            int alt67=5;
-            alt67 = dfa67.predict(input);
-            switch (alt67) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2575:1: (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS )
+            int alt81=5;
+            alt81 = dfa81.predict(input);
+            switch (alt81) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2504:2: this_ClassCS_0= ruleClassCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2576:2: this_ClassCS_0= ruleClassCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -7368,7 +7813,7 @@
                               newCompositeNode(grammarAccess.getModelElementCSAccess().getClassCSParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleClassCS_in_ruleModelElementCS5502);
+                    pushFollow(FollowSets000.FOLLOW_ruleClassCS_in_ruleModelElementCS5989);
                     this_ClassCS_0=ruleClassCS();
 
                     state._fsp--;
@@ -7383,7 +7828,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2517:2: this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2589:2: this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -7395,7 +7840,7 @@
                               newCompositeNode(grammarAccess.getModelElementCSAccess().getEnumerationLiteralCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralCS_in_ruleModelElementCS5532);
+                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralCS_in_ruleModelElementCS6019);
                     this_EnumerationLiteralCS_1=ruleEnumerationLiteralCS();
 
                     state._fsp--;
@@ -7410,7 +7855,7 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2530:2: this_OperationCS_2= ruleOperationCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2602:2: this_OperationCS_2= ruleOperationCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -7422,7 +7867,7 @@
                               newCompositeNode(grammarAccess.getModelElementCSAccess().getOperationCSParserRuleCall_2()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleOperationCS_in_ruleModelElementCS5562);
+                    pushFollow(FollowSets000.FOLLOW_ruleOperationCS_in_ruleModelElementCS6049);
                     this_OperationCS_2=ruleOperationCS();
 
                     state._fsp--;
@@ -7437,7 +7882,7 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2543:2: this_PackageCS_3= rulePackageCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2615:2: this_PackageCS_3= rulePackageCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -7449,7 +7894,7 @@
                               newCompositeNode(grammarAccess.getModelElementCSAccess().getPackageCSParserRuleCall_3()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePackageCS_in_ruleModelElementCS5592);
+                    pushFollow(FollowSets000.FOLLOW_rulePackageCS_in_ruleModelElementCS6079);
                     this_PackageCS_3=rulePackageCS();
 
                     state._fsp--;
@@ -7464,7 +7909,7 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2556:2: this_StructuralFeatureCS_4= ruleStructuralFeatureCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2628:2: this_StructuralFeatureCS_4= ruleStructuralFeatureCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -7476,7 +7921,7 @@
                               newCompositeNode(grammarAccess.getModelElementCSAccess().getStructuralFeatureCSParserRuleCall_4()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleStructuralFeatureCS_in_ruleModelElementCS5622);
+                    pushFollow(FollowSets000.FOLLOW_ruleStructuralFeatureCS_in_ruleModelElementCS6109);
                     this_StructuralFeatureCS_4=ruleStructuralFeatureCS();
 
                     state._fsp--;
@@ -7513,7 +7958,7 @@
 
 
     // $ANTLR start "entryRuleModelElementRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2575:1: entryRuleModelElementRefCS returns [EObject current=null] : iv_ruleModelElementRefCS= ruleModelElementRefCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2647:1: entryRuleModelElementRefCS returns [EObject current=null] : iv_ruleModelElementRefCS= ruleModelElementRefCS EOF ;
     public final EObject entryRuleModelElementRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -7521,13 +7966,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2576:2: (iv_ruleModelElementRefCS= ruleModelElementRefCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2577:2: iv_ruleModelElementRefCS= ruleModelElementRefCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2648:2: (iv_ruleModelElementRefCS= ruleModelElementRefCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2649:2: iv_ruleModelElementRefCS= ruleModelElementRefCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getModelElementRefCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleModelElementRefCS_in_entryRuleModelElementRefCS5657);
+            pushFollow(FollowSets000.FOLLOW_ruleModelElementRefCS_in_entryRuleModelElementRefCS6144);
             iv_ruleModelElementRefCS=ruleModelElementRefCS();
 
             state._fsp--;
@@ -7535,7 +7980,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleModelElementRefCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleModelElementRefCS5667); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleModelElementRefCS6154); if (state.failed) return current;
 
             }
 
@@ -7553,7 +7998,7 @@
 
 
     // $ANTLR start "ruleModelElementRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2584:1: ruleModelElementRefCS returns [EObject current=null] : (otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2656:1: ruleModelElementRefCS returns [EObject current=null] : (otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';' ) ;
     public final EObject ruleModelElementRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -7565,30 +8010,30 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2587:28: ( (otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2588:1: (otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2659:28: ( (otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2660:1: (otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2588:1: (otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2588:3: otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2660:1: (otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2660:3: otherlv_0= 'reference' ( (lv_ownedPathName_1_0= rulePathNameCS ) ) otherlv_2= ';'
             {
-            otherlv_0=(Token)match(input,45,FollowSets000.FOLLOW_45_in_ruleModelElementRefCS5704); if (state.failed) return current;
+            otherlv_0=(Token)match(input,45,FollowSets000.FOLLOW_45_in_ruleModelElementRefCS6191); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getModelElementRefCSAccess().getReferenceKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2592:1: ( (lv_ownedPathName_1_0= rulePathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2593:1: (lv_ownedPathName_1_0= rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2664:1: ( (lv_ownedPathName_1_0= rulePathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2665:1: (lv_ownedPathName_1_0= rulePathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2593:1: (lv_ownedPathName_1_0= rulePathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2594:3: lv_ownedPathName_1_0= rulePathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2665:1: (lv_ownedPathName_1_0= rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2666:3: lv_ownedPathName_1_0= rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getModelElementRefCSAccess().getOwnedPathNamePathNameCSParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_ruleModelElementRefCS5725);
+            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_ruleModelElementRefCS6212);
             lv_ownedPathName_1_0=rulePathNameCS();
 
             state._fsp--;
@@ -7612,7 +8057,7 @@
 
             }
 
-            otherlv_2=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleModelElementRefCS5737); if (state.failed) return current;
+            otherlv_2=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleModelElementRefCS6224); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_2, grammarAccess.getModelElementRefCSAccess().getSemicolonKeyword_2());
@@ -7641,21 +8086,27 @@
 
 
     // $ANTLR start "entryRuleOperationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2622:1: entryRuleOperationCS returns [EObject current=null] : iv_ruleOperationCS= ruleOperationCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2694:1: entryRuleOperationCS returns [EObject current=null] : iv_ruleOperationCS= ruleOperationCS EOF ;
     public final EObject entryRuleOperationCS() throws RecognitionException {
         EObject current = null;
 
         EObject iv_ruleOperationCS = null;
 
 
+         
+        		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+        			grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 
+        			grammarAccess.getOperationCSAccess().getUnorderedGroup_9()
+        		);
+        	
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2623:2: (iv_ruleOperationCS= ruleOperationCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2624:2: iv_ruleOperationCS= ruleOperationCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2701:2: (iv_ruleOperationCS= ruleOperationCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2702:2: iv_ruleOperationCS= ruleOperationCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getOperationCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleOperationCS_in_entryRuleOperationCS5773);
+            pushFollow(FollowSets000.FOLLOW_ruleOperationCS_in_entryRuleOperationCS6266);
             iv_ruleOperationCS=ruleOperationCS();
 
             state._fsp--;
@@ -7663,7 +8114,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleOperationCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleOperationCS5783); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleOperationCS6276); if (state.failed) return current;
 
             }
 
@@ -7674,6 +8125,9 @@
                 appendSkippedTokens();
             } 
         finally {
+
+            	myUnorderedGroupState.restore();
+
         }
         return current;
     }
@@ -7681,259 +8135,260 @@
 
 
     // $ANTLR start "ruleOperationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2631:1: ruleOperationCS returns [EObject current=null] : ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'operation' ( (lv_ownedSignature_5_0= ruleTemplateSignatureCS ) )? ( (lv_name_6_0= ruleUnrestrictedName ) ) otherlv_7= '(' ( ( (lv_ownedParameters_8_0= ruleParameterCS ) ) (otherlv_9= ',' ( (lv_ownedParameters_10_0= ruleParameterCS ) ) )* )? otherlv_11= ')' (otherlv_12= ':' ( (lv_ownedType_13_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_14= 'throws' ( (lv_ownedExceptions_15_0= ruleTypedRefCS ) ) (otherlv_16= ',' ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) ) )* )? (otherlv_18= '{' ( ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) ) (otherlv_25= ',' )? )+ otherlv_26= '}' )? ( (otherlv_27= '{' ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )* otherlv_36= '}' ) | otherlv_37= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2712:1: ruleOperationCS returns [EObject current=null] : ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'operation' ( (lv_ownedSignature_4_0= ruleTemplateSignatureCS ) )? ( (lv_name_5_0= ruleUnrestrictedName ) ) otherlv_6= '(' ( ( (lv_ownedParameters_7_0= ruleParameterCS ) ) (otherlv_8= ',' ( (lv_ownedParameters_9_0= ruleParameterCS ) ) )* )? otherlv_10= ')' (otherlv_11= ':' ( (lv_ownedType_12_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_13= 'throws' ( (lv_ownedExceptions_14_0= ruleTypedRefCS ) ) (otherlv_15= ',' ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )* otherlv_38= '}' ) | otherlv_39= ';' ) ) ;
     public final EObject ruleOperationCS() throws RecognitionException {
         EObject current = null;
 
-        Token lv_qualifiers_0_0=null;
-        Token lv_qualifiers_1_0=null;
-        Token lv_qualifiers_2_0=null;
-        Token lv_qualifiers_3_0=null;
-        Token otherlv_4=null;
-        Token otherlv_7=null;
-        Token otherlv_9=null;
+        Token lv_isStatic_1_0=null;
+        Token lv_isDefinition_2_0=null;
+        Token otherlv_3=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_10=null;
         Token otherlv_11=null;
-        Token otherlv_12=null;
-        Token otherlv_14=null;
-        Token otherlv_16=null;
+        Token otherlv_13=null;
+        Token otherlv_15=null;
         Token otherlv_18=null;
-        Token lv_qualifiers_19_0=null;
-        Token lv_qualifiers_20_0=null;
-        Token lv_qualifiers_21_0=null;
-        Token lv_qualifiers_22_0=null;
-        Token lv_qualifiers_23_0=null;
-        Token lv_qualifiers_24_0=null;
-        Token otherlv_25=null;
+        Token lv_isDerived_19_0=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+        Token lv_isOrdered_22_0=null;
+        Token otherlv_23=null;
+        Token otherlv_24=null;
+        Token lv_isNotUnique_25_0=null;
         Token otherlv_26=null;
         Token otherlv_27=null;
-        Token otherlv_30=null;
+        Token otherlv_28=null;
+        Token otherlv_29=null;
         Token otherlv_32=null;
         Token otherlv_34=null;
         Token otherlv_36=null;
-        Token otherlv_37=null;
-        EObject lv_ownedSignature_5_0 = null;
+        Token otherlv_38=null;
+        Token otherlv_39=null;
+        EObject lv_ownedSignature_4_0 = null;
 
-        AntlrDatatypeRuleToken lv_name_6_0 = null;
+        AntlrDatatypeRuleToken lv_name_5_0 = null;
 
-        EObject lv_ownedParameters_8_0 = null;
+        EObject lv_ownedParameters_7_0 = null;
 
-        EObject lv_ownedParameters_10_0 = null;
+        EObject lv_ownedParameters_9_0 = null;
 
-        EObject lv_ownedType_13_0 = null;
+        EObject lv_ownedType_12_0 = null;
 
-        EObject lv_ownedExceptions_15_0 = null;
+        EObject lv_ownedExceptions_14_0 = null;
 
-        EObject lv_ownedExceptions_17_0 = null;
+        EObject lv_ownedExceptions_16_0 = null;
 
-        EObject lv_ownedAnnotations_28_0 = null;
+        EObject lv_ownedAnnotations_30_0 = null;
 
-        EObject lv_ownedPreconditions_29_0 = null;
+        EObject lv_ownedPreconditions_31_0 = null;
 
-        EObject lv_ownedBodyExpressions_33_0 = null;
+        EObject lv_ownedBodyExpressions_35_0 = null;
 
-        EObject lv_ownedPostconditions_35_0 = null;
+        EObject lv_ownedPostconditions_37_0 = null;
 
 
          enterRule(); 
+        		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+        			grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 
+        			grammarAccess.getOperationCSAccess().getUnorderedGroup_9()
+        		);
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2634:28: ( ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'operation' ( (lv_ownedSignature_5_0= ruleTemplateSignatureCS ) )? ( (lv_name_6_0= ruleUnrestrictedName ) ) otherlv_7= '(' ( ( (lv_ownedParameters_8_0= ruleParameterCS ) ) (otherlv_9= ',' ( (lv_ownedParameters_10_0= ruleParameterCS ) ) )* )? otherlv_11= ')' (otherlv_12= ':' ( (lv_ownedType_13_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_14= 'throws' ( (lv_ownedExceptions_15_0= ruleTypedRefCS ) ) (otherlv_16= ',' ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) ) )* )? (otherlv_18= '{' ( ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) ) (otherlv_25= ',' )? )+ otherlv_26= '}' )? ( (otherlv_27= '{' ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )* otherlv_36= '}' ) | otherlv_37= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2635:1: ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'operation' ( (lv_ownedSignature_5_0= ruleTemplateSignatureCS ) )? ( (lv_name_6_0= ruleUnrestrictedName ) ) otherlv_7= '(' ( ( (lv_ownedParameters_8_0= ruleParameterCS ) ) (otherlv_9= ',' ( (lv_ownedParameters_10_0= ruleParameterCS ) ) )* )? otherlv_11= ')' (otherlv_12= ':' ( (lv_ownedType_13_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_14= 'throws' ( (lv_ownedExceptions_15_0= ruleTypedRefCS ) ) (otherlv_16= ',' ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) ) )* )? (otherlv_18= '{' ( ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) ) (otherlv_25= ',' )? )+ otherlv_26= '}' )? ( (otherlv_27= '{' ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )* otherlv_36= '}' ) | otherlv_37= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2719:28: ( ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'operation' ( (lv_ownedSignature_4_0= ruleTemplateSignatureCS ) )? ( (lv_name_5_0= ruleUnrestrictedName ) ) otherlv_6= '(' ( ( (lv_ownedParameters_7_0= ruleParameterCS ) ) (otherlv_8= ',' ( (lv_ownedParameters_9_0= ruleParameterCS ) ) )* )? otherlv_10= ')' (otherlv_11= ':' ( (lv_ownedType_12_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_13= 'throws' ( (lv_ownedExceptions_14_0= ruleTypedRefCS ) ) (otherlv_15= ',' ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )* otherlv_38= '}' ) | otherlv_39= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2720:1: ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'operation' ( (lv_ownedSignature_4_0= ruleTemplateSignatureCS ) )? ( (lv_name_5_0= ruleUnrestrictedName ) ) otherlv_6= '(' ( ( (lv_ownedParameters_7_0= ruleParameterCS ) ) (otherlv_8= ',' ( (lv_ownedParameters_9_0= ruleParameterCS ) ) )* )? otherlv_10= ')' (otherlv_11= ':' ( (lv_ownedType_12_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_13= 'throws' ( (lv_ownedExceptions_14_0= ruleTypedRefCS ) ) (otherlv_15= ',' ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )* otherlv_38= '}' ) | otherlv_39= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2635:1: ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'operation' ( (lv_ownedSignature_5_0= ruleTemplateSignatureCS ) )? ( (lv_name_6_0= ruleUnrestrictedName ) ) otherlv_7= '(' ( ( (lv_ownedParameters_8_0= ruleParameterCS ) ) (otherlv_9= ',' ( (lv_ownedParameters_10_0= ruleParameterCS ) ) )* )? otherlv_11= ')' (otherlv_12= ':' ( (lv_ownedType_13_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_14= 'throws' ( (lv_ownedExceptions_15_0= ruleTypedRefCS ) ) (otherlv_16= ',' ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) ) )* )? (otherlv_18= '{' ( ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) ) (otherlv_25= ',' )? )+ otherlv_26= '}' )? ( (otherlv_27= '{' ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )* otherlv_36= '}' ) | otherlv_37= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2635:2: ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'operation' ( (lv_ownedSignature_5_0= ruleTemplateSignatureCS ) )? ( (lv_name_6_0= ruleUnrestrictedName ) ) otherlv_7= '(' ( ( (lv_ownedParameters_8_0= ruleParameterCS ) ) (otherlv_9= ',' ( (lv_ownedParameters_10_0= ruleParameterCS ) ) )* )? otherlv_11= ')' (otherlv_12= ':' ( (lv_ownedType_13_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_14= 'throws' ( (lv_ownedExceptions_15_0= ruleTypedRefCS ) ) (otherlv_16= ',' ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) ) )* )? (otherlv_18= '{' ( ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) ) (otherlv_25= ',' )? )+ otherlv_26= '}' )? ( (otherlv_27= '{' ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )* otherlv_36= '}' ) | otherlv_37= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2720:1: ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'operation' ( (lv_ownedSignature_4_0= ruleTemplateSignatureCS ) )? ( (lv_name_5_0= ruleUnrestrictedName ) ) otherlv_6= '(' ( ( (lv_ownedParameters_7_0= ruleParameterCS ) ) (otherlv_8= ',' ( (lv_ownedParameters_9_0= ruleParameterCS ) ) )* )? otherlv_10= ')' (otherlv_11= ':' ( (lv_ownedType_12_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_13= 'throws' ( (lv_ownedExceptions_14_0= ruleTypedRefCS ) ) (otherlv_15= ',' ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )* otherlv_38= '}' ) | otherlv_39= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2720:2: ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'operation' ( (lv_ownedSignature_4_0= ruleTemplateSignatureCS ) )? ( (lv_name_5_0= ruleUnrestrictedName ) ) otherlv_6= '(' ( ( (lv_ownedParameters_7_0= ruleParameterCS ) ) (otherlv_8= ',' ( (lv_ownedParameters_9_0= ruleParameterCS ) ) )* )? otherlv_10= ')' (otherlv_11= ':' ( (lv_ownedType_12_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_13= 'throws' ( (lv_ownedExceptions_14_0= ruleTypedRefCS ) ) (otherlv_15= ',' ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )* otherlv_38= '}' ) | otherlv_39= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2635:2: ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )?
-            int alt70=3;
-            int LA70_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2720:2: ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2722:1: ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2722:1: ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2723:2: ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* )
+            {
+            getUnorderedGroupHelper().enter(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2726:2: ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2727:3: ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )*
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2727:3: ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )*
+            loop82:
+            do {
+                int alt82=3;
+                int LA82_0 = input.LA(1);
 
-            if ( (LA70_0==47) ) {
-                alt70=1;
-            }
-            else if ( (LA70_0==26) ) {
-                alt70=2;
-            }
-            switch (alt70) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2635:3: ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2635:3: ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2635:4: ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )?
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2635:4: ( (lv_qualifiers_0_0= 'static' ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2636:1: (lv_qualifiers_0_0= 'static' )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2636:1: (lv_qualifiers_0_0= 'static' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2637:3: lv_qualifiers_0_0= 'static'
-                    {
-                    lv_qualifiers_0_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleOperationCS5828); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                              newLeafNode(lv_qualifiers_0_0, grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_0_0_0());
-                          
-                    }
-                    if ( state.backtracking==0 ) {
-
-                      	        if (current==null) {
-                      	            current = createModelElement(grammarAccess.getOperationCSRule());
-                      	        }
-                             		addWithLastConsumed(current, "qualifiers", lv_qualifiers_0_0, "static");
-                      	    
-                    }
-
-                    }
+                if ( LA82_0 ==47 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0) ) {
+                    alt82=1;
+                }
+                else if ( LA82_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1) ) {
+                    alt82=2;
+                }
 
 
-                    }
+                switch (alt82) {
+            	case 1 :
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2729:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2729:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2730:5: {...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+            	    {
+            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleOperationCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0)");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2730:108: ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2731:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+            	    {
+            	    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0);
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2734:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2734:7: {...}? => ( (lv_isStatic_1_0= 'static' ) )
+            	    {
+            	    if ( !((true)) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleOperationCS", "true");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2734:16: ( (lv_isStatic_1_0= 'static' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2735:1: (lv_isStatic_1_0= 'static' )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2735:1: (lv_isStatic_1_0= 'static' )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2736:3: lv_isStatic_1_0= 'static'
+            	    {
+            	    lv_isStatic_1_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleOperationCS6368); if (state.failed) return current;
+            	    if ( state.backtracking==0 ) {
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2650:2: ( (lv_qualifiers_1_0= 'definition' ) )?
-                    int alt68=2;
-                    int LA68_0 = input.LA(1);
+            	              newLeafNode(lv_isStatic_1_0, grammarAccess.getOperationCSAccess().getIsStaticStaticKeyword_0_0_0());
+            	          
+            	    }
+            	    if ( state.backtracking==0 ) {
 
-                    if ( (LA68_0==26) ) {
-                        alt68=1;
-                    }
-                    switch (alt68) {
-                        case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2651:1: (lv_qualifiers_1_0= 'definition' )
-                            {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2651:1: (lv_qualifiers_1_0= 'definition' )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2652:3: lv_qualifiers_1_0= 'definition'
-                            {
-                            lv_qualifiers_1_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleOperationCS5859); if (state.failed) return current;
-                            if ( state.backtracking==0 ) {
+            	      	        if (current==null) {
+            	      	            current = createModelElement(grammarAccess.getOperationCSRule());
+            	      	        }
+            	             		setWithLastConsumed(current, "isStatic", true, "static");
+            	      	    
+            	    }
 
-                                      newLeafNode(lv_qualifiers_1_0, grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_0_1_0());
-                                  
-                            }
-                            if ( state.backtracking==0 ) {
-
-                              	        if (current==null) {
-                              	            current = createModelElement(grammarAccess.getOperationCSRule());
-                              	        }
-                                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_1_0, "definition");
-                              	    
-                            }
-
-                            }
+            	    }
 
 
-                            }
-                            break;
-
-                    }
+            	    }
 
 
-                    }
+            	    }
+
+            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+
+            	    }
 
 
-                    }
-                    break;
-                case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2666:6: ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2666:6: ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2666:7: ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )?
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2666:7: ( (lv_qualifiers_2_0= 'definition' ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2667:1: (lv_qualifiers_2_0= 'definition' )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2667:1: (lv_qualifiers_2_0= 'definition' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2668:3: lv_qualifiers_2_0= 'definition'
-                    {
-                    lv_qualifiers_2_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleOperationCS5899); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                              newLeafNode(lv_qualifiers_2_0, grammarAccess.getOperationCSAccess().getQualifiersDefinitionKeyword_0_1_0_0());
-                          
-                    }
-                    if ( state.backtracking==0 ) {
-
-                      	        if (current==null) {
-                      	            current = createModelElement(grammarAccess.getOperationCSRule());
-                      	        }
-                             		addWithLastConsumed(current, "qualifiers", lv_qualifiers_2_0, "definition");
-                      	    
-                    }
-
-                    }
+            	    }
 
 
-                    }
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2756:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2756:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2757:5: {...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+            	    {
+            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleOperationCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1)");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2757:108: ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2758:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+            	    {
+            	    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1);
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2761:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2761:7: {...}? => ( (lv_isDefinition_2_0= 'definition' ) )
+            	    {
+            	    if ( !((true)) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleOperationCS", "true");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2761:16: ( (lv_isDefinition_2_0= 'definition' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2762:1: (lv_isDefinition_2_0= 'definition' )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2762:1: (lv_isDefinition_2_0= 'definition' )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2763:3: lv_isDefinition_2_0= 'definition'
+            	    {
+            	    lv_isDefinition_2_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleOperationCS6453); if (state.failed) return current;
+            	    if ( state.backtracking==0 ) {
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2681:2: ( (lv_qualifiers_3_0= 'static' ) )?
-                    int alt69=2;
-                    int LA69_0 = input.LA(1);
+            	              newLeafNode(lv_isDefinition_2_0, grammarAccess.getOperationCSAccess().getIsDefinitionDefinitionKeyword_0_1_0());
+            	          
+            	    }
+            	    if ( state.backtracking==0 ) {
 
-                    if ( (LA69_0==47) ) {
-                        alt69=1;
-                    }
-                    switch (alt69) {
-                        case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2682:1: (lv_qualifiers_3_0= 'static' )
-                            {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2682:1: (lv_qualifiers_3_0= 'static' )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2683:3: lv_qualifiers_3_0= 'static'
-                            {
-                            lv_qualifiers_3_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleOperationCS5930); if (state.failed) return current;
-                            if ( state.backtracking==0 ) {
+            	      	        if (current==null) {
+            	      	            current = createModelElement(grammarAccess.getOperationCSRule());
+            	      	        }
+            	             		setWithLastConsumed(current, "isDefinition", true, "definition");
+            	      	    
+            	    }
 
-                                      newLeafNode(lv_qualifiers_3_0, grammarAccess.getOperationCSAccess().getQualifiersStaticKeyword_0_1_1_0());
-                                  
-                            }
-                            if ( state.backtracking==0 ) {
-
-                              	        if (current==null) {
-                              	            current = createModelElement(grammarAccess.getOperationCSRule());
-                              	        }
-                                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_3_0, "static");
-                              	    
-                            }
-
-                            }
+            	    }
 
 
-                            }
-                            break;
-
-                    }
+            	    }
 
 
-                    }
+            	    }
+
+            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+
+            	    }
 
 
-                    }
-                    break;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop82;
+                }
+            } while (true);
+
 
             }
 
-            otherlv_4=(Token)match(input,37,FollowSets000.FOLLOW_37_in_ruleOperationCS5959); if (state.failed) return current;
+
+            }
+
+            getUnorderedGroupHelper().leave(grammarAccess.getOperationCSAccess().getUnorderedGroup_0());
+
+            }
+
+            otherlv_3=(Token)match(input,37,FollowSets000.FOLLOW_37_in_ruleOperationCS6518); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
-                  	newLeafNode(otherlv_4, grammarAccess.getOperationCSAccess().getOperationKeyword_1());
+                  	newLeafNode(otherlv_3, grammarAccess.getOperationCSAccess().getOperationKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2700:1: ( (lv_ownedSignature_5_0= ruleTemplateSignatureCS ) )?
-            int alt71=2;
-            int LA71_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2794:1: ( (lv_ownedSignature_4_0= ruleTemplateSignatureCS ) )?
+            int alt83=2;
+            int LA83_0 = input.LA(1);
 
-            if ( (LA71_0==55||LA71_0==81) ) {
-                alt71=1;
+            if ( (LA83_0==55||LA83_0==81) ) {
+                alt83=1;
             }
-            switch (alt71) {
+            switch (alt83) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2701:1: (lv_ownedSignature_5_0= ruleTemplateSignatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2795:1: (lv_ownedSignature_4_0= ruleTemplateSignatureCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2701:1: (lv_ownedSignature_5_0= ruleTemplateSignatureCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2702:3: lv_ownedSignature_5_0= ruleTemplateSignatureCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2795:1: (lv_ownedSignature_4_0= ruleTemplateSignatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2796:3: lv_ownedSignature_4_0= ruleTemplateSignatureCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedSignatureTemplateSignatureCSParserRuleCall_2_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_ruleOperationCS5980);
-                    lv_ownedSignature_5_0=ruleTemplateSignatureCS();
+                    pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_ruleOperationCS6539);
+                    lv_ownedSignature_4_0=ruleTemplateSignatureCS();
 
                     state._fsp--;
                     if (state.failed) return current;
@@ -7945,7 +8400,7 @@
                              		set(
                              			current, 
                              			"ownedSignature",
-                              		lv_ownedSignature_5_0, 
+                              		lv_ownedSignature_4_0, 
                               		"TemplateSignatureCS");
                       	        afterParserOrEnumRuleCall();
                       	    
@@ -7959,19 +8414,19 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2718:3: ( (lv_name_6_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2719:1: (lv_name_6_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2812:3: ( (lv_name_5_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2813:1: (lv_name_5_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2719:1: (lv_name_6_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2720:3: lv_name_6_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2813:1: (lv_name_5_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2814:3: lv_name_5_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getOperationCSAccess().getNameUnrestrictedNameParserRuleCall_3_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleOperationCS6002);
-            lv_name_6_0=ruleUnrestrictedName();
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleOperationCS6561);
+            lv_name_5_0=ruleUnrestrictedName();
 
             state._fsp--;
             if (state.failed) return current;
@@ -7983,7 +8438,7 @@
                      		set(
                      			current, 
                      			"name",
-                      		lv_name_6_0, 
+                      		lv_name_5_0, 
                       		"UnrestrictedName");
               	        afterParserOrEnumRuleCall();
               	    
@@ -7994,36 +8449,36 @@
 
             }
 
-            otherlv_7=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleOperationCS6014); if (state.failed) return current;
+            otherlv_6=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleOperationCS6573); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
-                  	newLeafNode(otherlv_7, grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_4());
+                  	newLeafNode(otherlv_6, grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_4());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2740:1: ( ( (lv_ownedParameters_8_0= ruleParameterCS ) ) (otherlv_9= ',' ( (lv_ownedParameters_10_0= ruleParameterCS ) ) )* )?
-            int alt73=2;
-            int LA73_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2834:1: ( ( (lv_ownedParameters_7_0= ruleParameterCS ) ) (otherlv_8= ',' ( (lv_ownedParameters_9_0= ruleParameterCS ) ) )* )?
+            int alt85=2;
+            int LA85_0 = input.LA(1);
 
-            if ( ((LA73_0>=RULE_SIMPLE_ID && LA73_0<=RULE_ESCAPED_ID)||LA73_0==17||(LA73_0>=19 && LA73_0<=54)||LA73_0==59||LA73_0==72||(LA73_0>=74 && LA73_0<=75)||LA73_0==80) ) {
-                alt73=1;
+            if ( ((LA85_0>=RULE_SIMPLE_ID && LA85_0<=RULE_ESCAPED_ID)||LA85_0==17||(LA85_0>=19 && LA85_0<=54)||LA85_0==59||LA85_0==72||(LA85_0>=74 && LA85_0<=75)||LA85_0==80) ) {
+                alt85=1;
             }
-            switch (alt73) {
+            switch (alt85) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2740:2: ( (lv_ownedParameters_8_0= ruleParameterCS ) ) (otherlv_9= ',' ( (lv_ownedParameters_10_0= ruleParameterCS ) ) )*
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2834:2: ( (lv_ownedParameters_7_0= ruleParameterCS ) ) (otherlv_8= ',' ( (lv_ownedParameters_9_0= ruleParameterCS ) ) )*
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2740:2: ( (lv_ownedParameters_8_0= ruleParameterCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2741:1: (lv_ownedParameters_8_0= ruleParameterCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2834:2: ( (lv_ownedParameters_7_0= ruleParameterCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2835:1: (lv_ownedParameters_7_0= ruleParameterCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2741:1: (lv_ownedParameters_8_0= ruleParameterCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2742:3: lv_ownedParameters_8_0= ruleParameterCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2835:1: (lv_ownedParameters_7_0= ruleParameterCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2836:3: lv_ownedParameters_7_0= ruleParameterCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedParametersParameterCSParserRuleCall_5_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleParameterCS_in_ruleOperationCS6036);
-                    lv_ownedParameters_8_0=ruleParameterCS();
+                    pushFollow(FollowSets000.FOLLOW_ruleParameterCS_in_ruleOperationCS6595);
+                    lv_ownedParameters_7_0=ruleParameterCS();
 
                     state._fsp--;
                     if (state.failed) return current;
@@ -8035,7 +8490,7 @@
                              		add(
                              			current, 
                              			"ownedParameters",
-                              		lv_ownedParameters_8_0, 
+                              		lv_ownedParameters_7_0, 
                               		"ParameterCS");
                       	        afterParserOrEnumRuleCall();
                       	    
@@ -8046,40 +8501,40 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2758:2: (otherlv_9= ',' ( (lv_ownedParameters_10_0= ruleParameterCS ) ) )*
-                    loop72:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2852:2: (otherlv_8= ',' ( (lv_ownedParameters_9_0= ruleParameterCS ) ) )*
+                    loop84:
                     do {
-                        int alt72=2;
-                        int LA72_0 = input.LA(1);
+                        int alt84=2;
+                        int LA84_0 = input.LA(1);
 
-                        if ( (LA72_0==60) ) {
-                            alt72=1;
+                        if ( (LA84_0==60) ) {
+                            alt84=1;
                         }
 
 
-                        switch (alt72) {
+                        switch (alt84) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2758:4: otherlv_9= ',' ( (lv_ownedParameters_10_0= ruleParameterCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2852:4: otherlv_8= ',' ( (lv_ownedParameters_9_0= ruleParameterCS ) )
                     	    {
-                    	    otherlv_9=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleOperationCS6049); if (state.failed) return current;
+                    	    otherlv_8=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleOperationCS6608); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_9, grammarAccess.getOperationCSAccess().getCommaKeyword_5_1_0());
+                    	          	newLeafNode(otherlv_8, grammarAccess.getOperationCSAccess().getCommaKeyword_5_1_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2762:1: ( (lv_ownedParameters_10_0= ruleParameterCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2763:1: (lv_ownedParameters_10_0= ruleParameterCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2856:1: ( (lv_ownedParameters_9_0= ruleParameterCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2857:1: (lv_ownedParameters_9_0= ruleParameterCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2763:1: (lv_ownedParameters_10_0= ruleParameterCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2764:3: lv_ownedParameters_10_0= ruleParameterCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2857:1: (lv_ownedParameters_9_0= ruleParameterCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2858:3: lv_ownedParameters_9_0= ruleParameterCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedParametersParameterCSParserRuleCall_5_1_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleParameterCS_in_ruleOperationCS6070);
-                    	    lv_ownedParameters_10_0=ruleParameterCS();
+                    	    pushFollow(FollowSets000.FOLLOW_ruleParameterCS_in_ruleOperationCS6629);
+                    	    lv_ownedParameters_9_0=ruleParameterCS();
 
                     	    state._fsp--;
                     	    if (state.failed) return current;
@@ -8091,7 +8546,7 @@
                     	             		add(
                     	             			current, 
                     	             			"ownedParameters",
-                    	              		lv_ownedParameters_10_0, 
+                    	              		lv_ownedParameters_9_0, 
                     	              		"ParameterCS");
                     	      	        afterParserOrEnumRuleCall();
                     	      	    
@@ -8107,7 +8562,7 @@
                     	    break;
 
                     	default :
-                    	    break loop72;
+                    	    break loop84;
                         }
                     } while (true);
 
@@ -8117,42 +8572,42 @@
 
             }
 
-            otherlv_11=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleOperationCS6086); if (state.failed) return current;
+            otherlv_10=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleOperationCS6645); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
-                  	newLeafNode(otherlv_11, grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_6());
+                  	newLeafNode(otherlv_10, grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_6());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2784:1: (otherlv_12= ':' ( (lv_ownedType_13_0= ruleTypedMultiplicityRefCS ) ) )?
-            int alt74=2;
-            int LA74_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2878:1: (otherlv_11= ':' ( (lv_ownedType_12_0= ruleTypedMultiplicityRefCS ) ) )?
+            int alt86=2;
+            int LA86_0 = input.LA(1);
 
-            if ( (LA74_0==57) ) {
-                alt74=1;
+            if ( (LA86_0==57) ) {
+                alt86=1;
             }
-            switch (alt74) {
+            switch (alt86) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2784:3: otherlv_12= ':' ( (lv_ownedType_13_0= ruleTypedMultiplicityRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2878:3: otherlv_11= ':' ( (lv_ownedType_12_0= ruleTypedMultiplicityRefCS ) )
                     {
-                    otherlv_12=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleOperationCS6099); if (state.failed) return current;
+                    otherlv_11=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleOperationCS6658); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_12, grammarAccess.getOperationCSAccess().getColonKeyword_7_0());
+                          	newLeafNode(otherlv_11, grammarAccess.getOperationCSAccess().getColonKeyword_7_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2788:1: ( (lv_ownedType_13_0= ruleTypedMultiplicityRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2789:1: (lv_ownedType_13_0= ruleTypedMultiplicityRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2882:1: ( (lv_ownedType_12_0= ruleTypedMultiplicityRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2883:1: (lv_ownedType_12_0= ruleTypedMultiplicityRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2789:1: (lv_ownedType_13_0= ruleTypedMultiplicityRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2790:3: lv_ownedType_13_0= ruleTypedMultiplicityRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2883:1: (lv_ownedType_12_0= ruleTypedMultiplicityRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2884:3: lv_ownedType_12_0= ruleTypedMultiplicityRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_7_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_ruleOperationCS6120);
-                    lv_ownedType_13_0=ruleTypedMultiplicityRefCS();
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_ruleOperationCS6679);
+                    lv_ownedType_12_0=ruleTypedMultiplicityRefCS();
 
                     state._fsp--;
                     if (state.failed) return current;
@@ -8164,7 +8619,7 @@
                              		set(
                              			current, 
                              			"ownedType",
-                              		lv_ownedType_13_0, 
+                              		lv_ownedType_12_0, 
                               		"TypedMultiplicityRefCS");
                       	        afterParserOrEnumRuleCall();
                       	    
@@ -8181,36 +8636,36 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2806:4: (otherlv_14= 'throws' ( (lv_ownedExceptions_15_0= ruleTypedRefCS ) ) (otherlv_16= ',' ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) ) )* )?
-            int alt76=2;
-            int LA76_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2900:4: (otherlv_13= 'throws' ( (lv_ownedExceptions_14_0= ruleTypedRefCS ) ) (otherlv_15= ',' ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) ) )* )?
+            int alt88=2;
+            int LA88_0 = input.LA(1);
 
-            if ( (LA76_0==49) ) {
-                alt76=1;
+            if ( (LA88_0==49) ) {
+                alt88=1;
             }
-            switch (alt76) {
+            switch (alt88) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2806:6: otherlv_14= 'throws' ( (lv_ownedExceptions_15_0= ruleTypedRefCS ) ) (otherlv_16= ',' ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) ) )*
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2900:6: otherlv_13= 'throws' ( (lv_ownedExceptions_14_0= ruleTypedRefCS ) ) (otherlv_15= ',' ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) ) )*
                     {
-                    otherlv_14=(Token)match(input,49,FollowSets000.FOLLOW_49_in_ruleOperationCS6135); if (state.failed) return current;
+                    otherlv_13=(Token)match(input,49,FollowSets000.FOLLOW_49_in_ruleOperationCS6694); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_14, grammarAccess.getOperationCSAccess().getThrowsKeyword_8_0());
+                          	newLeafNode(otherlv_13, grammarAccess.getOperationCSAccess().getThrowsKeyword_8_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2810:1: ( (lv_ownedExceptions_15_0= ruleTypedRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2811:1: (lv_ownedExceptions_15_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2904:1: ( (lv_ownedExceptions_14_0= ruleTypedRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2905:1: (lv_ownedExceptions_14_0= ruleTypedRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2811:1: (lv_ownedExceptions_15_0= ruleTypedRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2812:3: lv_ownedExceptions_15_0= ruleTypedRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2905:1: (lv_ownedExceptions_14_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2906:3: lv_ownedExceptions_14_0= ruleTypedRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedExceptionsTypedRefCSParserRuleCall_8_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleOperationCS6156);
-                    lv_ownedExceptions_15_0=ruleTypedRefCS();
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleOperationCS6715);
+                    lv_ownedExceptions_14_0=ruleTypedRefCS();
 
                     state._fsp--;
                     if (state.failed) return current;
@@ -8222,7 +8677,7 @@
                              		add(
                              			current, 
                              			"ownedExceptions",
-                              		lv_ownedExceptions_15_0, 
+                              		lv_ownedExceptions_14_0, 
                               		"TypedRefCS");
                       	        afterParserOrEnumRuleCall();
                       	    
@@ -8233,40 +8688,40 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2828:2: (otherlv_16= ',' ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) ) )*
-                    loop75:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2922:2: (otherlv_15= ',' ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) ) )*
+                    loop87:
                     do {
-                        int alt75=2;
-                        int LA75_0 = input.LA(1);
+                        int alt87=2;
+                        int LA87_0 = input.LA(1);
 
-                        if ( (LA75_0==60) ) {
-                            alt75=1;
+                        if ( (LA87_0==60) ) {
+                            alt87=1;
                         }
 
 
-                        switch (alt75) {
+                        switch (alt87) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2828:4: otherlv_16= ',' ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2922:4: otherlv_15= ',' ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) )
                     	    {
-                    	    otherlv_16=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleOperationCS6169); if (state.failed) return current;
+                    	    otherlv_15=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleOperationCS6728); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_16, grammarAccess.getOperationCSAccess().getCommaKeyword_8_2_0());
+                    	          	newLeafNode(otherlv_15, grammarAccess.getOperationCSAccess().getCommaKeyword_8_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2832:1: ( (lv_ownedExceptions_17_0= ruleTypedRefCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2833:1: (lv_ownedExceptions_17_0= ruleTypedRefCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2926:1: ( (lv_ownedExceptions_16_0= ruleTypedRefCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2927:1: (lv_ownedExceptions_16_0= ruleTypedRefCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2833:1: (lv_ownedExceptions_17_0= ruleTypedRefCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2834:3: lv_ownedExceptions_17_0= ruleTypedRefCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2927:1: (lv_ownedExceptions_16_0= ruleTypedRefCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2928:3: lv_ownedExceptions_16_0= ruleTypedRefCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedExceptionsTypedRefCSParserRuleCall_8_2_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleOperationCS6190);
-                    	    lv_ownedExceptions_17_0=ruleTypedRefCS();
+                    	    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleOperationCS6749);
+                    	    lv_ownedExceptions_16_0=ruleTypedRefCS();
 
                     	    state._fsp--;
                     	    if (state.failed) return current;
@@ -8278,7 +8733,7 @@
                     	             		add(
                     	             			current, 
                     	             			"ownedExceptions",
-                    	              		lv_ownedExceptions_17_0, 
+                    	              		lv_ownedExceptions_16_0, 
                     	              		"TypedRefCS");
                     	      	        afterParserOrEnumRuleCall();
                     	      	    
@@ -8294,7 +8749,7 @@
                     	    break;
 
                     	default :
-                    	    break loop75;
+                    	    break loop87;
                         }
                     } while (true);
 
@@ -8304,98 +8759,271 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2850:6: (otherlv_18= '{' ( ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) ) (otherlv_25= ',' )? )+ otherlv_26= '}' )?
-            int alt80=2;
-            int LA80_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2944:6: ( ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) ) )?
+            int alt98=2;
+            int LA98_0 = input.LA(1);
 
-            if ( (LA80_0==61) ) {
-                int LA80_1 = input.LA(2);
+            if ( (LA98_0==61) ) {
+                int LA98_1 = input.LA(2);
 
-                if ( (LA80_1==28||LA80_1==38||LA80_1==51||LA80_1==64||LA80_1==66||LA80_1==69) ) {
-                    alt80=1;
+                if ( (synpred158_InternalOCLinEcore()) ) {
+                    alt98=1;
                 }
             }
-            switch (alt80) {
+            else if ( (LA98_0==38||LA98_0==51||LA98_0==62||LA98_0==66||LA98_0==69) ) {
+                alt98=1;
+            }
+            switch (alt98) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2850:8: otherlv_18= '{' ( ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) ) (otherlv_25= ',' )? )+ otherlv_26= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2946:1: ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) )
                     {
-                    otherlv_18=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleOperationCS6207); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                          	newLeafNode(otherlv_18, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0());
-                          
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2854:1: ( ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) ) (otherlv_25= ',' )? )+
-                    int cnt79=0;
-                    loop79:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2946:1: ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2947:2: ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?)
+                    {
+                    getUnorderedGroupHelper().enter(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2950:2: ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?)
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2951:3: ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2951:3: ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+
+                    int cnt97=0;
+                    loop97:
                     do {
-                        int alt79=2;
-                        int LA79_0 = input.LA(1);
+                        int alt97=4;
+                        int LA97_0 = input.LA(1);
 
-                        if ( (LA79_0==28||LA79_0==38||LA79_0==51||LA79_0==64||LA79_0==66||LA79_0==69) ) {
-                            alt79=1;
+                        if ( (LA97_0==61) ) {
+                            int LA97_1 = input.LA(2);
+
+                            if ( synpred150_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {
+                                alt97=1;
+                            }
+
+
+                        }
+                        else if ( LA97_0 ==38 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                            alt97=2;
+                        }
+                        else if ( LA97_0 ==66 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                            alt97=2;
+                        }
+                        else if ( LA97_0 ==69 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                            alt97=3;
+                        }
+                        else if ( LA97_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                            alt97=3;
+                        }
+                        else if ( LA97_0 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                            alt97=3;
                         }
 
 
-                        switch (alt79) {
+                        switch (alt97) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2854:2: ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) ) (otherlv_25= ',' )?
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2953:4: ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2854:2: ( ( (lv_qualifiers_19_0= 'derived' ) ) | ( (lv_qualifiers_20_0= '!derived' ) ) | ( (lv_qualifiers_21_0= 'ordered' ) ) | ( (lv_qualifiers_22_0= '!ordered' ) ) | ( (lv_qualifiers_23_0= 'unique' ) ) | ( (lv_qualifiers_24_0= '!unique' ) ) )
-                    	    int alt77=6;
-                    	    switch ( input.LA(1) ) {
-                    	    case 28:
-                    	        {
-                    	        alt77=1;
-                    	        }
-                    	        break;
-                    	    case 64:
-                    	        {
-                    	        alt77=2;
-                    	        }
-                    	        break;
-                    	    case 38:
-                    	        {
-                    	        alt77=3;
-                    	        }
-                    	        break;
-                    	    case 66:
-                    	        {
-                    	        alt77=4;
-                    	        }
-                    	        break;
-                    	    case 51:
-                    	        {
-                    	        alt77=5;
-                    	        }
-                    	        break;
-                    	    case 69:
-                    	        {
-                    	        alt77=6;
-                    	        }
-                    	        break;
-                    	    default:
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2953:4: ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2954:5: {...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleOperationCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2954:108: ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2955:6: ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:6: ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:7: {...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleOperationCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:16: (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:18: otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )?
+                    	    {
+                    	    otherlv_18=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleOperationCS6811); if (state.failed) return current;
+                    	    if ( state.backtracking==0 ) {
+
+                    	          	newLeafNode(otherlv_18, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0());
+                    	          
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:1: ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )?
+                    	    int alt91=2;
+                    	    int LA91_0 = input.LA(1);
+
+                    	    if ( (LA91_0==28||LA91_0==64) ) {
+                    	        alt91=1;
+                    	    }
+                    	    switch (alt91) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:2: ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )?
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:2: ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' )
+                    	            int alt89=2;
+                    	            int LA89_0 = input.LA(1);
+
+                    	            if ( (LA89_0==28) ) {
+                    	                alt89=1;
+                    	            }
+                    	            else if ( (LA89_0==64) ) {
+                    	                alt89=2;
+                    	            }
+                    	            else {
+                    	                if (state.backtracking>0) {state.failed=true; return current;}
+                    	                NoViableAltException nvae =
+                    	                    new NoViableAltException("", 89, 0, input);
+
+                    	                throw nvae;
+                    	            }
+                    	            switch (alt89) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:3: ( (lv_isDerived_19_0= 'derived' ) )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:3: ( (lv_isDerived_19_0= 'derived' ) )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2963:1: (lv_isDerived_19_0= 'derived' )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2963:1: (lv_isDerived_19_0= 'derived' )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2964:3: lv_isDerived_19_0= 'derived'
+                    	                    {
+                    	                    lv_isDerived_19_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_ruleOperationCS6831); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                              newLeafNode(lv_isDerived_19_0, grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0());
+                    	                          
+                    	                    }
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                      	        if (current==null) {
+                    	                      	            current = createModelElement(grammarAccess.getOperationCSRule());
+                    	                      	        }
+                    	                             		setWithLastConsumed(current, "isDerived", true, "derived");
+                    	                      	    
+                    	                    }
+
+                    	                    }
+
+
+                    	                    }
+
+
+                    	                    }
+                    	                    break;
+                    	                case 2 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2978:7: otherlv_20= '!derived'
+                    	                    {
+                    	                    otherlv_20=(Token)match(input,64,FollowSets000.FOLLOW_64_in_ruleOperationCS6862); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_20, grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2982:2: (otherlv_21= ',' )?
+                    	            int alt90=2;
+                    	            int LA90_0 = input.LA(1);
+
+                    	            if ( (LA90_0==60) ) {
+                    	                alt90=1;
+                    	            }
+                    	            switch (alt90) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2982:4: otherlv_21= ','
+                    	                    {
+                    	                    otherlv_21=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleOperationCS6876); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_21, grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2993:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2993:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2994:5: {...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleOperationCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2994:108: ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2995:6: ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:6: ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:7: {...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleOperationCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:16: ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:17: ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:17: ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' )
+                    	    int alt92=2;
+                    	    int LA92_0 = input.LA(1);
+
+                    	    if ( (LA92_0==38) ) {
+                    	        alt92=1;
+                    	    }
+                    	    else if ( (LA92_0==66) ) {
+                    	        alt92=2;
+                    	    }
+                    	    else {
                     	        if (state.backtracking>0) {state.failed=true; return current;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("", 77, 0, input);
+                    	            new NoViableAltException("", 92, 0, input);
 
                     	        throw nvae;
                     	    }
-
-                    	    switch (alt77) {
+                    	    switch (alt92) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2854:3: ( (lv_qualifiers_19_0= 'derived' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:18: ( (lv_isOrdered_22_0= 'ordered' ) )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2854:3: ( (lv_qualifiers_19_0= 'derived' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2855:1: (lv_qualifiers_19_0= 'derived' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:18: ( (lv_isOrdered_22_0= 'ordered' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2999:1: (lv_isOrdered_22_0= 'ordered' )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2855:1: (lv_qualifiers_19_0= 'derived' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2856:3: lv_qualifiers_19_0= 'derived'
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2999:1: (lv_isOrdered_22_0= 'ordered' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3000:3: lv_isOrdered_22_0= 'ordered'
                     	            {
-                    	            lv_qualifiers_19_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_ruleOperationCS6227); if (state.failed) return current;
+                    	            lv_isOrdered_22_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleOperationCS6955); if (state.failed) return current;
                     	            if ( state.backtracking==0 ) {
 
-                    	                      newLeafNode(lv_qualifiers_19_0, grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_0_0());
+                    	                      newLeafNode(lv_isOrdered_22_0, grammarAccess.getOperationCSAccess().getIsOrderedOrderedKeyword_9_1_0_0_0());
                     	                  
                     	            }
                     	            if ( state.backtracking==0 ) {
@@ -8403,7 +9031,7 @@
                     	              	        if (current==null) {
                     	              	            current = createModelElement(grammarAccess.getOperationCSRule());
                     	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_19_0, "derived");
+                    	                     		setWithLastConsumed(current, "isOrdered", true, "ordered");
                     	              	    
                     	            }
 
@@ -8416,183 +9044,35 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2870:6: ( (lv_qualifiers_20_0= '!derived' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3014:7: otherlv_23= '!ordered'
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2870:6: ( (lv_qualifiers_20_0= '!derived' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2871:1: (lv_qualifiers_20_0= '!derived' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2871:1: (lv_qualifiers_20_0= '!derived' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2872:3: lv_qualifiers_20_0= '!derived'
-                    	            {
-                    	            lv_qualifiers_20_0=(Token)match(input,64,FollowSets000.FOLLOW_64_in_ruleOperationCS6264); if (state.failed) return current;
+                    	            otherlv_23=(Token)match(input,66,FollowSets000.FOLLOW_66_in_ruleOperationCS6986); if (state.failed) return current;
                     	            if ( state.backtracking==0 ) {
 
-                    	                      newLeafNode(lv_qualifiers_20_0, grammarAccess.getOperationCSAccess().getQualifiersDerivedKeyword_9_1_0_1_0());
+                    	                  	newLeafNode(otherlv_23, grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1());
                     	                  
                     	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getOperationCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_20_0, "!derived");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 3 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2886:6: ( (lv_qualifiers_21_0= 'ordered' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2886:6: ( (lv_qualifiers_21_0= 'ordered' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2887:1: (lv_qualifiers_21_0= 'ordered' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2887:1: (lv_qualifiers_21_0= 'ordered' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2888:3: lv_qualifiers_21_0= 'ordered'
-                    	            {
-                    	            lv_qualifiers_21_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleOperationCS6301); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_21_0, grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_2_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getOperationCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_21_0, "ordered");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 4 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2902:6: ( (lv_qualifiers_22_0= '!ordered' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2902:6: ( (lv_qualifiers_22_0= '!ordered' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2903:1: (lv_qualifiers_22_0= '!ordered' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2903:1: (lv_qualifiers_22_0= '!ordered' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2904:3: lv_qualifiers_22_0= '!ordered'
-                    	            {
-                    	            lv_qualifiers_22_0=(Token)match(input,66,FollowSets000.FOLLOW_66_in_ruleOperationCS6338); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_22_0, grammarAccess.getOperationCSAccess().getQualifiersOrderedKeyword_9_1_0_3_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getOperationCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_22_0, "!ordered");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 5 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2918:6: ( (lv_qualifiers_23_0= 'unique' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2918:6: ( (lv_qualifiers_23_0= 'unique' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2919:1: (lv_qualifiers_23_0= 'unique' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2919:1: (lv_qualifiers_23_0= 'unique' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2920:3: lv_qualifiers_23_0= 'unique'
-                    	            {
-                    	            lv_qualifiers_23_0=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleOperationCS6375); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_23_0, grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_4_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getOperationCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_23_0, "unique");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 6 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2934:6: ( (lv_qualifiers_24_0= '!unique' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2934:6: ( (lv_qualifiers_24_0= '!unique' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2935:1: (lv_qualifiers_24_0= '!unique' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2935:1: (lv_qualifiers_24_0= '!unique' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2936:3: lv_qualifiers_24_0= '!unique'
-                    	            {
-                    	            lv_qualifiers_24_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_ruleOperationCS6412); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_24_0, grammarAccess.getOperationCSAccess().getQualifiersUniqueKeyword_9_1_0_5_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getOperationCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_24_0, "!unique");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
 
                     	            }
                     	            break;
 
                     	    }
 
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2949:3: (otherlv_25= ',' )?
-                    	    int alt78=2;
-                    	    int LA78_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3018:2: (otherlv_24= ',' )?
+                    	    int alt93=2;
+                    	    int LA93_0 = input.LA(1);
 
-                    	    if ( (LA78_0==60) ) {
-                    	        alt78=1;
+                    	    if ( (LA93_0==60) ) {
+                    	        alt93=1;
                     	    }
-                    	    switch (alt78) {
+                    	    switch (alt93) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2949:5: otherlv_25= ','
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3018:4: otherlv_24= ','
                     	            {
-                    	            otherlv_25=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleOperationCS6439); if (state.failed) return current;
+                    	            otherlv_24=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleOperationCS7000); if (state.failed) return current;
                     	            if ( state.backtracking==0 ) {
 
-                    	                  	newLeafNode(otherlv_25, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1());
+                    	                  	newLeafNode(otherlv_24, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1());
                     	                  
                     	            }
 
@@ -8603,107 +9083,276 @@
 
 
                     	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 3 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3029:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3029:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3030:5: {...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleOperationCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3030:108: ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3031:6: ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:6: ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:7: {...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleOperationCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:16: ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:17: ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}'
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:17: ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )?
+                    	    int alt96=2;
+                    	    int LA96_0 = input.LA(1);
+
+                    	    if ( (LA96_0==51||LA96_0==69) ) {
+                    	        alt96=1;
+                    	    }
+                    	    switch (alt96) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:18: ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )?
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:18: ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' )
+                    	            int alt94=2;
+                    	            int LA94_0 = input.LA(1);
+
+                    	            if ( (LA94_0==69) ) {
+                    	                alt94=1;
+                    	            }
+                    	            else if ( (LA94_0==51) ) {
+                    	                alt94=2;
+                    	            }
+                    	            else {
+                    	                if (state.backtracking>0) {state.failed=true; return current;}
+                    	                NoViableAltException nvae =
+                    	                    new NoViableAltException("", 94, 0, input);
+
+                    	                throw nvae;
+                    	            }
+                    	            switch (alt94) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:19: ( (lv_isNotUnique_25_0= '!unique' ) )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:19: ( (lv_isNotUnique_25_0= '!unique' ) )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3035:1: (lv_isNotUnique_25_0= '!unique' )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3035:1: (lv_isNotUnique_25_0= '!unique' )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3036:3: lv_isNotUnique_25_0= '!unique'
+                    	                    {
+                    	                    lv_isNotUnique_25_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_ruleOperationCS7078); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                              newLeafNode(lv_isNotUnique_25_0, grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0());
+                    	                          
+                    	                    }
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                      	        if (current==null) {
+                    	                      	            current = createModelElement(grammarAccess.getOperationCSRule());
+                    	                      	        }
+                    	                             		setWithLastConsumed(current, "isNotUnique", true, "!unique");
+                    	                      	    
+                    	                    }
+
+                    	                    }
+
+
+                    	                    }
+
+
+                    	                    }
+                    	                    break;
+                    	                case 2 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3050:7: otherlv_26= 'unique'
+                    	                    {
+                    	                    otherlv_26=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleOperationCS7109); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_26, grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3054:2: (otherlv_27= ',' )?
+                    	            int alt95=2;
+                    	            int LA95_0 = input.LA(1);
+
+                    	            if ( (LA95_0==60) ) {
+                    	                alt95=1;
+                    	            }
+                    	            switch (alt95) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3054:4: otherlv_27= ','
+                    	                    {
+                    	                    otherlv_27=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleOperationCS7123); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_27, grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    otherlv_28=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleOperationCS7139); if (state.failed) return current;
+                    	    if ( state.backtracking==0 ) {
+
+                    	          	newLeafNode(otherlv_28, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1());
+                    	          
+                    	    }
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt79 >= 1 ) break loop79;
+                    	    if ( cnt97 >= 1 ) break loop97;
                     	    if (state.backtracking>0) {state.failed=true; return current;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(79, input);
+                                    new EarlyExitException(97, input);
                                 throw eee;
                         }
-                        cnt79++;
+                        cnt97++;
                     } while (true);
 
-                    otherlv_26=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleOperationCS6455); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                          	newLeafNode(otherlv_26, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2());
-                          
+                    if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9()) ) {
+                        if (state.backtracking>0) {state.failed=true; return current;}
+                        throw new FailedPredicateException(input, "ruleOperationCS", "getUnorderedGroupHelper().canLeave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9())");
                     }
 
                     }
+
+
+                    }
+
+                    getUnorderedGroupHelper().leave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+
+                    }
                     break;
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2957:3: ( (otherlv_27= '{' ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )* otherlv_36= '}' ) | otherlv_37= ';' )
-            int alt84=2;
-            int LA84_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3077:3: ( (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )* otherlv_38= '}' ) | otherlv_39= ';' )
+            int alt102=2;
+            int LA102_0 = input.LA(1);
 
-            if ( (LA84_0==61) ) {
-                alt84=1;
+            if ( (LA102_0==61) ) {
+                alt102=1;
             }
-            else if ( (LA84_0==58) ) {
-                alt84=2;
+            else if ( (LA102_0==58) ) {
+                alt102=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 84, 0, input);
+                    new NoViableAltException("", 102, 0, input);
 
                 throw nvae;
             }
-            switch (alt84) {
+            switch (alt102) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2957:4: (otherlv_27= '{' ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )* otherlv_36= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3077:4: (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )* otherlv_38= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2957:4: (otherlv_27= '{' ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )* otherlv_36= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2957:6: otherlv_27= '{' ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )* otherlv_36= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3077:4: (otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )* otherlv_38= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3077:6: otherlv_29= '{' ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )* otherlv_38= '}'
                     {
-                    otherlv_27=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleOperationCS6471); if (state.failed) return current;
+                    otherlv_29=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleOperationCS7201); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_27, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_10_0_0());
+                          	newLeafNode(otherlv_29, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_10_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2961:1: ( ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) ) | (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' ) | ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) ) )*
-                    loop83:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3081:1: ( ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) ) | (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' ) | ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) ) )*
+                    loop101:
                     do {
-                        int alt83=5;
+                        int alt101=5;
                         switch ( input.LA(1) ) {
                         case 59:
                         case 74:
                         case 80:
                             {
-                            alt83=1;
+                            alt101=1;
                             }
                             break;
                         case 41:
                             {
-                            alt83=2;
+                            alt101=2;
                             }
                             break;
                         case 21:
                             {
-                            alt83=3;
+                            alt101=3;
                             }
                             break;
                         case 40:
                             {
-                            alt83=4;
+                            alt101=4;
                             }
                             break;
 
                         }
 
-                        switch (alt83) {
+                        switch (alt101) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2961:2: ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3081:2: ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2961:2: ( (lv_ownedAnnotations_28_0= ruleAnnotationElementCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:1: (lv_ownedAnnotations_28_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3081:2: ( (lv_ownedAnnotations_30_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3082:1: (lv_ownedAnnotations_30_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:1: (lv_ownedAnnotations_28_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2963:3: lv_ownedAnnotations_28_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3082:1: (lv_ownedAnnotations_30_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3083:3: lv_ownedAnnotations_30_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_10_0_1_0_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleOperationCS6493);
-                    	    lv_ownedAnnotations_28_0=ruleAnnotationElementCS();
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleOperationCS7223);
+                    	    lv_ownedAnnotations_30_0=ruleAnnotationElementCS();
 
                     	    state._fsp--;
                     	    if (state.failed) return current;
@@ -8715,7 +9364,7 @@
                     	             		add(
                     	             			current, 
                     	             			"ownedAnnotations",
-                    	              		lv_ownedAnnotations_28_0, 
+                    	              		lv_ownedAnnotations_30_0, 
                     	              		"AnnotationElementCS");
                     	      	        afterParserOrEnumRuleCall();
                     	      	    
@@ -8730,21 +9379,21 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2980:6: ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3100:6: ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2980:6: ( (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2981:1: (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3100:6: ( (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3101:1: (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2981:1: (lv_ownedPreconditions_29_0= rulePreconditionConstraintCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2982:3: lv_ownedPreconditions_29_0= rulePreconditionConstraintCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3101:1: (lv_ownedPreconditions_31_0= rulePreconditionConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3102:3: lv_ownedPreconditions_31_0= rulePreconditionConstraintCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedPreconditionsPreconditionConstraintCSParserRuleCall_10_0_1_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_rulePreconditionConstraintCS_in_ruleOperationCS6520);
-                    	    lv_ownedPreconditions_29_0=rulePreconditionConstraintCS();
+                    	    pushFollow(FollowSets000.FOLLOW_rulePreconditionConstraintCS_in_ruleOperationCS7250);
+                    	    lv_ownedPreconditions_31_0=rulePreconditionConstraintCS();
 
                     	    state._fsp--;
                     	    if (state.failed) return current;
@@ -8756,7 +9405,7 @@
                     	             		add(
                     	             			current, 
                     	             			"ownedPreconditions",
-                    	              		lv_ownedPreconditions_29_0, 
+                    	              		lv_ownedPreconditions_31_0, 
                     	              		"PreconditionConstraintCS");
                     	      	        afterParserOrEnumRuleCall();
                     	      	    
@@ -8771,27 +9420,27 @@
                     	    }
                     	    break;
                     	case 3 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2999:6: (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3119:6: (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2999:6: (otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';' )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2999:8: otherlv_30= 'body' ( ruleUnrestrictedName )? otherlv_32= ':' ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )? otherlv_34= ';'
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3119:6: (otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3119:8: otherlv_32= 'body' ( ruleUnrestrictedName )? otherlv_34= ':' ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )? otherlv_36= ';'
                     	    {
-                    	    otherlv_30=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleOperationCS6539); if (state.failed) return current;
+                    	    otherlv_32=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleOperationCS7269); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_30, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0());
+                    	          	newLeafNode(otherlv_32, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3003:1: ( ruleUnrestrictedName )?
-                    	    int alt81=2;
-                    	    int LA81_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3123:1: ( ruleUnrestrictedName )?
+                    	    int alt99=2;
+                    	    int LA99_0 = input.LA(1);
 
-                    	    if ( ((LA81_0>=RULE_SIMPLE_ID && LA81_0<=RULE_ESCAPED_ID)||LA81_0==17||(LA81_0>=19 && LA81_0<=54)||LA81_0==59||LA81_0==72||(LA81_0>=74 && LA81_0<=75)||LA81_0==80) ) {
-                    	        alt81=1;
+                    	    if ( ((LA99_0>=RULE_SIMPLE_ID && LA99_0<=RULE_ESCAPED_ID)||LA99_0==17||(LA99_0>=19 && LA99_0<=54)||LA99_0==59||LA99_0==72||(LA99_0>=74 && LA99_0<=75)||LA99_0==80) ) {
+                    	        alt99=1;
                     	    }
-                    	    switch (alt81) {
+                    	    switch (alt99) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3004:2: ruleUnrestrictedName
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3124:2: ruleUnrestrictedName
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
@@ -8803,7 +9452,7 @@
                     	                      newCompositeNode(grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_2_1()); 
                     	                  
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleOperationCS6559);
+                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleOperationCS7289);
                     	            ruleUnrestrictedName();
 
                     	            state._fsp--;
@@ -8819,33 +9468,33 @@
 
                     	    }
 
-                    	    otherlv_32=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleOperationCS6572); if (state.failed) return current;
+                    	    otherlv_34=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleOperationCS7302); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_32, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2());
+                    	          	newLeafNode(otherlv_34, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3018:1: ( (lv_ownedBodyExpressions_33_0= ruleSpecificationCS ) )?
-                    	    int alt82=2;
-                    	    int LA82_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3138:1: ( (lv_ownedBodyExpressions_35_0= ruleSpecificationCS ) )?
+                    	    int alt100=2;
+                    	    int LA100_0 = input.LA(1);
 
-                    	    if ( ((LA82_0>=RULE_INT && LA82_0<=RULE_SINGLE_QUOTED_STRING)||(LA82_0>=RULE_UNQUOTED_STRING && LA82_0<=RULE_ESCAPED_ID)||(LA82_0>=17 && LA82_0<=55)||LA82_0==59||LA82_0==72||(LA82_0>=74 && LA82_0<=75)||LA82_0==80||(LA82_0>=83 && LA82_0<=84)||LA82_0==98||(LA82_0>=100 && LA82_0<=112)||(LA82_0>=115 && LA82_0<=119)||LA82_0==126||(LA82_0>=131 && LA82_0<=132)) ) {
-                    	        alt82=1;
+                    	    if ( ((LA100_0>=RULE_INT && LA100_0<=RULE_SINGLE_QUOTED_STRING)||(LA100_0>=RULE_UNQUOTED_STRING && LA100_0<=RULE_ESCAPED_ID)||(LA100_0>=17 && LA100_0<=55)||LA100_0==59||LA100_0==72||(LA100_0>=74 && LA100_0<=75)||LA100_0==80||(LA100_0>=83 && LA100_0<=84)||LA100_0==98||(LA100_0>=100 && LA100_0<=112)||(LA100_0>=115 && LA100_0<=119)||LA100_0==126||(LA100_0>=131 && LA100_0<=132)) ) {
+                    	        alt100=1;
                     	    }
-                    	    switch (alt82) {
+                    	    switch (alt100) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3019:1: (lv_ownedBodyExpressions_33_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3139:1: (lv_ownedBodyExpressions_35_0= ruleSpecificationCS )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3019:1: (lv_ownedBodyExpressions_33_0= ruleSpecificationCS )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3020:3: lv_ownedBodyExpressions_33_0= ruleSpecificationCS
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3139:1: (lv_ownedBodyExpressions_35_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3140:3: lv_ownedBodyExpressions_35_0= ruleSpecificationCS
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
                     	              	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedBodyExpressionsSpecificationCSParserRuleCall_10_0_1_2_3_0()); 
                     	              	    
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleOperationCS6593);
-                    	            lv_ownedBodyExpressions_33_0=ruleSpecificationCS();
+                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleOperationCS7323);
+                    	            lv_ownedBodyExpressions_35_0=ruleSpecificationCS();
 
                     	            state._fsp--;
                     	            if (state.failed) return current;
@@ -8857,7 +9506,7 @@
                     	                     		add(
                     	                     			current, 
                     	                     			"ownedBodyExpressions",
-                    	                      		lv_ownedBodyExpressions_33_0, 
+                    	                      		lv_ownedBodyExpressions_35_0, 
                     	                      		"SpecificationCS");
                     	              	        afterParserOrEnumRuleCall();
                     	              	    
@@ -8871,10 +9520,10 @@
 
                     	    }
 
-                    	    otherlv_34=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleOperationCS6606); if (state.failed) return current;
+                    	    otherlv_36=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleOperationCS7336); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_34, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4());
+                    	          	newLeafNode(otherlv_36, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4());
                     	          
                     	    }
 
@@ -8884,21 +9533,21 @@
                     	    }
                     	    break;
                     	case 4 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3041:6: ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3161:6: ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3041:6: ( (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3042:1: (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3161:6: ( (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3162:1: (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3042:1: (lv_ownedPostconditions_35_0= rulePostconditionConstraintCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3043:3: lv_ownedPostconditions_35_0= rulePostconditionConstraintCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3162:1: (lv_ownedPostconditions_37_0= rulePostconditionConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3163:3: lv_ownedPostconditions_37_0= rulePostconditionConstraintCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getOperationCSAccess().getOwnedPostconditionsPostconditionConstraintCSParserRuleCall_10_0_1_3_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_rulePostconditionConstraintCS_in_ruleOperationCS6634);
-                    	    lv_ownedPostconditions_35_0=rulePostconditionConstraintCS();
+                    	    pushFollow(FollowSets000.FOLLOW_rulePostconditionConstraintCS_in_ruleOperationCS7364);
+                    	    lv_ownedPostconditions_37_0=rulePostconditionConstraintCS();
 
                     	    state._fsp--;
                     	    if (state.failed) return current;
@@ -8910,7 +9559,7 @@
                     	             		add(
                     	             			current, 
                     	             			"ownedPostconditions",
-                    	              		lv_ownedPostconditions_35_0, 
+                    	              		lv_ownedPostconditions_37_0, 
                     	              		"PostconditionConstraintCS");
                     	      	        afterParserOrEnumRuleCall();
                     	      	    
@@ -8926,14 +9575,14 @@
                     	    break;
 
                     	default :
-                    	    break loop83;
+                    	    break loop101;
                         }
                     } while (true);
 
-                    otherlv_36=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleOperationCS6648); if (state.failed) return current;
+                    otherlv_38=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleOperationCS7378); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_36, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_10_0_2());
+                          	newLeafNode(otherlv_38, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_10_0_2());
                           
                     }
 
@@ -8943,12 +9592,12 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3064:7: otherlv_37= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3184:7: otherlv_39= ';'
                     {
-                    otherlv_37=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleOperationCS6667); if (state.failed) return current;
+                    otherlv_39=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleOperationCS7397); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_37, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_1());
+                          	newLeafNode(otherlv_39, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_1());
                           
                     }
 
@@ -8973,6 +9622,9 @@
                 appendSkippedTokens();
             } 
         finally {
+
+            	myUnorderedGroupState.restore();
+
         }
         return current;
     }
@@ -8980,7 +9632,7 @@
 
 
     // $ANTLR start "entryRulePackageCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3076:1: entryRulePackageCS returns [EObject current=null] : iv_rulePackageCS= rulePackageCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3199:1: entryRulePackageCS returns [EObject current=null] : iv_rulePackageCS= rulePackageCS EOF ;
     public final EObject entryRulePackageCS() throws RecognitionException {
         EObject current = null;
 
@@ -8988,13 +9640,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3077:2: (iv_rulePackageCS= rulePackageCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3078:2: iv_rulePackageCS= rulePackageCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3200:2: (iv_rulePackageCS= rulePackageCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3201:2: iv_rulePackageCS= rulePackageCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPackageCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_rulePackageCS_in_entryRulePackageCS6704);
+            pushFollow(FollowSets000.FOLLOW_rulePackageCS_in_entryRulePackageCS7438);
             iv_rulePackageCS=rulePackageCS();
 
             state._fsp--;
@@ -9002,7 +9654,7 @@
             if ( state.backtracking==0 ) {
                current =iv_rulePackageCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePackageCS6714); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePackageCS7448); if (state.failed) return current;
 
             }
 
@@ -9020,7 +9672,7 @@
 
 
     // $ANTLR start "rulePackageCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3085:1: rulePackageCS returns [EObject current=null] : (otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3208:1: rulePackageCS returns [EObject current=null] : (otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' ) ) ;
     public final EObject rulePackageCS() throws RecognitionException {
         EObject current = null;
 
@@ -9046,30 +9698,30 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3088:28: ( (otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3089:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3211:28: ( (otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3212:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3089:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3089:3: otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3212:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3212:3: otherlv_0= 'package' ( (lv_name_1_0= ruleUnrestrictedName ) ) (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )? (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )? ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' )
             {
-            otherlv_0=(Token)match(input,39,FollowSets000.FOLLOW_39_in_rulePackageCS6751); if (state.failed) return current;
+            otherlv_0=(Token)match(input,39,FollowSets000.FOLLOW_39_in_rulePackageCS7485); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getPackageCSAccess().getPackageKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3093:1: ( (lv_name_1_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3094:1: (lv_name_1_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3216:1: ( (lv_name_1_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3217:1: (lv_name_1_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3094:1: (lv_name_1_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3095:3: lv_name_1_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3217:1: (lv_name_1_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3218:3: lv_name_1_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getPackageCSAccess().getNameUnrestrictedNameParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rulePackageCS6772);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rulePackageCS7506);
             lv_name_1_0=ruleUnrestrictedName();
 
             state._fsp--;
@@ -9093,35 +9745,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3111:2: (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )?
-            int alt85=2;
-            int LA85_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3234:2: (otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) ) )?
+            int alt103=2;
+            int LA103_0 = input.LA(1);
 
-            if ( (LA85_0==57) ) {
-                alt85=1;
+            if ( (LA103_0==57) ) {
+                alt103=1;
             }
-            switch (alt85) {
+            switch (alt103) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3111:4: otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3234:4: otherlv_2= ':' ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) )
                     {
-                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_rulePackageCS6785); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_rulePackageCS7519); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_2, grammarAccess.getPackageCSAccess().getColonKeyword_2_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3115:1: ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3116:1: (lv_nsPrefix_3_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3238:1: ( (lv_nsPrefix_3_0= ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3239:1: (lv_nsPrefix_3_0= ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3116:1: (lv_nsPrefix_3_0= ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3117:3: lv_nsPrefix_3_0= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3239:1: (lv_nsPrefix_3_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3240:3: lv_nsPrefix_3_0= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getPackageCSAccess().getNsPrefixUnrestrictedNameParserRuleCall_2_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rulePackageCS6806);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rulePackageCS7540);
                     lv_nsPrefix_3_0=ruleUnrestrictedName();
 
                     state._fsp--;
@@ -9151,35 +9803,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3133:4: (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )?
-            int alt86=2;
-            int LA86_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3256:4: (otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) ) )?
+            int alt104=2;
+            int LA104_0 = input.LA(1);
 
-            if ( (LA86_0==63) ) {
-                alt86=1;
+            if ( (LA104_0==63) ) {
+                alt104=1;
             }
-            switch (alt86) {
+            switch (alt104) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3133:6: otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3256:6: otherlv_4= '=' ( (lv_nsURI_5_0= ruleURI ) )
                     {
-                    otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_rulePackageCS6821); if (state.failed) return current;
+                    otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_rulePackageCS7555); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_4, grammarAccess.getPackageCSAccess().getEqualsSignKeyword_3_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3137:1: ( (lv_nsURI_5_0= ruleURI ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3138:1: (lv_nsURI_5_0= ruleURI )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3260:1: ( (lv_nsURI_5_0= ruleURI ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3261:1: (lv_nsURI_5_0= ruleURI )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3138:1: (lv_nsURI_5_0= ruleURI )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3139:3: lv_nsURI_5_0= ruleURI
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3261:1: (lv_nsURI_5_0= ruleURI )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3262:3: lv_nsURI_5_0= ruleURI
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getPackageCSAccess().getNsURIURIParserRuleCall_3_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleURI_in_rulePackageCS6842);
+                    pushFollow(FollowSets000.FOLLOW_ruleURI_in_rulePackageCS7576);
                     lv_nsURI_5_0=ruleURI();
 
                     state._fsp--;
@@ -9209,51 +9861,51 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3155:4: ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' )
-            int alt88=2;
-            int LA88_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3278:4: ( (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' ) | otherlv_11= ';' )
+            int alt106=2;
+            int LA106_0 = input.LA(1);
 
-            if ( (LA88_0==61) ) {
-                alt88=1;
+            if ( (LA106_0==61) ) {
+                alt106=1;
             }
-            else if ( (LA88_0==58) ) {
-                alt88=2;
+            else if ( (LA106_0==58) ) {
+                alt106=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 88, 0, input);
+                    new NoViableAltException("", 106, 0, input);
 
                 throw nvae;
             }
-            switch (alt88) {
+            switch (alt106) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3155:5: (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3278:5: (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3155:5: (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3155:7: otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3278:5: (otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3278:7: otherlv_6= '{' ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )* otherlv_10= '}'
                     {
-                    otherlv_6=(Token)match(input,61,FollowSets000.FOLLOW_61_in_rulePackageCS6858); if (state.failed) return current;
+                    otherlv_6=(Token)match(input,61,FollowSets000.FOLLOW_61_in_rulePackageCS7592); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_6, grammarAccess.getPackageCSAccess().getLeftCurlyBracketKeyword_4_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3159:1: ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )*
-                    loop87:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3282:1: ( ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) ) | ( (lv_ownedPackages_8_0= rulePackageCS ) ) | ( (lv_ownedClasses_9_0= ruleClassCS ) ) )*
+                    loop105:
                     do {
-                        int alt87=4;
+                        int alt105=4;
                         switch ( input.LA(1) ) {
                         case 59:
                         case 74:
                         case 80:
                             {
-                            alt87=1;
+                            alt105=1;
                             }
                             break;
                         case 39:
                             {
-                            alt87=2;
+                            alt105=2;
                             }
                             break;
                         case 19:
@@ -9262,28 +9914,28 @@
                         case 29:
                         case 42:
                             {
-                            alt87=3;
+                            alt105=3;
                             }
                             break;
 
                         }
 
-                        switch (alt87) {
+                        switch (alt105) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3159:2: ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3282:2: ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3159:2: ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3160:1: (lv_ownedAnnotations_7_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3282:2: ( (lv_ownedAnnotations_7_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3283:1: (lv_ownedAnnotations_7_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3160:1: (lv_ownedAnnotations_7_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3161:3: lv_ownedAnnotations_7_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3283:1: (lv_ownedAnnotations_7_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3284:3: lv_ownedAnnotations_7_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getPackageCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_4_0_1_0_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_rulePackageCS6880);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_rulePackageCS7614);
                     	    lv_ownedAnnotations_7_0=ruleAnnotationElementCS();
 
                     	    state._fsp--;
@@ -9311,20 +9963,20 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3178:6: ( (lv_ownedPackages_8_0= rulePackageCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3301:6: ( (lv_ownedPackages_8_0= rulePackageCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3178:6: ( (lv_ownedPackages_8_0= rulePackageCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3179:1: (lv_ownedPackages_8_0= rulePackageCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3301:6: ( (lv_ownedPackages_8_0= rulePackageCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3302:1: (lv_ownedPackages_8_0= rulePackageCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3179:1: (lv_ownedPackages_8_0= rulePackageCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3180:3: lv_ownedPackages_8_0= rulePackageCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3302:1: (lv_ownedPackages_8_0= rulePackageCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3303:3: lv_ownedPackages_8_0= rulePackageCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getPackageCSAccess().getOwnedPackagesPackageCSParserRuleCall_4_0_1_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_rulePackageCS_in_rulePackageCS6907);
+                    	    pushFollow(FollowSets000.FOLLOW_rulePackageCS_in_rulePackageCS7641);
                     	    lv_ownedPackages_8_0=rulePackageCS();
 
                     	    state._fsp--;
@@ -9352,20 +10004,20 @@
                     	    }
                     	    break;
                     	case 3 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3197:6: ( (lv_ownedClasses_9_0= ruleClassCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3320:6: ( (lv_ownedClasses_9_0= ruleClassCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3197:6: ( (lv_ownedClasses_9_0= ruleClassCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3198:1: (lv_ownedClasses_9_0= ruleClassCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3320:6: ( (lv_ownedClasses_9_0= ruleClassCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3321:1: (lv_ownedClasses_9_0= ruleClassCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3198:1: (lv_ownedClasses_9_0= ruleClassCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3199:3: lv_ownedClasses_9_0= ruleClassCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3321:1: (lv_ownedClasses_9_0= ruleClassCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3322:3: lv_ownedClasses_9_0= ruleClassCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getPackageCSAccess().getOwnedClassesClassCSParserRuleCall_4_0_1_2_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleClassCS_in_rulePackageCS6934);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleClassCS_in_rulePackageCS7668);
                     	    lv_ownedClasses_9_0=ruleClassCS();
 
                     	    state._fsp--;
@@ -9394,11 +10046,11 @@
                     	    break;
 
                     	default :
-                    	    break loop87;
+                    	    break loop105;
                         }
                     } while (true);
 
-                    otherlv_10=(Token)match(input,62,FollowSets000.FOLLOW_62_in_rulePackageCS6948); if (state.failed) return current;
+                    otherlv_10=(Token)match(input,62,FollowSets000.FOLLOW_62_in_rulePackageCS7682); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_10, grammarAccess.getPackageCSAccess().getRightCurlyBracketKeyword_4_0_2());
@@ -9411,9 +10063,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3220:7: otherlv_11= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3343:7: otherlv_11= ';'
                     {
-                    otherlv_11=(Token)match(input,58,FollowSets000.FOLLOW_58_in_rulePackageCS6967); if (state.failed) return current;
+                    otherlv_11=(Token)match(input,58,FollowSets000.FOLLOW_58_in_rulePackageCS7701); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_11, grammarAccess.getPackageCSAccess().getSemicolonKeyword_4_1());
@@ -9448,21 +10100,26 @@
 
 
     // $ANTLR start "entryRuleParameterCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3232:1: entryRuleParameterCS returns [EObject current=null] : iv_ruleParameterCS= ruleParameterCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3355:1: entryRuleParameterCS returns [EObject current=null] : iv_ruleParameterCS= ruleParameterCS EOF ;
     public final EObject entryRuleParameterCS() throws RecognitionException {
         EObject current = null;
 
         EObject iv_ruleParameterCS = null;
 
 
+         
+        		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+        			grammarAccess.getParameterCSAccess().getUnorderedGroup_2()
+        		);
+        	
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3233:2: (iv_ruleParameterCS= ruleParameterCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3234:2: iv_ruleParameterCS= ruleParameterCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3361:2: (iv_ruleParameterCS= ruleParameterCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3362:2: iv_ruleParameterCS= ruleParameterCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getParameterCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleParameterCS_in_entryRuleParameterCS7004);
+            pushFollow(FollowSets000.FOLLOW_ruleParameterCS_in_entryRuleParameterCS7744);
             iv_ruleParameterCS=ruleParameterCS();
 
             state._fsp--;
@@ -9470,7 +10127,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleParameterCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleParameterCS7014); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleParameterCS7754); if (state.failed) return current;
 
             }
 
@@ -9481,6 +10138,9 @@
                 appendSkippedTokens();
             } 
         finally {
+
+            	myUnorderedGroupState.restore();
+
         }
         return current;
     }
@@ -9488,48 +10148,52 @@
 
 
     // $ANTLR start "ruleParameterCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3241:1: ruleParameterCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_3= '{' ( ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) ) (otherlv_8= ',' )? )+ otherlv_9= '}' )? (otherlv_10= '{' ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )* otherlv_12= '}' )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3372:1: ruleParameterCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) ) )? (otherlv_12= '{' ( (lv_ownedAnnotations_13_0= ruleAnnotationElementCS ) )* otherlv_14= '}' )? ) ;
     public final EObject ruleParameterCS() throws RecognitionException {
         EObject current = null;
 
         Token otherlv_1=null;
-        Token otherlv_3=null;
-        Token lv_qualifiers_4_0=null;
-        Token lv_qualifiers_5_0=null;
-        Token lv_qualifiers_6_0=null;
-        Token lv_qualifiers_7_0=null;
-        Token otherlv_8=null;
+        Token otherlv_4=null;
+        Token lv_isOrdered_5_0=null;
+        Token otherlv_6=null;
+        Token otherlv_7=null;
+        Token lv_isNotUnique_8_0=null;
         Token otherlv_9=null;
         Token otherlv_10=null;
+        Token otherlv_11=null;
         Token otherlv_12=null;
+        Token otherlv_14=null;
         AntlrDatatypeRuleToken lv_name_0_0 = null;
 
         EObject lv_ownedType_2_0 = null;
 
-        EObject lv_ownedAnnotations_11_0 = null;
+        EObject lv_ownedAnnotations_13_0 = null;
 
 
          enterRule(); 
+        		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+        			grammarAccess.getParameterCSAccess().getUnorderedGroup_2()
+        		);
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3244:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_3= '{' ( ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) ) (otherlv_8= ',' )? )+ otherlv_9= '}' )? (otherlv_10= '{' ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )* otherlv_12= '}' )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3245:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_3= '{' ( ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) ) (otherlv_8= ',' )? )+ otherlv_9= '}' )? (otherlv_10= '{' ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )* otherlv_12= '}' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3378:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) ) )? (otherlv_12= '{' ( (lv_ownedAnnotations_13_0= ruleAnnotationElementCS ) )* otherlv_14= '}' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3379:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) ) )? (otherlv_12= '{' ( (lv_ownedAnnotations_13_0= ruleAnnotationElementCS ) )* otherlv_14= '}' )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3245:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_3= '{' ( ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) ) (otherlv_8= ',' )? )+ otherlv_9= '}' )? (otherlv_10= '{' ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )* otherlv_12= '}' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3245:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_3= '{' ( ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) ) (otherlv_8= ',' )? )+ otherlv_9= '}' )? (otherlv_10= '{' ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )* otherlv_12= '}' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3379:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) ) )? (otherlv_12= '{' ( (lv_ownedAnnotations_13_0= ruleAnnotationElementCS ) )* otherlv_14= '}' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3379:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) ) )? (otherlv_12= '{' ( (lv_ownedAnnotations_13_0= ruleAnnotationElementCS ) )* otherlv_14= '}' )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3245:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3246:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3379:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3380:1: (lv_name_0_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3246:1: (lv_name_0_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3247:3: lv_name_0_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3380:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3381:3: lv_name_0_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getParameterCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleParameterCS7060);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleParameterCS7804);
             lv_name_0_0=ruleUnrestrictedName();
 
             state._fsp--;
@@ -9553,35 +10217,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3263:2: (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )?
-            int alt89=2;
-            int LA89_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3397:2: (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) ) )?
+            int alt107=2;
+            int LA107_0 = input.LA(1);
 
-            if ( (LA89_0==57) ) {
-                alt89=1;
+            if ( (LA107_0==57) ) {
+                alt107=1;
             }
-            switch (alt89) {
+            switch (alt107) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3263:4: otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3397:4: otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) )
                     {
-                    otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleParameterCS7073); if (state.failed) return current;
+                    otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleParameterCS7817); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_1, grammarAccess.getParameterCSAccess().getColonKeyword_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3267:1: ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3268:1: (lv_ownedType_2_0= ruleTypedMultiplicityRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3401:1: ( (lv_ownedType_2_0= ruleTypedMultiplicityRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3402:1: (lv_ownedType_2_0= ruleTypedMultiplicityRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3268:1: (lv_ownedType_2_0= ruleTypedMultiplicityRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3269:3: lv_ownedType_2_0= ruleTypedMultiplicityRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3402:1: (lv_ownedType_2_0= ruleTypedMultiplicityRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3403:3: lv_ownedType_2_0= ruleTypedMultiplicityRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getParameterCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_ruleParameterCS7094);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_ruleParameterCS7838);
                     lv_ownedType_2_0=ruleTypedMultiplicityRefCS();
 
                     state._fsp--;
@@ -9611,197 +10275,182 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3285:4: (otherlv_3= '{' ( ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) ) (otherlv_8= ',' )? )+ otherlv_9= '}' )?
-            int alt93=2;
-            int LA93_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3419:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) ) )?
+            int alt115=2;
+            int LA115_0 = input.LA(1);
 
-            if ( (LA93_0==61) ) {
-                int LA93_1 = input.LA(2);
+            if ( (LA115_0==61) ) {
+                int LA115_1 = input.LA(2);
 
-                if ( (LA93_1==38||LA93_1==51||LA93_1==66||LA93_1==69) ) {
-                    alt93=1;
+                if ( (LA115_1==62) ) {
+                    int LA115_4 = input.LA(3);
+
+                    if ( (synpred181_InternalOCLinEcore()) ) {
+                        alt115=1;
+                    }
+                }
+                else if ( (LA115_1==EOF||LA115_1==38||LA115_1==51||LA115_1==56||(LA115_1>=60 && LA115_1<=61)||LA115_1==66||LA115_1==69) ) {
+                    alt115=1;
                 }
             }
-            switch (alt93) {
+            else if ( (LA115_0==51||LA115_0==62||LA115_0==69) ) {
+                alt115=1;
+            }
+            switch (alt115) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3285:6: otherlv_3= '{' ( ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) ) (otherlv_8= ',' )? )+ otherlv_9= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3421:1: ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) )
                     {
-                    otherlv_3=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleParameterCS7109); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                          	newLeafNode(otherlv_3, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0());
-                          
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3289:1: ( ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) ) (otherlv_8= ',' )? )+
-                    int cnt92=0;
-                    loop92:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3421:1: ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3422:2: ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?)
+                    {
+                    getUnorderedGroupHelper().enter(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3425:2: ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?)
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3426:3: ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3426:3: ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+
+                    int cnt114=0;
+                    loop114:
                     do {
-                        int alt92=2;
-                        int LA92_0 = input.LA(1);
-
-                        if ( (LA92_0==38||LA92_0==51||LA92_0==66||LA92_0==69) ) {
-                            alt92=1;
-                        }
-
-
-                        switch (alt92) {
+                        int alt114=3;
+                        alt114 = dfa114.predict(input);
+                        switch (alt114) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3289:2: ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) ) (otherlv_8= ',' )?
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3428:4: ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3289:2: ( ( (lv_qualifiers_4_0= 'ordered' ) ) | ( (lv_qualifiers_5_0= '!ordered' ) ) | ( (lv_qualifiers_6_0= 'unique' ) ) | ( (lv_qualifiers_7_0= '!unique' ) ) )
-                    	    int alt90=4;
-                    	    switch ( input.LA(1) ) {
-                    	    case 38:
-                    	        {
-                    	        alt90=1;
-                    	        }
-                    	        break;
-                    	    case 66:
-                    	        {
-                    	        alt90=2;
-                    	        }
-                    	        break;
-                    	    case 51:
-                    	        {
-                    	        alt90=3;
-                    	        }
-                    	        break;
-                    	    case 69:
-                    	        {
-                    	        alt90=4;
-                    	        }
-                    	        break;
-                    	    default:
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3428:4: ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3429:5: {...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {
                     	        if (state.backtracking>0) {state.failed=true; return current;}
-                    	        NoViableAltException nvae =
-                    	            new NoViableAltException("", 90, 0, input);
-
-                    	        throw nvae;
+                    	        throw new FailedPredicateException(input, "ruleParameterCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0)");
                     	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3429:108: ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3430:6: ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:6: ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:7: {...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleParameterCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:16: (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:18: otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )?
+                    	    {
+                    	    otherlv_4=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleParameterCS7898); if (state.failed) return current;
+                    	    if ( state.backtracking==0 ) {
 
-                    	    switch (alt90) {
+                    	          	newLeafNode(otherlv_4, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0_0());
+                    	          
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:1: ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )?
+                    	    int alt110=2;
+                    	    int LA110_0 = input.LA(1);
+
+                    	    if ( (LA110_0==38||LA110_0==66) ) {
+                    	        alt110=1;
+                    	    }
+                    	    switch (alt110) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3289:3: ( (lv_qualifiers_4_0= 'ordered' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:2: ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )?
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3289:3: ( (lv_qualifiers_4_0= 'ordered' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3290:1: (lv_qualifiers_4_0= 'ordered' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3290:1: (lv_qualifiers_4_0= 'ordered' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3291:3: lv_qualifiers_4_0= 'ordered'
-                    	            {
-                    	            lv_qualifiers_4_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleParameterCS7129); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:2: ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' )
+                    	            int alt108=2;
+                    	            int LA108_0 = input.LA(1);
 
-                    	                      newLeafNode(lv_qualifiers_4_0, grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_0_0());
-                    	                  
+                    	            if ( (LA108_0==38) ) {
+                    	                alt108=1;
                     	            }
-                    	            if ( state.backtracking==0 ) {
+                    	            else if ( (LA108_0==66) ) {
+                    	                alt108=2;
+                    	            }
+                    	            else {
+                    	                if (state.backtracking>0) {state.failed=true; return current;}
+                    	                NoViableAltException nvae =
+                    	                    new NoViableAltException("", 108, 0, input);
 
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getParameterCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_4_0, "ordered");
-                    	              	    
+                    	                throw nvae;
                     	            }
+                    	            switch (alt108) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:3: ( (lv_isOrdered_5_0= 'ordered' ) )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:3: ( (lv_isOrdered_5_0= 'ordered' ) )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:1: (lv_isOrdered_5_0= 'ordered' )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:1: (lv_isOrdered_5_0= 'ordered' )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3439:3: lv_isOrdered_5_0= 'ordered'
+                    	                    {
+                    	                    lv_isOrdered_5_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleParameterCS7918); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                              newLeafNode(lv_isOrdered_5_0, grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0());
+                    	                          
+                    	                    }
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                      	        if (current==null) {
+                    	                      	            current = createModelElement(grammarAccess.getParameterCSRule());
+                    	                      	        }
+                    	                             		setWithLastConsumed(current, "isOrdered", true, "ordered");
+                    	                      	    
+                    	                    }
+
+                    	                    }
+
+
+                    	                    }
+
+
+                    	                    }
+                    	                    break;
+                    	                case 2 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3453:7: otherlv_6= '!ordered'
+                    	                    {
+                    	                    otherlv_6=(Token)match(input,66,FollowSets000.FOLLOW_66_in_ruleParameterCS7949); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_6, grammarAccess.getParameterCSAccess().getOrderedKeyword_2_0_1_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
 
                     	            }
 
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3457:2: (otherlv_7= ',' )?
+                    	            int alt109=2;
+                    	            int LA109_0 = input.LA(1);
 
+                    	            if ( (LA109_0==60) ) {
+                    	                int LA109_1 = input.LA(2);
+
+                    	                if ( (LA109_1==51) ) {
+                    	                    int LA109_3 = input.LA(3);
+
+                    	                    if ( (synpred174_InternalOCLinEcore()) ) {
+                    	                        alt109=1;
+                    	                    }
+                    	                }
+                    	                else if ( (LA109_1==EOF||LA109_1==56||(LA109_1>=60 && LA109_1<=62)||LA109_1==69) ) {
+                    	                    alt109=1;
+                    	                }
                     	            }
+                    	            switch (alt109) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3457:4: otherlv_7= ','
+                    	                    {
+                    	                    otherlv_7=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleParameterCS7963); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
 
+                    	                          	newLeafNode(otherlv_7, grammarAccess.getParameterCSAccess().getCommaKeyword_2_0_1_1());
+                    	                          
+                    	                    }
 
-                    	            }
-                    	            break;
-                    	        case 2 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3305:6: ( (lv_qualifiers_5_0= '!ordered' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3305:6: ( (lv_qualifiers_5_0= '!ordered' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3306:1: (lv_qualifiers_5_0= '!ordered' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3306:1: (lv_qualifiers_5_0= '!ordered' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3307:3: lv_qualifiers_5_0= '!ordered'
-                    	            {
-                    	            lv_qualifiers_5_0=(Token)match(input,66,FollowSets000.FOLLOW_66_in_ruleParameterCS7166); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_5_0, grammarAccess.getParameterCSAccess().getQualifiersOrderedKeyword_2_1_0_1_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getParameterCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_5_0, "!ordered");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 3 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3321:6: ( (lv_qualifiers_6_0= 'unique' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3321:6: ( (lv_qualifiers_6_0= 'unique' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3322:1: (lv_qualifiers_6_0= 'unique' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3322:1: (lv_qualifiers_6_0= 'unique' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3323:3: lv_qualifiers_6_0= 'unique'
-                    	            {
-                    	            lv_qualifiers_6_0=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleParameterCS7203); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_6_0, grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_2_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getParameterCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_6_0, "unique");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 4 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3337:6: ( (lv_qualifiers_7_0= '!unique' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3337:6: ( (lv_qualifiers_7_0= '!unique' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3338:1: (lv_qualifiers_7_0= '!unique' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3338:1: (lv_qualifiers_7_0= '!unique' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3339:3: lv_qualifiers_7_0= '!unique'
-                    	            {
-                    	            lv_qualifiers_7_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_ruleParameterCS7240); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_7_0, grammarAccess.getParameterCSAccess().getQualifiersUniqueKeyword_2_1_0_3_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getParameterCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_7_0, "!unique");
-                    	              	    
-                    	            }
-
-                    	            }
-
+                    	                    }
+                    	                    break;
 
                     	            }
 
@@ -9811,97 +10460,243 @@
 
                     	    }
 
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3352:3: (otherlv_8= ',' )?
-                    	    int alt91=2;
-                    	    int LA91_0 = input.LA(1);
 
-                    	    if ( (LA91_0==60) ) {
-                    	        alt91=1;
                     	    }
-                    	    switch (alt91) {
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3468:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3468:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3469:5: {...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleParameterCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3469:108: ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3470:6: ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:6: ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:7: {...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleParameterCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:16: ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:17: ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}'
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:17: ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )?
+                    	    int alt113=2;
+                    	    int LA113_0 = input.LA(1);
+
+                    	    if ( (LA113_0==51||LA113_0==69) ) {
+                    	        alt113=1;
+                    	    }
+                    	    switch (alt113) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3352:5: otherlv_8= ','
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:18: ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )?
                     	            {
-                    	            otherlv_8=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleParameterCS7267); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:18: ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' )
+                    	            int alt111=2;
+                    	            int LA111_0 = input.LA(1);
 
-                    	                  	newLeafNode(otherlv_8, grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_1());
-                    	                  
+                    	            if ( (LA111_0==69) ) {
+                    	                alt111=1;
                     	            }
+                    	            else if ( (LA111_0==51) ) {
+                    	                alt111=2;
+                    	            }
+                    	            else {
+                    	                if (state.backtracking>0) {state.failed=true; return current;}
+                    	                NoViableAltException nvae =
+                    	                    new NoViableAltException("", 111, 0, input);
+
+                    	                throw nvae;
+                    	            }
+                    	            switch (alt111) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:19: ( (lv_isNotUnique_8_0= '!unique' ) )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:19: ( (lv_isNotUnique_8_0= '!unique' ) )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3474:1: (lv_isNotUnique_8_0= '!unique' )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3474:1: (lv_isNotUnique_8_0= '!unique' )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3475:3: lv_isNotUnique_8_0= '!unique'
+                    	                    {
+                    	                    lv_isNotUnique_8_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_ruleParameterCS8043); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                              newLeafNode(lv_isNotUnique_8_0, grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0());
+                    	                          
+                    	                    }
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                      	        if (current==null) {
+                    	                      	            current = createModelElement(grammarAccess.getParameterCSRule());
+                    	                      	        }
+                    	                             		setWithLastConsumed(current, "isNotUnique", true, "!unique");
+                    	                      	    
+                    	                    }
+
+                    	                    }
+
+
+                    	                    }
+
+
+                    	                    }
+                    	                    break;
+                    	                case 2 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3489:7: otherlv_9= 'unique'
+                    	                    {
+                    	                    otherlv_9=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleParameterCS8074); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_9, grammarAccess.getParameterCSAccess().getUniqueKeyword_2_1_0_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3493:2: (otherlv_10= ',' )?
+                    	            int alt112=2;
+                    	            int LA112_0 = input.LA(1);
+
+                    	            if ( (LA112_0==60) ) {
+                    	                alt112=1;
+                    	            }
+                    	            switch (alt112) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3493:4: otherlv_10= ','
+                    	                    {
+                    	                    otherlv_10=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleParameterCS8088); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_10, grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
 
                     	            }
                     	            break;
 
                     	    }
 
+                    	    otherlv_11=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleParameterCS8104); if (state.failed) return current;
+                    	    if ( state.backtracking==0 ) {
+
+                    	          	newLeafNode(otherlv_11, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_1_1());
+                    	          
+                    	    }
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+
+                    	    }
+
+
+                    	    }
+
 
                     	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt92 >= 1 ) break loop92;
+                    	    if ( cnt114 >= 1 ) break loop114;
                     	    if (state.backtracking>0) {state.failed=true; return current;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(92, input);
+                                    new EarlyExitException(114, input);
                                 throw eee;
                         }
-                        cnt92++;
+                        cnt114++;
                     } while (true);
 
-                    otherlv_9=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleParameterCS7283); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                          	newLeafNode(otherlv_9, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_2());
-                          
+                    if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2()) ) {
+                        if (state.backtracking>0) {state.failed=true; return current;}
+                        throw new FailedPredicateException(input, "ruleParameterCS", "getUnorderedGroupHelper().canLeave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2())");
                     }
 
                     }
+
+
+                    }
+
+                    getUnorderedGroupHelper().leave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+
+                    }
                     break;
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3360:3: (otherlv_10= '{' ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )* otherlv_12= '}' )?
-            int alt95=2;
-            int LA95_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3516:3: (otherlv_12= '{' ( (lv_ownedAnnotations_13_0= ruleAnnotationElementCS ) )* otherlv_14= '}' )?
+            int alt117=2;
+            int LA117_0 = input.LA(1);
 
-            if ( (LA95_0==61) ) {
-                alt95=1;
+            if ( (LA117_0==61) ) {
+                alt117=1;
             }
-            switch (alt95) {
+            switch (alt117) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3360:5: otherlv_10= '{' ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )* otherlv_12= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3516:5: otherlv_12= '{' ( (lv_ownedAnnotations_13_0= ruleAnnotationElementCS ) )* otherlv_14= '}'
                     {
-                    otherlv_10=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleParameterCS7298); if (state.failed) return current;
+                    otherlv_12=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleParameterCS8165); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_10, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_3_0());
+                          	newLeafNode(otherlv_12, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_3_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3364:1: ( (lv_ownedAnnotations_11_0= ruleAnnotationElementCS ) )*
-                    loop94:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3520:1: ( (lv_ownedAnnotations_13_0= ruleAnnotationElementCS ) )*
+                    loop116:
                     do {
-                        int alt94=2;
-                        int LA94_0 = input.LA(1);
+                        int alt116=2;
+                        int LA116_0 = input.LA(1);
 
-                        if ( (LA94_0==59||LA94_0==74||LA94_0==80) ) {
-                            alt94=1;
+                        if ( (LA116_0==59||LA116_0==74||LA116_0==80) ) {
+                            alt116=1;
                         }
 
 
-                        switch (alt94) {
+                        switch (alt116) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3365:1: (lv_ownedAnnotations_11_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3521:1: (lv_ownedAnnotations_13_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3365:1: (lv_ownedAnnotations_11_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3366:3: lv_ownedAnnotations_11_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3521:1: (lv_ownedAnnotations_13_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3522:3: lv_ownedAnnotations_13_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getParameterCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_3_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleParameterCS7319);
-                    	    lv_ownedAnnotations_11_0=ruleAnnotationElementCS();
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleParameterCS8186);
+                    	    lv_ownedAnnotations_13_0=ruleAnnotationElementCS();
 
                     	    state._fsp--;
                     	    if (state.failed) return current;
@@ -9913,7 +10708,7 @@
                     	             		add(
                     	             			current, 
                     	             			"ownedAnnotations",
-                    	              		lv_ownedAnnotations_11_0, 
+                    	              		lv_ownedAnnotations_13_0, 
                     	              		"AnnotationElementCS");
                     	      	        afterParserOrEnumRuleCall();
                     	      	    
@@ -9926,14 +10721,14 @@
                     	    break;
 
                     	default :
-                    	    break loop94;
+                    	    break loop116;
                         }
                     } while (true);
 
-                    otherlv_12=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleParameterCS7332); if (state.failed) return current;
+                    otherlv_14=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleParameterCS8199); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_12, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_3_2());
+                          	newLeafNode(otherlv_14, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_3_2());
                           
                     }
 
@@ -9958,6 +10753,9 @@
                 appendSkippedTokens();
             } 
         finally {
+
+            	myUnorderedGroupState.restore();
+
         }
         return current;
     }
@@ -9965,21 +10763,27 @@
 
 
     // $ANTLR start "entryRuleReferenceCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3394:1: entryRuleReferenceCS returns [EObject current=null] : iv_ruleReferenceCS= ruleReferenceCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3553:1: entryRuleReferenceCS returns [EObject current=null] : iv_ruleReferenceCS= ruleReferenceCS EOF ;
     public final EObject entryRuleReferenceCS() throws RecognitionException {
         EObject current = null;
 
         EObject iv_ruleReferenceCS = null;
 
 
+         
+        		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+        			grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 
+        			grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()
+        		);
+        	
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3395:2: (iv_ruleReferenceCS= ruleReferenceCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3396:2: iv_ruleReferenceCS= ruleReferenceCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3560:2: (iv_ruleReferenceCS= ruleReferenceCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3561:2: iv_ruleReferenceCS= ruleReferenceCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getReferenceCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleReferenceCS_in_entryRuleReferenceCS7370);
+            pushFollow(FollowSets000.FOLLOW_ruleReferenceCS_in_entryRuleReferenceCS8247);
             iv_ruleReferenceCS=ruleReferenceCS();
 
             state._fsp--;
@@ -9987,7 +10791,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleReferenceCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleReferenceCS7380); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleReferenceCS8257); if (state.failed) return current;
 
             }
 
@@ -9998,6 +10802,9 @@
                 appendSkippedTokens();
             } 
         finally {
+
+            	myUnorderedGroupState.restore();
+
         }
         return current;
     }
@@ -10005,255 +10812,262 @@
 
 
     // $ANTLR start "ruleReferenceCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3403:1: ruleReferenceCS returns [EObject current=null] : ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'property' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_8= ':' ( (lv_ownedType_9_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_10= '=' ( (lv_default_11_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_12= '{' ( ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) ) (otherlv_31= ',' )? )+ otherlv_32= '}' )? ( (otherlv_33= '{' ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )* otherlv_50= '}' ) | otherlv_51= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3571:1: ruleReferenceCS returns [EObject current=null] : ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'property' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_9= '=' ( (lv_default_10_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_41= '{' ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )* otherlv_58= '}' ) | otherlv_59= ';' ) ) ;
     public final EObject ruleReferenceCS() throws RecognitionException {
         EObject current = null;
 
-        Token lv_qualifiers_0_0=null;
-        Token lv_qualifiers_1_0=null;
-        Token lv_qualifiers_2_0=null;
-        Token lv_qualifiers_3_0=null;
-        Token otherlv_4=null;
-        Token otherlv_6=null;
-        Token otherlv_8=null;
-        Token otherlv_10=null;
-        Token lv_default_11_0=null;
+        Token lv_isStatic_1_0=null;
+        Token lv_isDefinition_2_0=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        Token otherlv_9=null;
+        Token lv_default_10_0=null;
         Token otherlv_12=null;
-        Token lv_qualifiers_13_0=null;
-        Token lv_qualifiers_14_0=null;
-        Token lv_qualifiers_15_0=null;
-        Token lv_qualifiers_16_0=null;
-        Token lv_qualifiers_17_0=null;
-        Token lv_qualifiers_18_0=null;
-        Token lv_qualifiers_19_0=null;
-        Token lv_qualifiers_20_0=null;
-        Token lv_qualifiers_21_0=null;
-        Token lv_qualifiers_22_0=null;
-        Token lv_qualifiers_23_0=null;
-        Token lv_qualifiers_24_0=null;
-        Token lv_qualifiers_25_0=null;
-        Token lv_qualifiers_26_0=null;
-        Token lv_qualifiers_27_0=null;
-        Token lv_qualifiers_28_0=null;
-        Token lv_qualifiers_29_0=null;
-        Token lv_qualifiers_30_0=null;
-        Token otherlv_31=null;
+        Token lv_isComposes_13_0=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        Token lv_isDerived_16_0=null;
+        Token otherlv_17=null;
+        Token otherlv_18=null;
+        Token lv_isOrdered_19_0=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+        Token lv_isReadonly_22_0=null;
+        Token otherlv_23=null;
+        Token otherlv_24=null;
+        Token lv_isResolve_25_0=null;
+        Token otherlv_26=null;
+        Token otherlv_27=null;
+        Token lv_isTransient_28_0=null;
+        Token otherlv_29=null;
+        Token otherlv_30=null;
+        Token lv_isNotUnique_31_0=null;
         Token otherlv_32=null;
         Token otherlv_33=null;
+        Token lv_isUnsettable_34_0=null;
         Token otherlv_35=null;
-        Token otherlv_37=null;
+        Token otherlv_36=null;
+        Token lv_isVolatile_37_0=null;
+        Token otherlv_38=null;
         Token otherlv_39=null;
         Token otherlv_40=null;
-        Token otherlv_42=null;
-        Token otherlv_44=null;
+        Token otherlv_41=null;
+        Token otherlv_43=null;
         Token otherlv_45=null;
         Token otherlv_47=null;
-        Token otherlv_49=null;
+        Token otherlv_48=null;
         Token otherlv_50=null;
-        Token otherlv_51=null;
-        AntlrDatatypeRuleToken lv_name_5_0 = null;
+        Token otherlv_52=null;
+        Token otherlv_53=null;
+        Token otherlv_55=null;
+        Token otherlv_57=null;
+        Token otherlv_58=null;
+        Token otherlv_59=null;
+        AntlrDatatypeRuleToken lv_name_4_0 = null;
 
-        EObject lv_ownedType_9_0 = null;
+        EObject lv_ownedType_8_0 = null;
 
-        EObject lv_ownedAnnotations_34_0 = null;
+        EObject lv_ownedAnnotations_42_0 = null;
 
-        EObject lv_ownedDefaultExpressions_43_0 = null;
+        EObject lv_ownedDefaultExpressions_51_0 = null;
 
-        EObject lv_ownedDefaultExpressions_48_0 = null;
+        EObject lv_ownedDefaultExpressions_56_0 = null;
 
 
          enterRule(); 
+        		UnorderedGroupState myUnorderedGroupState = getUnorderedGroupHelper().snapShot(
+        			grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 
+        			grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()
+        		);
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3406:28: ( ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'property' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_8= ':' ( (lv_ownedType_9_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_10= '=' ( (lv_default_11_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_12= '{' ( ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) ) (otherlv_31= ',' )? )+ otherlv_32= '}' )? ( (otherlv_33= '{' ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )* otherlv_50= '}' ) | otherlv_51= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3407:1: ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'property' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_8= ':' ( (lv_ownedType_9_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_10= '=' ( (lv_default_11_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_12= '{' ( ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) ) (otherlv_31= ',' )? )+ otherlv_32= '}' )? ( (otherlv_33= '{' ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )* otherlv_50= '}' ) | otherlv_51= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3578:28: ( ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'property' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_9= '=' ( (lv_default_10_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_41= '{' ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )* otherlv_58= '}' ) | otherlv_59= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3579:1: ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'property' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_9= '=' ( (lv_default_10_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_41= '{' ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )* otherlv_58= '}' ) | otherlv_59= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3407:1: ( ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'property' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_8= ':' ( (lv_ownedType_9_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_10= '=' ( (lv_default_11_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_12= '{' ( ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) ) (otherlv_31= ',' )? )+ otherlv_32= '}' )? ( (otherlv_33= '{' ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )* otherlv_50= '}' ) | otherlv_51= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3407:2: ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )? otherlv_4= 'property' ( (lv_name_5_0= ruleUnrestrictedName ) ) (otherlv_6= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_8= ':' ( (lv_ownedType_9_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_10= '=' ( (lv_default_11_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_12= '{' ( ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) ) (otherlv_31= ',' )? )+ otherlv_32= '}' )? ( (otherlv_33= '{' ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )* otherlv_50= '}' ) | otherlv_51= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3579:1: ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'property' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_9= '=' ( (lv_default_10_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_41= '{' ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )* otherlv_58= '}' ) | otherlv_59= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3579:2: ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) ) otherlv_3= 'property' ( (lv_name_4_0= ruleUnrestrictedName ) ) (otherlv_5= '#' ( ( ruleUnrestrictedName ) ) )? (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypedMultiplicityRefCS ) ) )? (otherlv_9= '=' ( (lv_default_10_0= RULE_SINGLE_QUOTED_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) ) )? ( (otherlv_41= '{' ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )* otherlv_58= '}' ) | otherlv_59= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3407:2: ( ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? ) | ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? ) )?
-            int alt98=3;
-            int LA98_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3579:2: ( ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3581:1: ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) )
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3581:1: ( ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3582:2: ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* )
+            {
+            getUnorderedGroupHelper().enter(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3585:2: ( ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3586:3: ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )*
+            {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3586:3: ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )*
+            loop118:
+            do {
+                int alt118=3;
+                int LA118_0 = input.LA(1);
 
-            if ( (LA98_0==47) ) {
-                alt98=1;
-            }
-            else if ( (LA98_0==26) ) {
-                alt98=2;
-            }
-            switch (alt98) {
-                case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3407:3: ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3407:3: ( ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3407:4: ( (lv_qualifiers_0_0= 'static' ) ) ( (lv_qualifiers_1_0= 'definition' ) )?
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3407:4: ( (lv_qualifiers_0_0= 'static' ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3408:1: (lv_qualifiers_0_0= 'static' )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3408:1: (lv_qualifiers_0_0= 'static' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3409:3: lv_qualifiers_0_0= 'static'
-                    {
-                    lv_qualifiers_0_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleReferenceCS7425); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                              newLeafNode(lv_qualifiers_0_0, grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_0_0_0());
-                          
-                    }
-                    if ( state.backtracking==0 ) {
-
-                      	        if (current==null) {
-                      	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                      	        }
-                             		addWithLastConsumed(current, "qualifiers", lv_qualifiers_0_0, "static");
-                      	    
-                    }
-
-                    }
+                if ( LA118_0 ==47 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0) ) {
+                    alt118=1;
+                }
+                else if ( LA118_0 ==26 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1) ) {
+                    alt118=2;
+                }
 
 
-                    }
+                switch (alt118) {
+            	case 1 :
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3588:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3588:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3589:5: {...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+            	    {
+            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0)");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3589:108: ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3590:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+            	    {
+            	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0);
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3593:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3593:7: {...}? => ( (lv_isStatic_1_0= 'static' ) )
+            	    {
+            	    if ( !((true)) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3593:16: ( (lv_isStatic_1_0= 'static' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3594:1: (lv_isStatic_1_0= 'static' )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3594:1: (lv_isStatic_1_0= 'static' )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3595:3: lv_isStatic_1_0= 'static'
+            	    {
+            	    lv_isStatic_1_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleReferenceCS8349); if (state.failed) return current;
+            	    if ( state.backtracking==0 ) {
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3422:2: ( (lv_qualifiers_1_0= 'definition' ) )?
-                    int alt96=2;
-                    int LA96_0 = input.LA(1);
+            	              newLeafNode(lv_isStatic_1_0, grammarAccess.getReferenceCSAccess().getIsStaticStaticKeyword_0_0_0());
+            	          
+            	    }
+            	    if ( state.backtracking==0 ) {
 
-                    if ( (LA96_0==26) ) {
-                        alt96=1;
-                    }
-                    switch (alt96) {
-                        case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3423:1: (lv_qualifiers_1_0= 'definition' )
-                            {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3423:1: (lv_qualifiers_1_0= 'definition' )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3424:3: lv_qualifiers_1_0= 'definition'
-                            {
-                            lv_qualifiers_1_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleReferenceCS7456); if (state.failed) return current;
-                            if ( state.backtracking==0 ) {
+            	      	        if (current==null) {
+            	      	            current = createModelElement(grammarAccess.getReferenceCSRule());
+            	      	        }
+            	             		setWithLastConsumed(current, "isStatic", true, "static");
+            	      	    
+            	    }
 
-                                      newLeafNode(lv_qualifiers_1_0, grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_0_1_0());
-                                  
-                            }
-                            if ( state.backtracking==0 ) {
-
-                              	        if (current==null) {
-                              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                              	        }
-                                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_1_0, "definition");
-                              	    
-                            }
-
-                            }
+            	    }
 
 
-                            }
-                            break;
-
-                    }
+            	    }
 
 
-                    }
+            	    }
+
+            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+
+            	    }
 
 
-                    }
-                    break;
-                case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:6: ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:6: ( ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:7: ( (lv_qualifiers_2_0= 'definition' ) ) ( (lv_qualifiers_3_0= 'static' ) )?
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:7: ( (lv_qualifiers_2_0= 'definition' ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3439:1: (lv_qualifiers_2_0= 'definition' )
-                    {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3439:1: (lv_qualifiers_2_0= 'definition' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3440:3: lv_qualifiers_2_0= 'definition'
-                    {
-                    lv_qualifiers_2_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleReferenceCS7496); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                              newLeafNode(lv_qualifiers_2_0, grammarAccess.getReferenceCSAccess().getQualifiersDefinitionKeyword_0_1_0_0());
-                          
-                    }
-                    if ( state.backtracking==0 ) {
-
-                      	        if (current==null) {
-                      	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                      	        }
-                             		addWithLastConsumed(current, "qualifiers", lv_qualifiers_2_0, "definition");
-                      	    
-                    }
-
-                    }
+            	    }
 
 
-                    }
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3615:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3615:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3616:5: {...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+            	    {
+            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1)");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3616:108: ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3617:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+            	    {
+            	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1);
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3620:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3620:7: {...}? => ( (lv_isDefinition_2_0= 'definition' ) )
+            	    {
+            	    if ( !((true)) ) {
+            	        if (state.backtracking>0) {state.failed=true; return current;}
+            	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+            	    }
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3620:16: ( (lv_isDefinition_2_0= 'definition' ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3621:1: (lv_isDefinition_2_0= 'definition' )
+            	    {
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3621:1: (lv_isDefinition_2_0= 'definition' )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3622:3: lv_isDefinition_2_0= 'definition'
+            	    {
+            	    lv_isDefinition_2_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleReferenceCS8434); if (state.failed) return current;
+            	    if ( state.backtracking==0 ) {
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3453:2: ( (lv_qualifiers_3_0= 'static' ) )?
-                    int alt97=2;
-                    int LA97_0 = input.LA(1);
+            	              newLeafNode(lv_isDefinition_2_0, grammarAccess.getReferenceCSAccess().getIsDefinitionDefinitionKeyword_0_1_0());
+            	          
+            	    }
+            	    if ( state.backtracking==0 ) {
 
-                    if ( (LA97_0==47) ) {
-                        alt97=1;
-                    }
-                    switch (alt97) {
-                        case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3454:1: (lv_qualifiers_3_0= 'static' )
-                            {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3454:1: (lv_qualifiers_3_0= 'static' )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3455:3: lv_qualifiers_3_0= 'static'
-                            {
-                            lv_qualifiers_3_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleReferenceCS7527); if (state.failed) return current;
-                            if ( state.backtracking==0 ) {
+            	      	        if (current==null) {
+            	      	            current = createModelElement(grammarAccess.getReferenceCSRule());
+            	      	        }
+            	             		setWithLastConsumed(current, "isDefinition", true, "definition");
+            	      	    
+            	    }
 
-                                      newLeafNode(lv_qualifiers_3_0, grammarAccess.getReferenceCSAccess().getQualifiersStaticKeyword_0_1_1_0());
-                                  
-                            }
-                            if ( state.backtracking==0 ) {
-
-                              	        if (current==null) {
-                              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                              	        }
-                                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_3_0, "static");
-                              	    
-                            }
-
-                            }
+            	    }
 
 
-                            }
-                            break;
-
-                    }
+            	    }
 
 
-                    }
+            	    }
+
+            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+
+            	    }
 
 
-                    }
-                    break;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop118;
+                }
+            } while (true);
+
 
             }
 
-            otherlv_4=(Token)match(input,43,FollowSets000.FOLLOW_43_in_ruleReferenceCS7556); if (state.failed) return current;
+
+            }
+
+            getUnorderedGroupHelper().leave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0());
+
+            }
+
+            otherlv_3=(Token)match(input,43,FollowSets000.FOLLOW_43_in_ruleReferenceCS8499); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
-                  	newLeafNode(otherlv_4, grammarAccess.getReferenceCSAccess().getPropertyKeyword_1());
+                  	newLeafNode(otherlv_3, grammarAccess.getReferenceCSAccess().getPropertyKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3472:1: ( (lv_name_5_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:1: (lv_name_5_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3653:1: ( (lv_name_4_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3654:1: (lv_name_4_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:1: (lv_name_5_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3474:3: lv_name_5_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3654:1: (lv_name_4_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3655:3: lv_name_4_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getReferenceCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS7577);
-            lv_name_5_0=ruleUnrestrictedName();
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8520);
+            lv_name_4_0=ruleUnrestrictedName();
 
             state._fsp--;
             if (state.failed) return current;
@@ -10265,7 +11079,7 @@
                      		set(
                      			current, 
                      			"name",
-                      		lv_name_5_0, 
+                      		lv_name_4_0, 
                       		"UnrestrictedName");
               	        afterParserOrEnumRuleCall();
               	    
@@ -10276,28 +11090,28 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3490:2: (otherlv_6= '#' ( ( ruleUnrestrictedName ) ) )?
-            int alt99=2;
-            int LA99_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3671:2: (otherlv_5= '#' ( ( ruleUnrestrictedName ) ) )?
+            int alt119=2;
+            int LA119_0 = input.LA(1);
 
-            if ( (LA99_0==77) ) {
-                alt99=1;
+            if ( (LA119_0==77) ) {
+                alt119=1;
             }
-            switch (alt99) {
+            switch (alt119) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3490:4: otherlv_6= '#' ( ( ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3671:4: otherlv_5= '#' ( ( ruleUnrestrictedName ) )
                     {
-                    otherlv_6=(Token)match(input,77,FollowSets000.FOLLOW_77_in_ruleReferenceCS7590); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,77,FollowSets000.FOLLOW_77_in_ruleReferenceCS8533); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_6, grammarAccess.getReferenceCSAccess().getNumberSignKeyword_3_0());
+                          	newLeafNode(otherlv_5, grammarAccess.getReferenceCSAccess().getNumberSignKeyword_3_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3494:1: ( ( ruleUnrestrictedName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3495:1: ( ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3675:1: ( ( ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3676:1: ( ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3495:1: ( ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3496:3: ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3676:1: ( ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3677:3: ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -10316,7 +11130,7 @@
                       	        newCompositeNode(grammarAccess.getReferenceCSAccess().getReferredOppositePropertyCrossReference_3_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS7617);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8560);
                     ruleUnrestrictedName();
 
                     state._fsp--;
@@ -10338,36 +11152,36 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3512:4: (otherlv_8= ':' ( (lv_ownedType_9_0= ruleTypedMultiplicityRefCS ) ) )?
-            int alt100=2;
-            int LA100_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3693:4: (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypedMultiplicityRefCS ) ) )?
+            int alt120=2;
+            int LA120_0 = input.LA(1);
 
-            if ( (LA100_0==57) ) {
-                alt100=1;
+            if ( (LA120_0==57) ) {
+                alt120=1;
             }
-            switch (alt100) {
+            switch (alt120) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3512:6: otherlv_8= ':' ( (lv_ownedType_9_0= ruleTypedMultiplicityRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3693:6: otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypedMultiplicityRefCS ) )
                     {
-                    otherlv_8=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleReferenceCS7632); if (state.failed) return current;
+                    otherlv_7=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleReferenceCS8575); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_8, grammarAccess.getReferenceCSAccess().getColonKeyword_4_0());
+                          	newLeafNode(otherlv_7, grammarAccess.getReferenceCSAccess().getColonKeyword_4_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3516:1: ( (lv_ownedType_9_0= ruleTypedMultiplicityRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3517:1: (lv_ownedType_9_0= ruleTypedMultiplicityRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3697:1: ( (lv_ownedType_8_0= ruleTypedMultiplicityRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3698:1: (lv_ownedType_8_0= ruleTypedMultiplicityRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3517:1: (lv_ownedType_9_0= ruleTypedMultiplicityRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3518:3: lv_ownedType_9_0= ruleTypedMultiplicityRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3698:1: (lv_ownedType_8_0= ruleTypedMultiplicityRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3699:3: lv_ownedType_8_0= ruleTypedMultiplicityRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getReferenceCSAccess().getOwnedTypeTypedMultiplicityRefCSParserRuleCall_4_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_ruleReferenceCS7653);
-                    lv_ownedType_9_0=ruleTypedMultiplicityRefCS();
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_ruleReferenceCS8596);
+                    lv_ownedType_8_0=ruleTypedMultiplicityRefCS();
 
                     state._fsp--;
                     if (state.failed) return current;
@@ -10379,7 +11193,7 @@
                              		set(
                              			current, 
                              			"ownedType",
-                              		lv_ownedType_9_0, 
+                              		lv_ownedType_8_0, 
                               		"TypedMultiplicityRefCS");
                       	        afterParserOrEnumRuleCall();
                       	    
@@ -10396,33 +11210,33 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3534:4: (otherlv_10= '=' ( (lv_default_11_0= RULE_SINGLE_QUOTED_STRING ) ) )?
-            int alt101=2;
-            int LA101_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3715:4: (otherlv_9= '=' ( (lv_default_10_0= RULE_SINGLE_QUOTED_STRING ) ) )?
+            int alt121=2;
+            int LA121_0 = input.LA(1);
 
-            if ( (LA101_0==63) ) {
-                alt101=1;
+            if ( (LA121_0==63) ) {
+                alt121=1;
             }
-            switch (alt101) {
+            switch (alt121) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3534:6: otherlv_10= '=' ( (lv_default_11_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3715:6: otherlv_9= '=' ( (lv_default_10_0= RULE_SINGLE_QUOTED_STRING ) )
                     {
-                    otherlv_10=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleReferenceCS7668); if (state.failed) return current;
+                    otherlv_9=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleReferenceCS8611); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_10, grammarAccess.getReferenceCSAccess().getEqualsSignKeyword_5_0());
+                          	newLeafNode(otherlv_9, grammarAccess.getReferenceCSAccess().getEqualsSignKeyword_5_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3538:1: ( (lv_default_11_0= RULE_SINGLE_QUOTED_STRING ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3539:1: (lv_default_11_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3719:1: ( (lv_default_10_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3720:1: (lv_default_10_0= RULE_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3539:1: (lv_default_11_0= RULE_SINGLE_QUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3540:3: lv_default_11_0= RULE_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3720:1: (lv_default_10_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3721:3: lv_default_10_0= RULE_SINGLE_QUOTED_STRING
                     {
-                    lv_default_11_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleReferenceCS7685); if (state.failed) return current;
+                    lv_default_10_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleReferenceCS8628); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			newLeafNode(lv_default_11_0, grammarAccess.getReferenceCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0()); 
+                      			newLeafNode(lv_default_10_0, grammarAccess.getReferenceCSAccess().getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0()); 
                       		
                     }
                     if ( state.backtracking==0 ) {
@@ -10433,7 +11247,7 @@
                              		setWithLastConsumed(
                              			current, 
                              			"default",
-                              		lv_default_11_0, 
+                              		lv_default_10_0, 
                               		"SINGLE_QUOTED_STRING");
                       	    
                     }
@@ -10449,158 +11263,233 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3556:4: (otherlv_12= '{' ( ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) ) (otherlv_31= ',' )? )+ otherlv_32= '}' )?
-            int alt105=2;
-            int LA105_0 = input.LA(1);
-
-            if ( (LA105_0==61) ) {
-                int LA105_1 = input.LA(2);
-
-                if ( (LA105_1==24||LA105_1==28||LA105_1==38||LA105_1==44||LA105_1==46||(LA105_1>=50 && LA105_1<=53)||LA105_1==64||(LA105_1>=66 && LA105_1<=71)||(LA105_1>=78 && LA105_1<=79)) ) {
-                    alt105=1;
-                }
-            }
-            switch (alt105) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3737:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) ) )?
+            int alt143=2;
+            alt143 = dfa143.predict(input);
+            switch (alt143) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3556:6: otherlv_12= '{' ( ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) ) (otherlv_31= ',' )? )+ otherlv_32= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3739:1: ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) )
                     {
-                    otherlv_12=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleReferenceCS7705); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                          	newLeafNode(otherlv_12, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0());
-                          
-                    }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3560:1: ( ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) ) (otherlv_31= ',' )? )+
-                    int cnt104=0;
-                    loop104:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3739:1: ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3740:2: ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?)
+                    {
+                    getUnorderedGroupHelper().enter(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3743:2: ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?)
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3744:3: ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?
+                    {
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3744:3: ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+
+                    int cnt142=0;
+                    loop142:
                     do {
-                        int alt104=2;
-                        int LA104_0 = input.LA(1);
-
-                        if ( (LA104_0==24||LA104_0==28||LA104_0==38||LA104_0==44||LA104_0==46||(LA104_0>=50 && LA104_0<=53)||LA104_0==64||(LA104_0>=66 && LA104_0<=71)||(LA104_0>=78 && LA104_0<=79)) ) {
-                            alt104=1;
-                        }
-
-
-                        switch (alt104) {
+                        int alt142=10;
+                        alt142 = dfa142.predict(input);
+                        switch (alt142) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3560:2: ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) ) (otherlv_31= ',' )?
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3746:4: ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3560:2: ( ( (lv_qualifiers_13_0= 'composes' ) ) | ( (lv_qualifiers_14_0= '!composes' ) ) | ( (lv_qualifiers_15_0= 'derived' ) ) | ( (lv_qualifiers_16_0= '!derived' ) ) | ( (lv_qualifiers_17_0= 'ordered' ) ) | ( (lv_qualifiers_18_0= '!ordered' ) ) | ( (lv_qualifiers_19_0= 'readonly' ) ) | ( (lv_qualifiers_20_0= '!readonly' ) ) | ( (lv_qualifiers_21_0= 'resolve' ) ) | ( (lv_qualifiers_22_0= '!resolve' ) ) | ( (lv_qualifiers_23_0= 'transient' ) ) | ( (lv_qualifiers_24_0= '!transient' ) ) | ( (lv_qualifiers_25_0= 'unique' ) ) | ( (lv_qualifiers_26_0= '!unique' ) ) | ( (lv_qualifiers_27_0= 'unsettable' ) ) | ( (lv_qualifiers_28_0= '!unsettable' ) ) | ( (lv_qualifiers_29_0= 'volatile' ) ) | ( (lv_qualifiers_30_0= '!volatile' ) ) )
-                    	    int alt102=18;
-                    	    switch ( input.LA(1) ) {
-                    	    case 24:
-                    	        {
-                    	        alt102=1;
-                    	        }
-                    	        break;
-                    	    case 78:
-                    	        {
-                    	        alt102=2;
-                    	        }
-                    	        break;
-                    	    case 28:
-                    	        {
-                    	        alt102=3;
-                    	        }
-                    	        break;
-                    	    case 64:
-                    	        {
-                    	        alt102=4;
-                    	        }
-                    	        break;
-                    	    case 38:
-                    	        {
-                    	        alt102=5;
-                    	        }
-                    	        break;
-                    	    case 66:
-                    	        {
-                    	        alt102=6;
-                    	        }
-                    	        break;
-                    	    case 44:
-                    	        {
-                    	        alt102=7;
-                    	        }
-                    	        break;
-                    	    case 67:
-                    	        {
-                    	        alt102=8;
-                    	        }
-                    	        break;
-                    	    case 46:
-                    	        {
-                    	        alt102=9;
-                    	        }
-                    	        break;
-                    	    case 79:
-                    	        {
-                    	        alt102=10;
-                    	        }
-                    	        break;
-                    	    case 50:
-                    	        {
-                    	        alt102=11;
-                    	        }
-                    	        break;
-                    	    case 68:
-                    	        {
-                    	        alt102=12;
-                    	        }
-                    	        break;
-                    	    case 51:
-                    	        {
-                    	        alt102=13;
-                    	        }
-                    	        break;
-                    	    case 69:
-                    	        {
-                    	        alt102=14;
-                    	        }
-                    	        break;
-                    	    case 52:
-                    	        {
-                    	        alt102=15;
-                    	        }
-                    	        break;
-                    	    case 70:
-                    	        {
-                    	        alt102=16;
-                    	        }
-                    	        break;
-                    	    case 53:
-                    	        {
-                    	        alt102=17;
-                    	        }
-                    	        break;
-                    	    case 71:
-                    	        {
-                    	        alt102=18;
-                    	        }
-                    	        break;
-                    	    default:
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3746:4: ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3747:5: {...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3747:108: ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3748:6: ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:6: ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:7: {...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:16: (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:18: otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )?
+                    	    {
+                    	    otherlv_12=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleReferenceCS8693); if (state.failed) return current;
+                    	    if ( state.backtracking==0 ) {
+
+                    	          	newLeafNode(otherlv_12, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0());
+                    	          
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:1: ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )?
+                    	    int alt124=2;
+                    	    int LA124_0 = input.LA(1);
+
+                    	    if ( (LA124_0==24||LA124_0==78) ) {
+                    	        alt124=1;
+                    	    }
+                    	    switch (alt124) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:2: ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )?
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:2: ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' )
+                    	            int alt122=2;
+                    	            int LA122_0 = input.LA(1);
+
+                    	            if ( (LA122_0==24) ) {
+                    	                alt122=1;
+                    	            }
+                    	            else if ( (LA122_0==78) ) {
+                    	                alt122=2;
+                    	            }
+                    	            else {
+                    	                if (state.backtracking>0) {state.failed=true; return current;}
+                    	                NoViableAltException nvae =
+                    	                    new NoViableAltException("", 122, 0, input);
+
+                    	                throw nvae;
+                    	            }
+                    	            switch (alt122) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:3: ( (lv_isComposes_13_0= 'composes' ) )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:3: ( (lv_isComposes_13_0= 'composes' ) )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3756:1: (lv_isComposes_13_0= 'composes' )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3756:1: (lv_isComposes_13_0= 'composes' )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3757:3: lv_isComposes_13_0= 'composes'
+                    	                    {
+                    	                    lv_isComposes_13_0=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleReferenceCS8713); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                              newLeafNode(lv_isComposes_13_0, grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0());
+                    	                          
+                    	                    }
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                      	        if (current==null) {
+                    	                      	            current = createModelElement(grammarAccess.getReferenceCSRule());
+                    	                      	        }
+                    	                             		setWithLastConsumed(current, "isComposes", true, "composes");
+                    	                      	    
+                    	                    }
+
+                    	                    }
+
+
+                    	                    }
+
+
+                    	                    }
+                    	                    break;
+                    	                case 2 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3771:7: otherlv_14= '!composes'
+                    	                    {
+                    	                    otherlv_14=(Token)match(input,78,FollowSets000.FOLLOW_78_in_ruleReferenceCS8744); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_14, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3775:2: (otherlv_15= ',' )?
+                    	            int alt123=2;
+                    	            int LA123_0 = input.LA(1);
+
+                    	            if ( (LA123_0==60) ) {
+                    	                alt123=1;
+                    	            }
+                    	            switch (alt123) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3775:4: otherlv_15= ','
+                    	                    {
+                    	                    otherlv_15=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS8758); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_15, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3786:4: ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3786:4: ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3787:5: {...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3787:108: ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3788:6: ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:6: ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:7: {...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:16: ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:17: ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:17: ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' )
+                    	    int alt125=2;
+                    	    int LA125_0 = input.LA(1);
+
+                    	    if ( (LA125_0==28) ) {
+                    	        alt125=1;
+                    	    }
+                    	    else if ( (LA125_0==64) ) {
+                    	        alt125=2;
+                    	    }
+                    	    else {
                     	        if (state.backtracking>0) {state.failed=true; return current;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("", 102, 0, input);
+                    	            new NoViableAltException("", 125, 0, input);
 
                     	        throw nvae;
                     	    }
-
-                    	    switch (alt102) {
+                    	    switch (alt125) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3560:3: ( (lv_qualifiers_13_0= 'composes' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:18: ( (lv_isDerived_16_0= 'derived' ) )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3560:3: ( (lv_qualifiers_13_0= 'composes' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3561:1: (lv_qualifiers_13_0= 'composes' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:18: ( (lv_isDerived_16_0= 'derived' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3792:1: (lv_isDerived_16_0= 'derived' )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3561:1: (lv_qualifiers_13_0= 'composes' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3562:3: lv_qualifiers_13_0= 'composes'
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3792:1: (lv_isDerived_16_0= 'derived' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3793:3: lv_isDerived_16_0= 'derived'
                     	            {
-                    	            lv_qualifiers_13_0=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleReferenceCS7725); if (state.failed) return current;
+                    	            lv_isDerived_16_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_ruleReferenceCS8837); if (state.failed) return current;
                     	            if ( state.backtracking==0 ) {
 
-                    	                      newLeafNode(lv_qualifiers_13_0, grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_0_0());
+                    	                      newLeafNode(lv_isDerived_16_0, grammarAccess.getReferenceCSAccess().getIsDerivedDerivedKeyword_6_1_0_0_0());
                     	                  
                     	            }
                     	            if ( state.backtracking==0 ) {
@@ -10608,7 +11497,7 @@
                     	              	        if (current==null) {
                     	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
                     	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_13_0, "composes");
+                    	                     		setWithLastConsumed(current, "isDerived", true, "derived");
                     	              	    
                     	            }
 
@@ -10621,567 +11510,35 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3576:6: ( (lv_qualifiers_14_0= '!composes' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3807:7: otherlv_17= '!derived'
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3576:6: ( (lv_qualifiers_14_0= '!composes' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3577:1: (lv_qualifiers_14_0= '!composes' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3577:1: (lv_qualifiers_14_0= '!composes' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3578:3: lv_qualifiers_14_0= '!composes'
-                    	            {
-                    	            lv_qualifiers_14_0=(Token)match(input,78,FollowSets000.FOLLOW_78_in_ruleReferenceCS7762); if (state.failed) return current;
+                    	            otherlv_17=(Token)match(input,64,FollowSets000.FOLLOW_64_in_ruleReferenceCS8868); if (state.failed) return current;
                     	            if ( state.backtracking==0 ) {
 
-                    	                      newLeafNode(lv_qualifiers_14_0, grammarAccess.getReferenceCSAccess().getQualifiersComposesKeyword_6_1_0_1_0());
+                    	                  	newLeafNode(otherlv_17, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1());
                     	                  
                     	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_14_0, "!composes");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 3 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3592:6: ( (lv_qualifiers_15_0= 'derived' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3592:6: ( (lv_qualifiers_15_0= 'derived' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3593:1: (lv_qualifiers_15_0= 'derived' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3593:1: (lv_qualifiers_15_0= 'derived' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3594:3: lv_qualifiers_15_0= 'derived'
-                    	            {
-                    	            lv_qualifiers_15_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_ruleReferenceCS7799); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_15_0, grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_2_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_15_0, "derived");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 4 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3608:6: ( (lv_qualifiers_16_0= '!derived' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3608:6: ( (lv_qualifiers_16_0= '!derived' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3609:1: (lv_qualifiers_16_0= '!derived' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3609:1: (lv_qualifiers_16_0= '!derived' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3610:3: lv_qualifiers_16_0= '!derived'
-                    	            {
-                    	            lv_qualifiers_16_0=(Token)match(input,64,FollowSets000.FOLLOW_64_in_ruleReferenceCS7836); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_16_0, grammarAccess.getReferenceCSAccess().getQualifiersDerivedKeyword_6_1_0_3_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_16_0, "!derived");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 5 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3624:6: ( (lv_qualifiers_17_0= 'ordered' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3624:6: ( (lv_qualifiers_17_0= 'ordered' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3625:1: (lv_qualifiers_17_0= 'ordered' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3625:1: (lv_qualifiers_17_0= 'ordered' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3626:3: lv_qualifiers_17_0= 'ordered'
-                    	            {
-                    	            lv_qualifiers_17_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleReferenceCS7873); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_17_0, grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_4_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_17_0, "ordered");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 6 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3640:6: ( (lv_qualifiers_18_0= '!ordered' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3640:6: ( (lv_qualifiers_18_0= '!ordered' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3641:1: (lv_qualifiers_18_0= '!ordered' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3641:1: (lv_qualifiers_18_0= '!ordered' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3642:3: lv_qualifiers_18_0= '!ordered'
-                    	            {
-                    	            lv_qualifiers_18_0=(Token)match(input,66,FollowSets000.FOLLOW_66_in_ruleReferenceCS7910); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_18_0, grammarAccess.getReferenceCSAccess().getQualifiersOrderedKeyword_6_1_0_5_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_18_0, "!ordered");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 7 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3656:6: ( (lv_qualifiers_19_0= 'readonly' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3656:6: ( (lv_qualifiers_19_0= 'readonly' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3657:1: (lv_qualifiers_19_0= 'readonly' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3657:1: (lv_qualifiers_19_0= 'readonly' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3658:3: lv_qualifiers_19_0= 'readonly'
-                    	            {
-                    	            lv_qualifiers_19_0=(Token)match(input,44,FollowSets000.FOLLOW_44_in_ruleReferenceCS7947); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_19_0, grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_6_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_19_0, "readonly");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 8 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3672:6: ( (lv_qualifiers_20_0= '!readonly' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3672:6: ( (lv_qualifiers_20_0= '!readonly' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3673:1: (lv_qualifiers_20_0= '!readonly' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3673:1: (lv_qualifiers_20_0= '!readonly' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3674:3: lv_qualifiers_20_0= '!readonly'
-                    	            {
-                    	            lv_qualifiers_20_0=(Token)match(input,67,FollowSets000.FOLLOW_67_in_ruleReferenceCS7984); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_20_0, grammarAccess.getReferenceCSAccess().getQualifiersReadonlyKeyword_6_1_0_7_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_20_0, "!readonly");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 9 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3688:6: ( (lv_qualifiers_21_0= 'resolve' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3688:6: ( (lv_qualifiers_21_0= 'resolve' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3689:1: (lv_qualifiers_21_0= 'resolve' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3689:1: (lv_qualifiers_21_0= 'resolve' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3690:3: lv_qualifiers_21_0= 'resolve'
-                    	            {
-                    	            lv_qualifiers_21_0=(Token)match(input,46,FollowSets000.FOLLOW_46_in_ruleReferenceCS8021); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_21_0, grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_8_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_21_0, "resolve");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 10 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3704:6: ( (lv_qualifiers_22_0= '!resolve' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3704:6: ( (lv_qualifiers_22_0= '!resolve' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3705:1: (lv_qualifiers_22_0= '!resolve' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3705:1: (lv_qualifiers_22_0= '!resolve' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3706:3: lv_qualifiers_22_0= '!resolve'
-                    	            {
-                    	            lv_qualifiers_22_0=(Token)match(input,79,FollowSets000.FOLLOW_79_in_ruleReferenceCS8058); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_22_0, grammarAccess.getReferenceCSAccess().getQualifiersResolveKeyword_6_1_0_9_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_22_0, "!resolve");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 11 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3720:6: ( (lv_qualifiers_23_0= 'transient' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3720:6: ( (lv_qualifiers_23_0= 'transient' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3721:1: (lv_qualifiers_23_0= 'transient' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3721:1: (lv_qualifiers_23_0= 'transient' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3722:3: lv_qualifiers_23_0= 'transient'
-                    	            {
-                    	            lv_qualifiers_23_0=(Token)match(input,50,FollowSets000.FOLLOW_50_in_ruleReferenceCS8095); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_23_0, grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_10_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_23_0, "transient");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 12 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3736:6: ( (lv_qualifiers_24_0= '!transient' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3736:6: ( (lv_qualifiers_24_0= '!transient' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3737:1: (lv_qualifiers_24_0= '!transient' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3737:1: (lv_qualifiers_24_0= '!transient' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3738:3: lv_qualifiers_24_0= '!transient'
-                    	            {
-                    	            lv_qualifiers_24_0=(Token)match(input,68,FollowSets000.FOLLOW_68_in_ruleReferenceCS8132); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_24_0, grammarAccess.getReferenceCSAccess().getQualifiersTransientKeyword_6_1_0_11_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_24_0, "!transient");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 13 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3752:6: ( (lv_qualifiers_25_0= 'unique' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3752:6: ( (lv_qualifiers_25_0= 'unique' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3753:1: (lv_qualifiers_25_0= 'unique' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3753:1: (lv_qualifiers_25_0= 'unique' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3754:3: lv_qualifiers_25_0= 'unique'
-                    	            {
-                    	            lv_qualifiers_25_0=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleReferenceCS8169); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_25_0, grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_12_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_25_0, "unique");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 14 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3768:6: ( (lv_qualifiers_26_0= '!unique' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3768:6: ( (lv_qualifiers_26_0= '!unique' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3769:1: (lv_qualifiers_26_0= '!unique' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3769:1: (lv_qualifiers_26_0= '!unique' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3770:3: lv_qualifiers_26_0= '!unique'
-                    	            {
-                    	            lv_qualifiers_26_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_ruleReferenceCS8206); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_26_0, grammarAccess.getReferenceCSAccess().getQualifiersUniqueKeyword_6_1_0_13_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_26_0, "!unique");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 15 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3784:6: ( (lv_qualifiers_27_0= 'unsettable' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3784:6: ( (lv_qualifiers_27_0= 'unsettable' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3785:1: (lv_qualifiers_27_0= 'unsettable' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3785:1: (lv_qualifiers_27_0= 'unsettable' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3786:3: lv_qualifiers_27_0= 'unsettable'
-                    	            {
-                    	            lv_qualifiers_27_0=(Token)match(input,52,FollowSets000.FOLLOW_52_in_ruleReferenceCS8243); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_27_0, grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_14_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_27_0, "unsettable");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 16 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3800:6: ( (lv_qualifiers_28_0= '!unsettable' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3800:6: ( (lv_qualifiers_28_0= '!unsettable' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3801:1: (lv_qualifiers_28_0= '!unsettable' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3801:1: (lv_qualifiers_28_0= '!unsettable' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3802:3: lv_qualifiers_28_0= '!unsettable'
-                    	            {
-                    	            lv_qualifiers_28_0=(Token)match(input,70,FollowSets000.FOLLOW_70_in_ruleReferenceCS8280); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_28_0, grammarAccess.getReferenceCSAccess().getQualifiersUnsettableKeyword_6_1_0_15_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_28_0, "!unsettable");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 17 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3816:6: ( (lv_qualifiers_29_0= 'volatile' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3816:6: ( (lv_qualifiers_29_0= 'volatile' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3817:1: (lv_qualifiers_29_0= 'volatile' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3817:1: (lv_qualifiers_29_0= 'volatile' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3818:3: lv_qualifiers_29_0= 'volatile'
-                    	            {
-                    	            lv_qualifiers_29_0=(Token)match(input,53,FollowSets000.FOLLOW_53_in_ruleReferenceCS8317); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_29_0, grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_16_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_29_0, "volatile");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
-
-                    	            }
-                    	            break;
-                    	        case 18 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3832:6: ( (lv_qualifiers_30_0= '!volatile' ) )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3832:6: ( (lv_qualifiers_30_0= '!volatile' ) )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3833:1: (lv_qualifiers_30_0= '!volatile' )
-                    	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3833:1: (lv_qualifiers_30_0= '!volatile' )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3834:3: lv_qualifiers_30_0= '!volatile'
-                    	            {
-                    	            lv_qualifiers_30_0=(Token)match(input,71,FollowSets000.FOLLOW_71_in_ruleReferenceCS8354); if (state.failed) return current;
-                    	            if ( state.backtracking==0 ) {
-
-                    	                      newLeafNode(lv_qualifiers_30_0, grammarAccess.getReferenceCSAccess().getQualifiersVolatileKeyword_6_1_0_17_0());
-                    	                  
-                    	            }
-                    	            if ( state.backtracking==0 ) {
-
-                    	              	        if (current==null) {
-                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
-                    	              	        }
-                    	                     		addWithLastConsumed(current, "qualifiers", lv_qualifiers_30_0, "!volatile");
-                    	              	    
-                    	            }
-
-                    	            }
-
-
-                    	            }
-
 
                     	            }
                     	            break;
 
                     	    }
 
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3847:3: (otherlv_31= ',' )?
-                    	    int alt103=2;
-                    	    int LA103_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3811:2: (otherlv_18= ',' )?
+                    	    int alt126=2;
+                    	    int LA126_0 = input.LA(1);
 
-                    	    if ( (LA103_0==60) ) {
-                    	        alt103=1;
+                    	    if ( (LA126_0==60) ) {
+                    	        alt126=1;
                     	    }
-                    	    switch (alt103) {
+                    	    switch (alt126) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3847:5: otherlv_31= ','
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3811:4: otherlv_18= ','
                     	            {
-                    	            otherlv_31=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS8381); if (state.failed) return current;
+                    	            otherlv_18=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS8882); if (state.failed) return current;
                     	            if ( state.backtracking==0 ) {
 
-                    	                  	newLeafNode(otherlv_31, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1());
+                    	                  	newLeafNode(otherlv_18, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1());
                     	                  
                     	            }
 
@@ -11192,107 +11549,1044 @@
 
 
                     	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 3 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3822:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3822:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3823:5: {...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3823:108: ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3824:6: ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:6: ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:7: {...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:16: ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:17: ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:17: ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' )
+                    	    int alt127=2;
+                    	    int LA127_0 = input.LA(1);
+
+                    	    if ( (LA127_0==38) ) {
+                    	        alt127=1;
+                    	    }
+                    	    else if ( (LA127_0==66) ) {
+                    	        alt127=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 127, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt127) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:18: ( (lv_isOrdered_19_0= 'ordered' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:18: ( (lv_isOrdered_19_0= 'ordered' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3828:1: (lv_isOrdered_19_0= 'ordered' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3828:1: (lv_isOrdered_19_0= 'ordered' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3829:3: lv_isOrdered_19_0= 'ordered'
+                    	            {
+                    	            lv_isOrdered_19_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleReferenceCS8959); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isOrdered_19_0, grammarAccess.getReferenceCSAccess().getIsOrderedOrderedKeyword_6_2_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isOrdered", true, "ordered");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3843:7: otherlv_20= '!ordered'
+                    	            {
+                    	            otherlv_20=(Token)match(input,66,FollowSets000.FOLLOW_66_in_ruleReferenceCS8990); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_20, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3847:2: (otherlv_21= ',' )?
+                    	    int alt128=2;
+                    	    int LA128_0 = input.LA(1);
+
+                    	    if ( (LA128_0==60) ) {
+                    	        alt128=1;
+                    	    }
+                    	    switch (alt128) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3847:4: otherlv_21= ','
+                    	            {
+                    	            otherlv_21=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS9004); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_21, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 4 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3858:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3858:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3859:5: {...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3859:108: ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3860:6: ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:6: ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:7: {...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:16: ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:17: ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:17: ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' )
+                    	    int alt129=2;
+                    	    int LA129_0 = input.LA(1);
+
+                    	    if ( (LA129_0==44) ) {
+                    	        alt129=1;
+                    	    }
+                    	    else if ( (LA129_0==67) ) {
+                    	        alt129=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 129, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt129) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:18: ( (lv_isReadonly_22_0= 'readonly' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:18: ( (lv_isReadonly_22_0= 'readonly' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3864:1: (lv_isReadonly_22_0= 'readonly' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3864:1: (lv_isReadonly_22_0= 'readonly' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3865:3: lv_isReadonly_22_0= 'readonly'
+                    	            {
+                    	            lv_isReadonly_22_0=(Token)match(input,44,FollowSets000.FOLLOW_44_in_ruleReferenceCS9081); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isReadonly_22_0, grammarAccess.getReferenceCSAccess().getIsReadonlyReadonlyKeyword_6_3_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isReadonly", true, "readonly");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3879:7: otherlv_23= '!readonly'
+                    	            {
+                    	            otherlv_23=(Token)match(input,67,FollowSets000.FOLLOW_67_in_ruleReferenceCS9112); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_23, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3883:2: (otherlv_24= ',' )?
+                    	    int alt130=2;
+                    	    int LA130_0 = input.LA(1);
+
+                    	    if ( (LA130_0==60) ) {
+                    	        alt130=1;
+                    	    }
+                    	    switch (alt130) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3883:4: otherlv_24= ','
+                    	            {
+                    	            otherlv_24=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS9126); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_24, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 5 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3894:4: ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3894:4: ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3895:5: {...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3895:108: ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3896:6: ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:6: ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:7: {...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:16: ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:17: ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:17: ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' )
+                    	    int alt131=2;
+                    	    int LA131_0 = input.LA(1);
+
+                    	    if ( (LA131_0==46) ) {
+                    	        alt131=1;
+                    	    }
+                    	    else if ( (LA131_0==79) ) {
+                    	        alt131=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 131, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt131) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:18: ( (lv_isResolve_25_0= 'resolve' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:18: ( (lv_isResolve_25_0= 'resolve' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3900:1: (lv_isResolve_25_0= 'resolve' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3900:1: (lv_isResolve_25_0= 'resolve' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3901:3: lv_isResolve_25_0= 'resolve'
+                    	            {
+                    	            lv_isResolve_25_0=(Token)match(input,46,FollowSets000.FOLLOW_46_in_ruleReferenceCS9203); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isResolve_25_0, grammarAccess.getReferenceCSAccess().getIsResolveResolveKeyword_6_4_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isResolve", true, "resolve");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3915:7: otherlv_26= '!resolve'
+                    	            {
+                    	            otherlv_26=(Token)match(input,79,FollowSets000.FOLLOW_79_in_ruleReferenceCS9234); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_26, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3919:2: (otherlv_27= ',' )?
+                    	    int alt132=2;
+                    	    int LA132_0 = input.LA(1);
+
+                    	    if ( (LA132_0==60) ) {
+                    	        alt132=1;
+                    	    }
+                    	    switch (alt132) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3919:4: otherlv_27= ','
+                    	            {
+                    	            otherlv_27=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS9248); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_27, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 6 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3930:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3930:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3931:5: {...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3931:108: ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3932:6: ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:6: ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:7: {...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:16: ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:17: ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:17: ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' )
+                    	    int alt133=2;
+                    	    int LA133_0 = input.LA(1);
+
+                    	    if ( (LA133_0==50) ) {
+                    	        alt133=1;
+                    	    }
+                    	    else if ( (LA133_0==68) ) {
+                    	        alt133=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 133, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt133) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:18: ( (lv_isTransient_28_0= 'transient' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:18: ( (lv_isTransient_28_0= 'transient' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3936:1: (lv_isTransient_28_0= 'transient' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3936:1: (lv_isTransient_28_0= 'transient' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3937:3: lv_isTransient_28_0= 'transient'
+                    	            {
+                    	            lv_isTransient_28_0=(Token)match(input,50,FollowSets000.FOLLOW_50_in_ruleReferenceCS9325); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isTransient_28_0, grammarAccess.getReferenceCSAccess().getIsTransientTransientKeyword_6_5_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isTransient", true, "transient");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3951:7: otherlv_29= '!transient'
+                    	            {
+                    	            otherlv_29=(Token)match(input,68,FollowSets000.FOLLOW_68_in_ruleReferenceCS9356); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_29, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3955:2: (otherlv_30= ',' )?
+                    	    int alt134=2;
+                    	    int LA134_0 = input.LA(1);
+
+                    	    if ( (LA134_0==60) ) {
+                    	        alt134=1;
+                    	    }
+                    	    switch (alt134) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3955:4: otherlv_30= ','
+                    	            {
+                    	            otherlv_30=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS9370); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_30, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 7 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3966:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3966:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3967:5: {...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3967:108: ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3968:6: ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:6: ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:7: {...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:16: ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:17: ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:17: ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' )
+                    	    int alt135=2;
+                    	    int LA135_0 = input.LA(1);
+
+                    	    if ( (LA135_0==69) ) {
+                    	        alt135=1;
+                    	    }
+                    	    else if ( (LA135_0==51) ) {
+                    	        alt135=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 135, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt135) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:18: ( (lv_isNotUnique_31_0= '!unique' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:18: ( (lv_isNotUnique_31_0= '!unique' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3972:1: (lv_isNotUnique_31_0= '!unique' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3972:1: (lv_isNotUnique_31_0= '!unique' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3973:3: lv_isNotUnique_31_0= '!unique'
+                    	            {
+                    	            lv_isNotUnique_31_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_ruleReferenceCS9447); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isNotUnique_31_0, grammarAccess.getReferenceCSAccess().getIsNotUniqueUniqueKeyword_6_6_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isNotUnique", true, "!unique");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3987:7: otherlv_32= 'unique'
+                    	            {
+                    	            otherlv_32=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleReferenceCS9478); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_32, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3991:2: (otherlv_33= ',' )?
+                    	    int alt136=2;
+                    	    int LA136_0 = input.LA(1);
+
+                    	    if ( (LA136_0==60) ) {
+                    	        alt136=1;
+                    	    }
+                    	    switch (alt136) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3991:4: otherlv_33= ','
+                    	            {
+                    	            otherlv_33=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS9492); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_33, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 8 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4002:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4002:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4003:5: {...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4003:108: ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4004:6: ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:6: ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:7: {...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:16: ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:17: ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )?
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:17: ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' )
+                    	    int alt137=2;
+                    	    int LA137_0 = input.LA(1);
+
+                    	    if ( (LA137_0==52) ) {
+                    	        alt137=1;
+                    	    }
+                    	    else if ( (LA137_0==70) ) {
+                    	        alt137=2;
+                    	    }
+                    	    else {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("", 137, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt137) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:18: ( (lv_isUnsettable_34_0= 'unsettable' ) )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:18: ( (lv_isUnsettable_34_0= 'unsettable' ) )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4008:1: (lv_isUnsettable_34_0= 'unsettable' )
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4008:1: (lv_isUnsettable_34_0= 'unsettable' )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4009:3: lv_isUnsettable_34_0= 'unsettable'
+                    	            {
+                    	            lv_isUnsettable_34_0=(Token)match(input,52,FollowSets000.FOLLOW_52_in_ruleReferenceCS9569); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                      newLeafNode(lv_isUnsettable_34_0, grammarAccess.getReferenceCSAccess().getIsUnsettableUnsettableKeyword_6_7_0_0_0());
+                    	                  
+                    	            }
+                    	            if ( state.backtracking==0 ) {
+
+                    	              	        if (current==null) {
+                    	              	            current = createModelElement(grammarAccess.getReferenceCSRule());
+                    	              	        }
+                    	                     		setWithLastConsumed(current, "isUnsettable", true, "unsettable");
+                    	              	    
+                    	            }
+
+                    	            }
+
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4023:7: otherlv_35= '!unsettable'
+                    	            {
+                    	            otherlv_35=(Token)match(input,70,FollowSets000.FOLLOW_70_in_ruleReferenceCS9600); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_35, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4027:2: (otherlv_36= ',' )?
+                    	    int alt138=2;
+                    	    int LA138_0 = input.LA(1);
+
+                    	    if ( (LA138_0==60) ) {
+                    	        alt138=1;
+                    	    }
+                    	    switch (alt138) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4027:4: otherlv_36= ','
+                    	            {
+                    	            otherlv_36=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS9614); if (state.failed) return current;
+                    	            if ( state.backtracking==0 ) {
+
+                    	                  	newLeafNode(otherlv_36, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1());
+                    	                  
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 9 :
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4038:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) )
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4038:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4039:5: {...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) )
+                    	    {
+                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8)");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4039:108: ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4040:6: ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) )
+                    	    {
+                    	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:6: ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:7: {...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' )
+                    	    {
+                    	    if ( !((true)) ) {
+                    	        if (state.backtracking>0) {state.failed=true; return current;}
+                    	        throw new FailedPredicateException(input, "ruleReferenceCS", "true");
+                    	    }
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:16: ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:17: ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}'
+                    	    {
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:17: ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )?
+                    	    int alt141=2;
+                    	    int LA141_0 = input.LA(1);
+
+                    	    if ( (LA141_0==53||LA141_0==71) ) {
+                    	        alt141=1;
+                    	    }
+                    	    switch (alt141) {
+                    	        case 1 :
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:18: ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )?
+                    	            {
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:18: ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' )
+                    	            int alt139=2;
+                    	            int LA139_0 = input.LA(1);
+
+                    	            if ( (LA139_0==53) ) {
+                    	                alt139=1;
+                    	            }
+                    	            else if ( (LA139_0==71) ) {
+                    	                alt139=2;
+                    	            }
+                    	            else {
+                    	                if (state.backtracking>0) {state.failed=true; return current;}
+                    	                NoViableAltException nvae =
+                    	                    new NoViableAltException("", 139, 0, input);
+
+                    	                throw nvae;
+                    	            }
+                    	            switch (alt139) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:19: ( (lv_isVolatile_37_0= 'volatile' ) )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:19: ( (lv_isVolatile_37_0= 'volatile' ) )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4044:1: (lv_isVolatile_37_0= 'volatile' )
+                    	                    {
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4044:1: (lv_isVolatile_37_0= 'volatile' )
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4045:3: lv_isVolatile_37_0= 'volatile'
+                    	                    {
+                    	                    lv_isVolatile_37_0=(Token)match(input,53,FollowSets000.FOLLOW_53_in_ruleReferenceCS9692); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                              newLeafNode(lv_isVolatile_37_0, grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0());
+                    	                          
+                    	                    }
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                      	        if (current==null) {
+                    	                      	            current = createModelElement(grammarAccess.getReferenceCSRule());
+                    	                      	        }
+                    	                             		setWithLastConsumed(current, "isVolatile", true, "volatile");
+                    	                      	    
+                    	                    }
+
+                    	                    }
+
+
+                    	                    }
+
+
+                    	                    }
+                    	                    break;
+                    	                case 2 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4059:7: otherlv_38= '!volatile'
+                    	                    {
+                    	                    otherlv_38=(Token)match(input,71,FollowSets000.FOLLOW_71_in_ruleReferenceCS9723); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_38, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4063:2: (otherlv_39= ',' )?
+                    	            int alt140=2;
+                    	            int LA140_0 = input.LA(1);
+
+                    	            if ( (LA140_0==60) ) {
+                    	                alt140=1;
+                    	            }
+                    	            switch (alt140) {
+                    	                case 1 :
+                    	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4063:4: otherlv_39= ','
+                    	                    {
+                    	                    otherlv_39=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS9737); if (state.failed) return current;
+                    	                    if ( state.backtracking==0 ) {
+
+                    	                          	newLeafNode(otherlv_39, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1());
+                    	                          
+                    	                    }
+
+                    	                    }
+                    	                    break;
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    otherlv_40=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleReferenceCS9753); if (state.failed) return current;
+                    	    if ( state.backtracking==0 ) {
+
+                    	          	newLeafNode(otherlv_40, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1());
+                    	          
+                    	    }
+
+                    	    }
+
+
+                    	    }
+
+                    	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt104 >= 1 ) break loop104;
+                    	    if ( cnt142 >= 1 ) break loop142;
                     	    if (state.backtracking>0) {state.failed=true; return current;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(104, input);
+                                    new EarlyExitException(142, input);
                                 throw eee;
                         }
-                        cnt104++;
+                        cnt142++;
                     } while (true);
 
-                    otherlv_32=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleReferenceCS8397); if (state.failed) return current;
-                    if ( state.backtracking==0 ) {
-
-                          	newLeafNode(otherlv_32, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_2());
-                          
+                    if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {
+                        if (state.backtracking>0) {state.failed=true; return current;}
+                        throw new FailedPredicateException(input, "ruleReferenceCS", "getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6())");
                     }
 
                     }
+
+
+                    }
+
+                    getUnorderedGroupHelper().leave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+
+                    }
                     break;
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3855:3: ( (otherlv_33= '{' ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )* otherlv_50= '}' ) | otherlv_51= ';' )
-            int alt112=2;
-            int LA112_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4086:3: ( (otherlv_41= '{' ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )* otherlv_58= '}' ) | otherlv_59= ';' )
+            int alt150=2;
+            int LA150_0 = input.LA(1);
 
-            if ( (LA112_0==61) ) {
-                alt112=1;
+            if ( (LA150_0==61) ) {
+                alt150=1;
             }
-            else if ( (LA112_0==58) ) {
-                alt112=2;
+            else if ( (LA150_0==58) ) {
+                alt150=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 112, 0, input);
+                    new NoViableAltException("", 150, 0, input);
 
                 throw nvae;
             }
-            switch (alt112) {
+            switch (alt150) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3855:4: (otherlv_33= '{' ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )* otherlv_50= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4086:4: (otherlv_41= '{' ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )* otherlv_58= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3855:4: (otherlv_33= '{' ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )* otherlv_50= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3855:6: otherlv_33= '{' ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )* otherlv_50= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4086:4: (otherlv_41= '{' ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )* otherlv_58= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4086:6: otherlv_41= '{' ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )* otherlv_58= '}'
                     {
-                    otherlv_33=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleReferenceCS8413); if (state.failed) return current;
+                    otherlv_41=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleReferenceCS9815); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_33, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_7_0_0());
+                          	newLeafNode(otherlv_41, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_7_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3859:1: ( ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) ) | (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' ) | (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' ) | (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' ) )*
-                    loop111:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4090:1: ( ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) ) | (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' ) | (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' ) | (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' ) )*
+                    loop149:
                     do {
-                        int alt111=5;
+                        int alt149=5;
                         switch ( input.LA(1) ) {
                         case 59:
                         case 74:
                         case 80:
                             {
-                            alt111=1;
+                            alt149=1;
                             }
                             break;
                         case 35:
                             {
-                            alt111=2;
+                            alt149=2;
                             }
                             break;
                         case 27:
                             {
-                            alt111=3;
+                            alt149=3;
                             }
                             break;
                         case 33:
                             {
-                            alt111=4;
+                            alt149=4;
                             }
                             break;
 
                         }
 
-                        switch (alt111) {
+                        switch (alt149) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3859:2: ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4090:2: ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3859:2: ( (lv_ownedAnnotations_34_0= ruleAnnotationElementCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3860:1: (lv_ownedAnnotations_34_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4090:2: ( (lv_ownedAnnotations_42_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4091:1: (lv_ownedAnnotations_42_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3860:1: (lv_ownedAnnotations_34_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3861:3: lv_ownedAnnotations_34_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4091:1: (lv_ownedAnnotations_42_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4092:3: lv_ownedAnnotations_42_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getReferenceCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_7_0_1_0_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleReferenceCS8435);
-                    	    lv_ownedAnnotations_34_0=ruleAnnotationElementCS();
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleReferenceCS9837);
+                    	    lv_ownedAnnotations_42_0=ruleAnnotationElementCS();
 
                     	    state._fsp--;
                     	    if (state.failed) return current;
@@ -11304,7 +12598,7 @@
                     	             		add(
                     	             			current, 
                     	             			"ownedAnnotations",
-                    	              		lv_ownedAnnotations_34_0, 
+                    	              		lv_ownedAnnotations_42_0, 
                     	              		"AnnotationElementCS");
                     	      	        afterParserOrEnumRuleCall();
                     	      	    
@@ -11319,22 +12613,22 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3878:6: (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4109:6: (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3878:6: (otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';' )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3878:8: otherlv_35= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_39= ';'
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4109:6: (otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4109:8: otherlv_43= 'key' ( ( ruleUnrestrictedName ) ) (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )* otherlv_47= ';'
                     	    {
-                    	    otherlv_35=(Token)match(input,35,FollowSets000.FOLLOW_35_in_ruleReferenceCS8454); if (state.failed) return current;
+                    	    otherlv_43=(Token)match(input,35,FollowSets000.FOLLOW_35_in_ruleReferenceCS9856); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_35, grammarAccess.getReferenceCSAccess().getKeyKeyword_7_0_1_1_0());
+                    	          	newLeafNode(otherlv_43, grammarAccess.getReferenceCSAccess().getKeyKeyword_7_0_1_1_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3882:1: ( ( ruleUnrestrictedName ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3883:1: ( ruleUnrestrictedName )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4113:1: ( ( ruleUnrestrictedName ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4114:1: ( ruleUnrestrictedName )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3883:1: ( ruleUnrestrictedName )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3884:3: ruleUnrestrictedName
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4114:1: ( ruleUnrestrictedName )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4115:3: ruleUnrestrictedName
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
@@ -11353,7 +12647,7 @@
                     	      	        newCompositeNode(grammarAccess.getReferenceCSAccess().getReferredKeysPropertyCrossReference_7_0_1_1_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8481);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS9883);
                     	    ruleUnrestrictedName();
 
                     	    state._fsp--;
@@ -11369,32 +12663,32 @@
 
                     	    }
 
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3900:2: (otherlv_37= ',' ( ( ruleUnrestrictedName ) ) )*
-                    	    loop106:
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4131:2: (otherlv_45= ',' ( ( ruleUnrestrictedName ) ) )*
+                    	    loop144:
                     	    do {
-                    	        int alt106=2;
-                    	        int LA106_0 = input.LA(1);
+                    	        int alt144=2;
+                    	        int LA144_0 = input.LA(1);
 
-                    	        if ( (LA106_0==60) ) {
-                    	            alt106=1;
+                    	        if ( (LA144_0==60) ) {
+                    	            alt144=1;
                     	        }
 
 
-                    	        switch (alt106) {
+                    	        switch (alt144) {
                     	    	case 1 :
-                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3900:4: otherlv_37= ',' ( ( ruleUnrestrictedName ) )
+                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4131:4: otherlv_45= ',' ( ( ruleUnrestrictedName ) )
                     	    	    {
-                    	    	    otherlv_37=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS8494); if (state.failed) return current;
+                    	    	    otherlv_45=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleReferenceCS9896); if (state.failed) return current;
                     	    	    if ( state.backtracking==0 ) {
 
-                    	    	          	newLeafNode(otherlv_37, grammarAccess.getReferenceCSAccess().getCommaKeyword_7_0_1_1_2_0());
+                    	    	          	newLeafNode(otherlv_45, grammarAccess.getReferenceCSAccess().getCommaKeyword_7_0_1_1_2_0());
                     	    	          
                     	    	    }
-                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3904:1: ( ( ruleUnrestrictedName ) )
-                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3905:1: ( ruleUnrestrictedName )
+                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4135:1: ( ( ruleUnrestrictedName ) )
+                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4136:1: ( ruleUnrestrictedName )
                     	    	    {
-                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3905:1: ( ruleUnrestrictedName )
-                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3906:3: ruleUnrestrictedName
+                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4136:1: ( ruleUnrestrictedName )
+                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4137:3: ruleUnrestrictedName
                     	    	    {
                     	    	    if ( state.backtracking==0 ) {
                     	    	       
@@ -11413,7 +12707,7 @@
                     	    	      	        newCompositeNode(grammarAccess.getReferenceCSAccess().getReferredKeysPropertyCrossReference_7_0_1_1_2_1_0()); 
                     	    	      	    
                     	    	    }
-                    	    	    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8521);
+                    	    	    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS9923);
                     	    	    ruleUnrestrictedName();
 
                     	    	    state._fsp--;
@@ -11434,14 +12728,14 @@
                     	    	    break;
 
                     	    	default :
-                    	    	    break loop106;
+                    	    	    break loop144;
                     	        }
                     	    } while (true);
 
-                    	    otherlv_39=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleReferenceCS8535); if (state.failed) return current;
+                    	    otherlv_47=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleReferenceCS9937); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_39, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_3());
+                    	          	newLeafNode(otherlv_47, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_3());
                     	          
                     	    }
 
@@ -11451,27 +12745,27 @@
                     	    }
                     	    break;
                     	case 3 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3927:6: (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4158:6: (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3927:6: (otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';' )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3927:8: otherlv_40= 'derivation' ( ruleUnrestrictedName )? otherlv_42= ':' ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )? otherlv_44= ';'
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4158:6: (otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4158:8: otherlv_48= 'derivation' ( ruleUnrestrictedName )? otherlv_50= ':' ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )? otherlv_52= ';'
                     	    {
-                    	    otherlv_40=(Token)match(input,27,FollowSets000.FOLLOW_27_in_ruleReferenceCS8555); if (state.failed) return current;
+                    	    otherlv_48=(Token)match(input,27,FollowSets000.FOLLOW_27_in_ruleReferenceCS9957); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_40, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0());
+                    	          	newLeafNode(otherlv_48, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3931:1: ( ruleUnrestrictedName )?
-                    	    int alt107=2;
-                    	    int LA107_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4162:1: ( ruleUnrestrictedName )?
+                    	    int alt145=2;
+                    	    int LA145_0 = input.LA(1);
 
-                    	    if ( ((LA107_0>=RULE_SIMPLE_ID && LA107_0<=RULE_ESCAPED_ID)||LA107_0==17||(LA107_0>=19 && LA107_0<=54)||LA107_0==59||LA107_0==72||(LA107_0>=74 && LA107_0<=75)||LA107_0==80) ) {
-                    	        alt107=1;
+                    	    if ( ((LA145_0>=RULE_SIMPLE_ID && LA145_0<=RULE_ESCAPED_ID)||LA145_0==17||(LA145_0>=19 && LA145_0<=54)||LA145_0==59||LA145_0==72||(LA145_0>=74 && LA145_0<=75)||LA145_0==80) ) {
+                    	        alt145=1;
                     	    }
-                    	    switch (alt107) {
+                    	    switch (alt145) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3932:2: ruleUnrestrictedName
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4163:2: ruleUnrestrictedName
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
@@ -11483,7 +12777,7 @@
                     	                      newCompositeNode(grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()); 
                     	                  
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8575);
+                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS9977);
                     	            ruleUnrestrictedName();
 
                     	            state._fsp--;
@@ -11499,33 +12793,33 @@
 
                     	    }
 
-                    	    otherlv_42=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleReferenceCS8588); if (state.failed) return current;
+                    	    otherlv_50=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleReferenceCS9990); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_42, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2());
+                    	          	newLeafNode(otherlv_50, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3946:1: ( (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS ) )?
-                    	    int alt108=2;
-                    	    int LA108_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4177:1: ( (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS ) )?
+                    	    int alt146=2;
+                    	    int LA146_0 = input.LA(1);
 
-                    	    if ( ((LA108_0>=RULE_INT && LA108_0<=RULE_SINGLE_QUOTED_STRING)||(LA108_0>=RULE_UNQUOTED_STRING && LA108_0<=RULE_ESCAPED_ID)||(LA108_0>=17 && LA108_0<=55)||LA108_0==59||LA108_0==72||(LA108_0>=74 && LA108_0<=75)||LA108_0==80||(LA108_0>=83 && LA108_0<=84)||LA108_0==98||(LA108_0>=100 && LA108_0<=112)||(LA108_0>=115 && LA108_0<=119)||LA108_0==126||(LA108_0>=131 && LA108_0<=132)) ) {
-                    	        alt108=1;
+                    	    if ( ((LA146_0>=RULE_INT && LA146_0<=RULE_SINGLE_QUOTED_STRING)||(LA146_0>=RULE_UNQUOTED_STRING && LA146_0<=RULE_ESCAPED_ID)||(LA146_0>=17 && LA146_0<=55)||LA146_0==59||LA146_0==72||(LA146_0>=74 && LA146_0<=75)||LA146_0==80||(LA146_0>=83 && LA146_0<=84)||LA146_0==98||(LA146_0>=100 && LA146_0<=112)||(LA146_0>=115 && LA146_0<=119)||LA146_0==126||(LA146_0>=131 && LA146_0<=132)) ) {
+                    	        alt146=1;
                     	    }
-                    	    switch (alt108) {
+                    	    switch (alt146) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3947:1: (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4178:1: (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3947:1: (lv_ownedDefaultExpressions_43_0= ruleSpecificationCS )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3948:3: lv_ownedDefaultExpressions_43_0= ruleSpecificationCS
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4178:1: (lv_ownedDefaultExpressions_51_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4179:3: lv_ownedDefaultExpressions_51_0= ruleSpecificationCS
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
                     	              	        newCompositeNode(grammarAccess.getReferenceCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_7_0_1_2_3_0()); 
                     	              	    
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleReferenceCS8609);
-                    	            lv_ownedDefaultExpressions_43_0=ruleSpecificationCS();
+                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleReferenceCS10011);
+                    	            lv_ownedDefaultExpressions_51_0=ruleSpecificationCS();
 
                     	            state._fsp--;
                     	            if (state.failed) return current;
@@ -11537,7 +12831,7 @@
                     	                     		add(
                     	                     			current, 
                     	                     			"ownedDefaultExpressions",
-                    	                      		lv_ownedDefaultExpressions_43_0, 
+                    	                      		lv_ownedDefaultExpressions_51_0, 
                     	                      		"SpecificationCS");
                     	              	        afterParserOrEnumRuleCall();
                     	              	    
@@ -11551,10 +12845,10 @@
 
                     	    }
 
-                    	    otherlv_44=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleReferenceCS8622); if (state.failed) return current;
+                    	    otherlv_52=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleReferenceCS10024); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_44, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4());
+                    	          	newLeafNode(otherlv_52, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4());
                     	          
                     	    }
 
@@ -11564,27 +12858,27 @@
                     	    }
                     	    break;
                     	case 4 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3969:6: (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4200:6: (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3969:6: (otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';' )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3969:8: otherlv_45= 'initial' ( ruleUnrestrictedName )? otherlv_47= ':' ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )? otherlv_49= ';'
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4200:6: (otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';' )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4200:8: otherlv_53= 'initial' ( ruleUnrestrictedName )? otherlv_55= ':' ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )? otherlv_57= ';'
                     	    {
-                    	    otherlv_45=(Token)match(input,33,FollowSets000.FOLLOW_33_in_ruleReferenceCS8642); if (state.failed) return current;
+                    	    otherlv_53=(Token)match(input,33,FollowSets000.FOLLOW_33_in_ruleReferenceCS10044); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_45, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0());
+                    	          	newLeafNode(otherlv_53, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3973:1: ( ruleUnrestrictedName )?
-                    	    int alt109=2;
-                    	    int LA109_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4204:1: ( ruleUnrestrictedName )?
+                    	    int alt147=2;
+                    	    int LA147_0 = input.LA(1);
 
-                    	    if ( ((LA109_0>=RULE_SIMPLE_ID && LA109_0<=RULE_ESCAPED_ID)||LA109_0==17||(LA109_0>=19 && LA109_0<=54)||LA109_0==59||LA109_0==72||(LA109_0>=74 && LA109_0<=75)||LA109_0==80) ) {
-                    	        alt109=1;
+                    	    if ( ((LA147_0>=RULE_SIMPLE_ID && LA147_0<=RULE_ESCAPED_ID)||LA147_0==17||(LA147_0>=19 && LA147_0<=54)||LA147_0==59||LA147_0==72||(LA147_0>=74 && LA147_0<=75)||LA147_0==80) ) {
+                    	        alt147=1;
                     	    }
-                    	    switch (alt109) {
+                    	    switch (alt147) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3974:2: ruleUnrestrictedName
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4205:2: ruleUnrestrictedName
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
@@ -11596,7 +12890,7 @@
                     	                      newCompositeNode(grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()); 
                     	                  
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8662);
+                    	            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS10064);
                     	            ruleUnrestrictedName();
 
                     	            state._fsp--;
@@ -11612,33 +12906,33 @@
 
                     	    }
 
-                    	    otherlv_47=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleReferenceCS8675); if (state.failed) return current;
+                    	    otherlv_55=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleReferenceCS10077); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_47, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2());
+                    	          	newLeafNode(otherlv_55, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3988:1: ( (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS ) )?
-                    	    int alt110=2;
-                    	    int LA110_0 = input.LA(1);
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4219:1: ( (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS ) )?
+                    	    int alt148=2;
+                    	    int LA148_0 = input.LA(1);
 
-                    	    if ( ((LA110_0>=RULE_INT && LA110_0<=RULE_SINGLE_QUOTED_STRING)||(LA110_0>=RULE_UNQUOTED_STRING && LA110_0<=RULE_ESCAPED_ID)||(LA110_0>=17 && LA110_0<=55)||LA110_0==59||LA110_0==72||(LA110_0>=74 && LA110_0<=75)||LA110_0==80||(LA110_0>=83 && LA110_0<=84)||LA110_0==98||(LA110_0>=100 && LA110_0<=112)||(LA110_0>=115 && LA110_0<=119)||LA110_0==126||(LA110_0>=131 && LA110_0<=132)) ) {
-                    	        alt110=1;
+                    	    if ( ((LA148_0>=RULE_INT && LA148_0<=RULE_SINGLE_QUOTED_STRING)||(LA148_0>=RULE_UNQUOTED_STRING && LA148_0<=RULE_ESCAPED_ID)||(LA148_0>=17 && LA148_0<=55)||LA148_0==59||LA148_0==72||(LA148_0>=74 && LA148_0<=75)||LA148_0==80||(LA148_0>=83 && LA148_0<=84)||LA148_0==98||(LA148_0>=100 && LA148_0<=112)||(LA148_0>=115 && LA148_0<=119)||LA148_0==126||(LA148_0>=131 && LA148_0<=132)) ) {
+                    	        alt148=1;
                     	    }
-                    	    switch (alt110) {
+                    	    switch (alt148) {
                     	        case 1 :
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3989:1: (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4220:1: (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS )
                     	            {
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3989:1: (lv_ownedDefaultExpressions_48_0= ruleSpecificationCS )
-                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3990:3: lv_ownedDefaultExpressions_48_0= ruleSpecificationCS
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4220:1: (lv_ownedDefaultExpressions_56_0= ruleSpecificationCS )
+                    	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4221:3: lv_ownedDefaultExpressions_56_0= ruleSpecificationCS
                     	            {
                     	            if ( state.backtracking==0 ) {
                     	               
                     	              	        newCompositeNode(grammarAccess.getReferenceCSAccess().getOwnedDefaultExpressionsSpecificationCSParserRuleCall_7_0_1_3_3_0()); 
                     	              	    
                     	            }
-                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleReferenceCS8696);
-                    	            lv_ownedDefaultExpressions_48_0=ruleSpecificationCS();
+                    	            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_ruleReferenceCS10098);
+                    	            lv_ownedDefaultExpressions_56_0=ruleSpecificationCS();
 
                     	            state._fsp--;
                     	            if (state.failed) return current;
@@ -11650,7 +12944,7 @@
                     	                     		add(
                     	                     			current, 
                     	                     			"ownedDefaultExpressions",
-                    	                      		lv_ownedDefaultExpressions_48_0, 
+                    	                      		lv_ownedDefaultExpressions_56_0, 
                     	                      		"SpecificationCS");
                     	              	        afterParserOrEnumRuleCall();
                     	              	    
@@ -11664,10 +12958,10 @@
 
                     	    }
 
-                    	    otherlv_49=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleReferenceCS8709); if (state.failed) return current;
+                    	    otherlv_57=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleReferenceCS10111); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
-                    	          	newLeafNode(otherlv_49, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4());
+                    	          	newLeafNode(otherlv_57, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4());
                     	          
                     	    }
 
@@ -11678,14 +12972,14 @@
                     	    break;
 
                     	default :
-                    	    break loop111;
+                    	    break loop149;
                         }
                     } while (true);
 
-                    otherlv_50=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleReferenceCS8724); if (state.failed) return current;
+                    otherlv_58=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleReferenceCS10126); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_50, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_7_0_2());
+                          	newLeafNode(otherlv_58, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_7_0_2());
                           
                     }
 
@@ -11695,12 +12989,12 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4015:7: otherlv_51= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4246:7: otherlv_59= ';'
                     {
-                    otherlv_51=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleReferenceCS8743); if (state.failed) return current;
+                    otherlv_59=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleReferenceCS10145); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                          	newLeafNode(otherlv_51, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_1());
+                          	newLeafNode(otherlv_59, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_1());
                           
                     }
 
@@ -11725,6 +13019,9 @@
                 appendSkippedTokens();
             } 
         finally {
+
+            	myUnorderedGroupState.restore();
+
         }
         return current;
     }
@@ -11732,7 +13029,7 @@
 
 
     // $ANTLR start "entryRuleSpecificationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4027:1: entryRuleSpecificationCS returns [EObject current=null] : iv_ruleSpecificationCS= ruleSpecificationCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4261:1: entryRuleSpecificationCS returns [EObject current=null] : iv_ruleSpecificationCS= ruleSpecificationCS EOF ;
     public final EObject entryRuleSpecificationCS() throws RecognitionException {
         EObject current = null;
 
@@ -11740,13 +13037,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4028:2: (iv_ruleSpecificationCS= ruleSpecificationCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4029:2: iv_ruleSpecificationCS= ruleSpecificationCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4262:2: (iv_ruleSpecificationCS= ruleSpecificationCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4263:2: iv_ruleSpecificationCS= ruleSpecificationCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSpecificationCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_entryRuleSpecificationCS8780);
+            pushFollow(FollowSets000.FOLLOW_ruleSpecificationCS_in_entryRuleSpecificationCS10186);
             iv_ruleSpecificationCS=ruleSpecificationCS();
 
             state._fsp--;
@@ -11754,7 +13051,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleSpecificationCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSpecificationCS8790); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSpecificationCS10196); if (state.failed) return current;
 
             }
 
@@ -11772,7 +13069,7 @@
 
 
     // $ANTLR start "ruleSpecificationCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4036:1: ruleSpecificationCS returns [EObject current=null] : ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) | ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4270:1: ruleSpecificationCS returns [EObject current=null] : ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) | ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) ) ) ;
     public final EObject ruleSpecificationCS() throws RecognitionException {
         EObject current = null;
 
@@ -11783,42 +13080,42 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4039:28: ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) | ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4040:1: ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) | ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4273:28: ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) | ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4274:1: ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) | ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4040:1: ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) | ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) ) )
-            int alt113=2;
-            int LA113_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4274:1: ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) | ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) ) )
+            int alt151=2;
+            int LA151_0 = input.LA(1);
 
-            if ( ((LA113_0>=RULE_INT && LA113_0<=RULE_SINGLE_QUOTED_STRING)||(LA113_0>=RULE_SIMPLE_ID && LA113_0<=RULE_ESCAPED_ID)||(LA113_0>=17 && LA113_0<=55)||LA113_0==59||LA113_0==72||(LA113_0>=74 && LA113_0<=75)||LA113_0==80||(LA113_0>=83 && LA113_0<=84)||LA113_0==98||(LA113_0>=100 && LA113_0<=112)||(LA113_0>=115 && LA113_0<=119)||LA113_0==126||(LA113_0>=131 && LA113_0<=132)) ) {
-                alt113=1;
+            if ( ((LA151_0>=RULE_INT && LA151_0<=RULE_SINGLE_QUOTED_STRING)||(LA151_0>=RULE_SIMPLE_ID && LA151_0<=RULE_ESCAPED_ID)||(LA151_0>=17 && LA151_0<=55)||LA151_0==59||LA151_0==72||(LA151_0>=74 && LA151_0<=75)||LA151_0==80||(LA151_0>=83 && LA151_0<=84)||LA151_0==98||(LA151_0>=100 && LA151_0<=112)||(LA151_0>=115 && LA151_0<=119)||LA151_0==126||(LA151_0>=131 && LA151_0<=132)) ) {
+                alt151=1;
             }
-            else if ( (LA113_0==RULE_UNQUOTED_STRING) ) {
-                alt113=2;
+            else if ( (LA151_0==RULE_UNQUOTED_STRING) ) {
+                alt151=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 113, 0, input);
+                    new NoViableAltException("", 151, 0, input);
 
                 throw nvae;
             }
-            switch (alt113) {
+            switch (alt151) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4040:2: ( (lv_ownedExpression_0_0= ruleExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4274:2: ( (lv_ownedExpression_0_0= ruleExpCS ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4040:2: ( (lv_ownedExpression_0_0= ruleExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4041:1: (lv_ownedExpression_0_0= ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4274:2: ( (lv_ownedExpression_0_0= ruleExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4275:1: (lv_ownedExpression_0_0= ruleExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4041:1: (lv_ownedExpression_0_0= ruleExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4042:3: lv_ownedExpression_0_0= ruleExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4275:1: (lv_ownedExpression_0_0= ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4276:3: lv_ownedExpression_0_0= ruleExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getSpecificationCSAccess().getOwnedExpressionExpCSParserRuleCall_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleSpecificationCS8836);
+                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleSpecificationCS10242);
                     lv_ownedExpression_0_0=ruleExpCS();
 
                     state._fsp--;
@@ -11846,15 +13143,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4059:6: ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4293:6: ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4059:6: ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4060:1: (lv_exprString_1_0= RULE_UNQUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4293:6: ( (lv_exprString_1_0= RULE_UNQUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4294:1: (lv_exprString_1_0= RULE_UNQUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4060:1: (lv_exprString_1_0= RULE_UNQUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4061:3: lv_exprString_1_0= RULE_UNQUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4294:1: (lv_exprString_1_0= RULE_UNQUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4295:3: lv_exprString_1_0= RULE_UNQUOTED_STRING
                     {
-                    lv_exprString_1_0=(Token)match(input,RULE_UNQUOTED_STRING,FollowSets000.FOLLOW_RULE_UNQUOTED_STRING_in_ruleSpecificationCS8859); if (state.failed) return current;
+                    lv_exprString_1_0=(Token)match(input,RULE_UNQUOTED_STRING,FollowSets000.FOLLOW_RULE_UNQUOTED_STRING_in_ruleSpecificationCS10265); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       			newLeafNode(lv_exprString_1_0, grammarAccess.getSpecificationCSAccess().getExprStringUNQUOTED_STRINGTerminalRuleCall_1_0()); 
@@ -11904,7 +13201,7 @@
 
 
     // $ANTLR start "entryRuleStructuredClassCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4085:1: entryRuleStructuredClassCS returns [EObject current=null] : iv_ruleStructuredClassCS= ruleStructuredClassCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4319:1: entryRuleStructuredClassCS returns [EObject current=null] : iv_ruleStructuredClassCS= ruleStructuredClassCS EOF ;
     public final EObject entryRuleStructuredClassCS() throws RecognitionException {
         EObject current = null;
 
@@ -11912,13 +13209,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4086:2: (iv_ruleStructuredClassCS= ruleStructuredClassCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4087:2: iv_ruleStructuredClassCS= ruleStructuredClassCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4320:2: (iv_ruleStructuredClassCS= ruleStructuredClassCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4321:2: iv_ruleStructuredClassCS= ruleStructuredClassCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getStructuredClassCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleStructuredClassCS_in_entryRuleStructuredClassCS8900);
+            pushFollow(FollowSets000.FOLLOW_ruleStructuredClassCS_in_entryRuleStructuredClassCS10306);
             iv_ruleStructuredClassCS=ruleStructuredClassCS();
 
             state._fsp--;
@@ -11926,7 +13223,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleStructuredClassCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleStructuredClassCS8910); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleStructuredClassCS10316); if (state.failed) return current;
 
             }
 
@@ -11944,7 +13241,7 @@
 
 
     // $ANTLR start "ruleStructuredClassCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4094:1: ruleStructuredClassCS returns [EObject current=null] : ( ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4328:1: ruleStructuredClassCS returns [EObject current=null] : ( ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' ) ) ;
     public final EObject ruleStructuredClassCS() throws RecognitionException {
         EObject current = null;
 
@@ -11980,27 +13277,27 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4097:28: ( ( ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4098:1: ( ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4331:28: ( ( ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4332:1: ( ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4098:1: ( ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4098:2: ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4332:1: ( ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4332:2: ( (lv_isAbstract_0_0= 'abstract' ) )? otherlv_1= 'class' ( (lv_name_2_0= ruleUnrestrictedName ) ) ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )? (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )? (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )? (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )? ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4098:2: ( (lv_isAbstract_0_0= 'abstract' ) )?
-            int alt114=2;
-            int LA114_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4332:2: ( (lv_isAbstract_0_0= 'abstract' ) )?
+            int alt152=2;
+            int LA152_0 = input.LA(1);
 
-            if ( (LA114_0==19) ) {
-                alt114=1;
+            if ( (LA152_0==19) ) {
+                alt152=1;
             }
-            switch (alt114) {
+            switch (alt152) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4099:1: (lv_isAbstract_0_0= 'abstract' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4333:1: (lv_isAbstract_0_0= 'abstract' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4099:1: (lv_isAbstract_0_0= 'abstract' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4100:3: lv_isAbstract_0_0= 'abstract'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4333:1: (lv_isAbstract_0_0= 'abstract' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4334:3: lv_isAbstract_0_0= 'abstract'
                     {
-                    lv_isAbstract_0_0=(Token)match(input,19,FollowSets000.FOLLOW_19_in_ruleStructuredClassCS8953); if (state.failed) return current;
+                    lv_isAbstract_0_0=(Token)match(input,19,FollowSets000.FOLLOW_19_in_ruleStructuredClassCS10359); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               newLeafNode(lv_isAbstract_0_0, grammarAccess.getStructuredClassCSAccess().getIsAbstractAbstractKeyword_0_0());
@@ -12023,24 +13320,24 @@
 
             }
 
-            otherlv_1=(Token)match(input,23,FollowSets000.FOLLOW_23_in_ruleStructuredClassCS8979); if (state.failed) return current;
+            otherlv_1=(Token)match(input,23,FollowSets000.FOLLOW_23_in_ruleStructuredClassCS10385); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getStructuredClassCSAccess().getClassKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4117:1: ( (lv_name_2_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4118:1: (lv_name_2_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4351:1: ( (lv_name_2_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4352:1: (lv_name_2_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4118:1: (lv_name_2_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4119:3: lv_name_2_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4352:1: (lv_name_2_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4353:3: lv_name_2_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getStructuredClassCSAccess().getNameUnrestrictedNameParserRuleCall_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleStructuredClassCS9000);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleStructuredClassCS10406);
             lv_name_2_0=ruleUnrestrictedName();
 
             state._fsp--;
@@ -12064,26 +13361,26 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4135:2: ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )?
-            int alt115=2;
-            int LA115_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4369:2: ( (lv_ownedSignature_3_0= ruleTemplateSignatureCS ) )?
+            int alt153=2;
+            int LA153_0 = input.LA(1);
 
-            if ( (LA115_0==55||LA115_0==81) ) {
-                alt115=1;
+            if ( (LA153_0==55||LA153_0==81) ) {
+                alt153=1;
             }
-            switch (alt115) {
+            switch (alt153) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4136:1: (lv_ownedSignature_3_0= ruleTemplateSignatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4370:1: (lv_ownedSignature_3_0= ruleTemplateSignatureCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4136:1: (lv_ownedSignature_3_0= ruleTemplateSignatureCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4137:3: lv_ownedSignature_3_0= ruleTemplateSignatureCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4370:1: (lv_ownedSignature_3_0= ruleTemplateSignatureCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4371:3: lv_ownedSignature_3_0= ruleTemplateSignatureCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getStructuredClassCSAccess().getOwnedSignatureTemplateSignatureCSParserRuleCall_3_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_ruleStructuredClassCS9021);
+                    pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_ruleStructuredClassCS10427);
                     lv_ownedSignature_3_0=ruleTemplateSignatureCS();
 
                     state._fsp--;
@@ -12110,35 +13407,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4153:3: (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )?
-            int alt117=2;
-            int LA117_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4387:3: (otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )* )?
+            int alt155=2;
+            int LA155_0 = input.LA(1);
 
-            if ( (LA117_0==30) ) {
-                alt117=1;
+            if ( (LA155_0==30) ) {
+                alt155=1;
             }
-            switch (alt117) {
+            switch (alt155) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4153:5: otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )*
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4387:5: otherlv_4= 'extends' ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) ) (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )*
                     {
-                    otherlv_4=(Token)match(input,30,FollowSets000.FOLLOW_30_in_ruleStructuredClassCS9035); if (state.failed) return current;
+                    otherlv_4=(Token)match(input,30,FollowSets000.FOLLOW_30_in_ruleStructuredClassCS10441); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_4, grammarAccess.getStructuredClassCSAccess().getExtendsKeyword_4_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4157:1: ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4158:1: (lv_ownedSuperTypes_5_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4391:1: ( (lv_ownedSuperTypes_5_0= ruleTypedRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4392:1: (lv_ownedSuperTypes_5_0= ruleTypedRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4158:1: (lv_ownedSuperTypes_5_0= ruleTypedRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4159:3: lv_ownedSuperTypes_5_0= ruleTypedRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4392:1: (lv_ownedSuperTypes_5_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4393:3: lv_ownedSuperTypes_5_0= ruleTypedRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getStructuredClassCSAccess().getOwnedSuperTypesTypedRefCSParserRuleCall_4_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleStructuredClassCS9056);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleStructuredClassCS10462);
                     lv_ownedSuperTypes_5_0=ruleTypedRefCS();
 
                     state._fsp--;
@@ -12162,39 +13459,39 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4175:2: (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )*
-                    loop116:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4409:2: (otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) ) )*
+                    loop154:
                     do {
-                        int alt116=2;
-                        int LA116_0 = input.LA(1);
+                        int alt154=2;
+                        int LA154_0 = input.LA(1);
 
-                        if ( (LA116_0==60) ) {
-                            alt116=1;
+                        if ( (LA154_0==60) ) {
+                            alt154=1;
                         }
 
 
-                        switch (alt116) {
+                        switch (alt154) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4175:4: otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4409:4: otherlv_6= ',' ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) )
                     	    {
-                    	    otherlv_6=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleStructuredClassCS9069); if (state.failed) return current;
+                    	    otherlv_6=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleStructuredClassCS10475); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_6, grammarAccess.getStructuredClassCSAccess().getCommaKeyword_4_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4179:1: ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4180:1: (lv_ownedSuperTypes_7_0= ruleTypedRefCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4413:1: ( (lv_ownedSuperTypes_7_0= ruleTypedRefCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4414:1: (lv_ownedSuperTypes_7_0= ruleTypedRefCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4180:1: (lv_ownedSuperTypes_7_0= ruleTypedRefCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4181:3: lv_ownedSuperTypes_7_0= ruleTypedRefCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4414:1: (lv_ownedSuperTypes_7_0= ruleTypedRefCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4415:3: lv_ownedSuperTypes_7_0= ruleTypedRefCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getStructuredClassCSAccess().getOwnedSuperTypesTypedRefCSParserRuleCall_4_2_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleStructuredClassCS9090);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleStructuredClassCS10496);
                     	    lv_ownedSuperTypes_7_0=ruleTypedRefCS();
 
                     	    state._fsp--;
@@ -12223,7 +13520,7 @@
                     	    break;
 
                     	default :
-                    	    break loop116;
+                    	    break loop154;
                         }
                     } while (true);
 
@@ -12233,30 +13530,30 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4197:6: (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )?
-            int alt118=2;
-            int LA118_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4431:6: (otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) ) )?
+            int alt156=2;
+            int LA156_0 = input.LA(1);
 
-            if ( (LA118_0==57) ) {
-                alt118=1;
+            if ( (LA156_0==57) ) {
+                alt156=1;
             }
-            switch (alt118) {
+            switch (alt156) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4197:8: otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4431:8: otherlv_8= ':' ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) )
                     {
-                    otherlv_8=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleStructuredClassCS9107); if (state.failed) return current;
+                    otherlv_8=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleStructuredClassCS10513); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_8, grammarAccess.getStructuredClassCSAccess().getColonKeyword_5_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4201:1: ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4202:1: (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4435:1: ( (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4436:1: (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4202:1: (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4203:3: lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4436:1: (lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4437:3: lv_instanceClassName_9_0= RULE_SINGLE_QUOTED_STRING
                     {
-                    lv_instanceClassName_9_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleStructuredClassCS9124); if (state.failed) return current;
+                    lv_instanceClassName_9_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleStructuredClassCS10530); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       			newLeafNode(lv_instanceClassName_9_0, grammarAccess.getStructuredClassCSAccess().getInstanceClassNameSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0()); 
@@ -12286,49 +13583,49 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4219:4: (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )?
-            int alt120=2;
-            int LA120_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4453:4: (otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}' )?
+            int alt158=2;
+            int LA158_0 = input.LA(1);
 
-            if ( (LA120_0==61) ) {
-                int LA120_1 = input.LA(2);
+            if ( (LA158_0==61) ) {
+                int LA158_1 = input.LA(2);
 
-                if ( (LA120_1==34) ) {
-                    alt120=1;
+                if ( (LA158_1==34) ) {
+                    alt158=1;
                 }
-                else if ( (LA120_1==62) ) {
-                    int LA120_4 = input.LA(3);
+                else if ( (LA158_1==62) ) {
+                    int LA158_4 = input.LA(3);
 
-                    if ( (LA120_4==58||LA120_4==61) ) {
-                        alt120=1;
+                    if ( (LA158_4==58||LA158_4==61) ) {
+                        alt158=1;
                     }
                 }
             }
-            switch (alt120) {
+            switch (alt158) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4219:6: otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4453:6: otherlv_10= '{' ( (lv_isInterface_11_0= 'interface' ) )? otherlv_12= '}'
                     {
-                    otherlv_10=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleStructuredClassCS9144); if (state.failed) return current;
+                    otherlv_10=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleStructuredClassCS10550); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_10, grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_6_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4223:1: ( (lv_isInterface_11_0= 'interface' ) )?
-                    int alt119=2;
-                    int LA119_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4457:1: ( (lv_isInterface_11_0= 'interface' ) )?
+                    int alt157=2;
+                    int LA157_0 = input.LA(1);
 
-                    if ( (LA119_0==34) ) {
-                        alt119=1;
+                    if ( (LA157_0==34) ) {
+                        alt157=1;
                     }
-                    switch (alt119) {
+                    switch (alt157) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4224:1: (lv_isInterface_11_0= 'interface' )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4458:1: (lv_isInterface_11_0= 'interface' )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4224:1: (lv_isInterface_11_0= 'interface' )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4225:3: lv_isInterface_11_0= 'interface'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4458:1: (lv_isInterface_11_0= 'interface' )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4459:3: lv_isInterface_11_0= 'interface'
                             {
-                            lv_isInterface_11_0=(Token)match(input,34,FollowSets000.FOLLOW_34_in_ruleStructuredClassCS9162); if (state.failed) return current;
+                            lv_isInterface_11_0=(Token)match(input,34,FollowSets000.FOLLOW_34_in_ruleStructuredClassCS10568); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                       newLeafNode(lv_isInterface_11_0, grammarAccess.getStructuredClassCSAccess().getIsInterfaceInterfaceKeyword_6_1_0());
@@ -12351,7 +13648,7 @@
 
                     }
 
-                    otherlv_12=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleStructuredClassCS9188); if (state.failed) return current;
+                    otherlv_12=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleStructuredClassCS10594); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_12, grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_6_2());
@@ -12363,57 +13660,57 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4242:3: ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' )
-            int alt122=2;
-            int LA122_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4476:3: ( (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' ) | otherlv_19= ';' )
+            int alt160=2;
+            int LA160_0 = input.LA(1);
 
-            if ( (LA122_0==61) ) {
-                alt122=1;
+            if ( (LA160_0==61) ) {
+                alt160=1;
             }
-            else if ( (LA122_0==58) ) {
-                alt122=2;
+            else if ( (LA160_0==58) ) {
+                alt160=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 122, 0, input);
+                    new NoViableAltException("", 160, 0, input);
 
                 throw nvae;
             }
-            switch (alt122) {
+            switch (alt160) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4242:4: (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4476:4: (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4242:4: (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4242:6: otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4476:4: (otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4476:6: otherlv_13= '{' ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )* otherlv_18= '}'
                     {
-                    otherlv_13=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleStructuredClassCS9204); if (state.failed) return current;
+                    otherlv_13=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleStructuredClassCS10610); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_13, grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_7_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4246:1: ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )*
-                    loop121:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4480:1: ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )*
+                    loop159:
                     do {
-                        int alt121=5;
-                        alt121 = dfa121.predict(input);
-                        switch (alt121) {
+                        int alt159=5;
+                        alt159 = dfa159.predict(input);
+                        switch (alt159) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4246:2: ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4480:2: ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4246:2: ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4247:1: (lv_ownedAnnotations_14_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4480:2: ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4481:1: (lv_ownedAnnotations_14_0= ruleAnnotationElementCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4247:1: (lv_ownedAnnotations_14_0= ruleAnnotationElementCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4248:3: lv_ownedAnnotations_14_0= ruleAnnotationElementCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4481:1: (lv_ownedAnnotations_14_0= ruleAnnotationElementCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4482:3: lv_ownedAnnotations_14_0= ruleAnnotationElementCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getStructuredClassCSAccess().getOwnedAnnotationsAnnotationElementCSParserRuleCall_7_0_1_0_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleStructuredClassCS9226);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAnnotationElementCS_in_ruleStructuredClassCS10632);
                     	    lv_ownedAnnotations_14_0=ruleAnnotationElementCS();
 
                     	    state._fsp--;
@@ -12441,20 +13738,20 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4265:6: ( (lv_ownedOperations_15_0= ruleOperationCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4499:6: ( (lv_ownedOperations_15_0= ruleOperationCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4265:6: ( (lv_ownedOperations_15_0= ruleOperationCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4266:1: (lv_ownedOperations_15_0= ruleOperationCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4499:6: ( (lv_ownedOperations_15_0= ruleOperationCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4500:1: (lv_ownedOperations_15_0= ruleOperationCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4266:1: (lv_ownedOperations_15_0= ruleOperationCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4267:3: lv_ownedOperations_15_0= ruleOperationCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4500:1: (lv_ownedOperations_15_0= ruleOperationCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4501:3: lv_ownedOperations_15_0= ruleOperationCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getStructuredClassCSAccess().getOwnedOperationsOperationCSParserRuleCall_7_0_1_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleOperationCS_in_ruleStructuredClassCS9253);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleOperationCS_in_ruleStructuredClassCS10659);
                     	    lv_ownedOperations_15_0=ruleOperationCS();
 
                     	    state._fsp--;
@@ -12482,20 +13779,20 @@
                     	    }
                     	    break;
                     	case 3 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4284:6: ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4518:6: ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4284:6: ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4285:1: (lv_ownedProperties_16_0= ruleStructuralFeatureCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4518:6: ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4519:1: (lv_ownedProperties_16_0= ruleStructuralFeatureCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4285:1: (lv_ownedProperties_16_0= ruleStructuralFeatureCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4286:3: lv_ownedProperties_16_0= ruleStructuralFeatureCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4519:1: (lv_ownedProperties_16_0= ruleStructuralFeatureCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4520:3: lv_ownedProperties_16_0= ruleStructuralFeatureCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getStructuredClassCSAccess().getOwnedPropertiesStructuralFeatureCSParserRuleCall_7_0_1_2_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleStructuralFeatureCS_in_ruleStructuredClassCS9280);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleStructuralFeatureCS_in_ruleStructuredClassCS10686);
                     	    lv_ownedProperties_16_0=ruleStructuralFeatureCS();
 
                     	    state._fsp--;
@@ -12523,20 +13820,20 @@
                     	    }
                     	    break;
                     	case 4 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4303:6: ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4537:6: ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4303:6: ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4304:1: (lv_ownedConstraints_17_0= ruleInvariantConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4537:6: ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4538:1: (lv_ownedConstraints_17_0= ruleInvariantConstraintCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4304:1: (lv_ownedConstraints_17_0= ruleInvariantConstraintCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4305:3: lv_ownedConstraints_17_0= ruleInvariantConstraintCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4538:1: (lv_ownedConstraints_17_0= ruleInvariantConstraintCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4539:3: lv_ownedConstraints_17_0= ruleInvariantConstraintCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getStructuredClassCSAccess().getOwnedConstraintsInvariantConstraintCSParserRuleCall_7_0_1_3_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleInvariantConstraintCS_in_ruleStructuredClassCS9307);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleInvariantConstraintCS_in_ruleStructuredClassCS10713);
                     	    lv_ownedConstraints_17_0=ruleInvariantConstraintCS();
 
                     	    state._fsp--;
@@ -12565,11 +13862,11 @@
                     	    break;
 
                     	default :
-                    	    break loop121;
+                    	    break loop159;
                         }
                     } while (true);
 
-                    otherlv_18=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleStructuredClassCS9321); if (state.failed) return current;
+                    otherlv_18=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleStructuredClassCS10727); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_18, grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_7_0_2());
@@ -12582,9 +13879,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4326:7: otherlv_19= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4560:7: otherlv_19= ';'
                     {
-                    otherlv_19=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleStructuredClassCS9340); if (state.failed) return current;
+                    otherlv_19=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleStructuredClassCS10746); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_19, grammarAccess.getStructuredClassCSAccess().getSemicolonKeyword_7_1());
@@ -12619,7 +13916,7 @@
 
 
     // $ANTLR start "entryRuleStructuralFeatureCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4338:1: entryRuleStructuralFeatureCS returns [EObject current=null] : iv_ruleStructuralFeatureCS= ruleStructuralFeatureCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4572:1: entryRuleStructuralFeatureCS returns [EObject current=null] : iv_ruleStructuralFeatureCS= ruleStructuralFeatureCS EOF ;
     public final EObject entryRuleStructuralFeatureCS() throws RecognitionException {
         EObject current = null;
 
@@ -12627,13 +13924,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4339:2: (iv_ruleStructuralFeatureCS= ruleStructuralFeatureCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4340:2: iv_ruleStructuralFeatureCS= ruleStructuralFeatureCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4573:2: (iv_ruleStructuralFeatureCS= ruleStructuralFeatureCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4574:2: iv_ruleStructuralFeatureCS= ruleStructuralFeatureCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getStructuralFeatureCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleStructuralFeatureCS_in_entryRuleStructuralFeatureCS9377);
+            pushFollow(FollowSets000.FOLLOW_ruleStructuralFeatureCS_in_entryRuleStructuralFeatureCS10783);
             iv_ruleStructuralFeatureCS=ruleStructuralFeatureCS();
 
             state._fsp--;
@@ -12641,7 +13938,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleStructuralFeatureCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleStructuralFeatureCS9387); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleStructuralFeatureCS10793); if (state.failed) return current;
 
             }
 
@@ -12659,7 +13956,7 @@
 
 
     // $ANTLR start "ruleStructuralFeatureCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4347:1: ruleStructuralFeatureCS returns [EObject current=null] : (this_AttributeCS_0= ruleAttributeCS | this_ReferenceCS_1= ruleReferenceCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4581:1: ruleStructuralFeatureCS returns [EObject current=null] : (this_AttributeCS_0= ruleAttributeCS | this_ReferenceCS_1= ruleReferenceCS ) ;
     public final EObject ruleStructuralFeatureCS() throws RecognitionException {
         EObject current = null;
 
@@ -12671,117 +13968,15 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4350:28: ( (this_AttributeCS_0= ruleAttributeCS | this_ReferenceCS_1= ruleReferenceCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4351:1: (this_AttributeCS_0= ruleAttributeCS | this_ReferenceCS_1= ruleReferenceCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4584:28: ( (this_AttributeCS_0= ruleAttributeCS | this_ReferenceCS_1= ruleReferenceCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4585:1: (this_AttributeCS_0= ruleAttributeCS | this_ReferenceCS_1= ruleReferenceCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4351:1: (this_AttributeCS_0= ruleAttributeCS | this_ReferenceCS_1= ruleReferenceCS )
-            int alt123=2;
-            switch ( input.LA(1) ) {
-            case 47:
-                {
-                switch ( input.LA(2) ) {
-                case 26:
-                    {
-                    int LA123_5 = input.LA(3);
-
-                    if ( (LA123_5==43) ) {
-                        alt123=2;
-                    }
-                    else if ( (LA123_5==20) ) {
-                        alt123=1;
-                    }
-                    else {
-                        if (state.backtracking>0) {state.failed=true; return current;}
-                        NoViableAltException nvae =
-                            new NoViableAltException("", 123, 5, input);
-
-                        throw nvae;
-                    }
-                    }
-                    break;
-                case 20:
-                    {
-                    alt123=1;
-                    }
-                    break;
-                case 43:
-                    {
-                    alt123=2;
-                    }
-                    break;
-                default:
-                    if (state.backtracking>0) {state.failed=true; return current;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("", 123, 1, input);
-
-                    throw nvae;
-                }
-
-                }
-                break;
-            case 26:
-                {
-                switch ( input.LA(2) ) {
-                case 47:
-                    {
-                    int LA123_6 = input.LA(3);
-
-                    if ( (LA123_6==43) ) {
-                        alt123=2;
-                    }
-                    else if ( (LA123_6==20) ) {
-                        alt123=1;
-                    }
-                    else {
-                        if (state.backtracking>0) {state.failed=true; return current;}
-                        NoViableAltException nvae =
-                            new NoViableAltException("", 123, 6, input);
-
-                        throw nvae;
-                    }
-                    }
-                    break;
-                case 20:
-                    {
-                    alt123=1;
-                    }
-                    break;
-                case 43:
-                    {
-                    alt123=2;
-                    }
-                    break;
-                default:
-                    if (state.backtracking>0) {state.failed=true; return current;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("", 123, 2, input);
-
-                    throw nvae;
-                }
-
-                }
-                break;
-            case 20:
-                {
-                alt123=1;
-                }
-                break;
-            case 43:
-                {
-                alt123=2;
-                }
-                break;
-            default:
-                if (state.backtracking>0) {state.failed=true; return current;}
-                NoViableAltException nvae =
-                    new NoViableAltException("", 123, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt123) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4585:1: (this_AttributeCS_0= ruleAttributeCS | this_ReferenceCS_1= ruleReferenceCS )
+            int alt161=2;
+            alt161 = dfa161.predict(input);
+            switch (alt161) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4352:2: this_AttributeCS_0= ruleAttributeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4586:2: this_AttributeCS_0= ruleAttributeCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -12793,7 +13988,7 @@
                               newCompositeNode(grammarAccess.getStructuralFeatureCSAccess().getAttributeCSParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleAttributeCS_in_ruleStructuralFeatureCS9437);
+                    pushFollow(FollowSets000.FOLLOW_ruleAttributeCS_in_ruleStructuralFeatureCS10843);
                     this_AttributeCS_0=ruleAttributeCS();
 
                     state._fsp--;
@@ -12808,7 +14003,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4365:2: this_ReferenceCS_1= ruleReferenceCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4599:2: this_ReferenceCS_1= ruleReferenceCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -12820,7 +14015,7 @@
                               newCompositeNode(grammarAccess.getStructuralFeatureCSAccess().getReferenceCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleReferenceCS_in_ruleStructuralFeatureCS9467);
+                    pushFollow(FollowSets000.FOLLOW_ruleReferenceCS_in_ruleStructuralFeatureCS10873);
                     this_ReferenceCS_1=ruleReferenceCS();
 
                     state._fsp--;
@@ -12857,7 +14052,7 @@
 
 
     // $ANTLR start "entryRuleSysMLCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4384:1: entryRuleSysMLCS returns [EObject current=null] : iv_ruleSysMLCS= ruleSysMLCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4618:1: entryRuleSysMLCS returns [EObject current=null] : iv_ruleSysMLCS= ruleSysMLCS EOF ;
     public final EObject entryRuleSysMLCS() throws RecognitionException {
         EObject current = null;
 
@@ -12865,13 +14060,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4385:2: (iv_ruleSysMLCS= ruleSysMLCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4386:2: iv_ruleSysMLCS= ruleSysMLCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4619:2: (iv_ruleSysMLCS= ruleSysMLCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4620:2: iv_ruleSysMLCS= ruleSysMLCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSysMLCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleSysMLCS_in_entryRuleSysMLCS9502);
+            pushFollow(FollowSets000.FOLLOW_ruleSysMLCS_in_entryRuleSysMLCS10908);
             iv_ruleSysMLCS=ruleSysMLCS();
 
             state._fsp--;
@@ -12879,7 +14074,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleSysMLCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSysMLCS9512); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSysMLCS10918); if (state.failed) return current;
 
             }
 
@@ -12897,7 +14092,7 @@
 
 
     // $ANTLR start "ruleSysMLCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4393:1: ruleSysMLCS returns [EObject current=null] : ( () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4627:1: ruleSysMLCS returns [EObject current=null] : ( () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) ) ) ;
     public final EObject ruleSysMLCS() throws RecognitionException {
         EObject current = null;
 
@@ -12914,14 +14109,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4396:28: ( ( () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4397:1: ( () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4630:28: ( ( () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4631:1: ( () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4397:1: ( () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4397:2: () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4631:1: ( () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4631:2: () otherlv_1= 'sysml' ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4397:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4398:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4631:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4632:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -12938,48 +14133,48 @@
 
             }
 
-            otherlv_1=(Token)match(input,80,FollowSets000.FOLLOW_80_in_ruleSysMLCS9561); if (state.failed) return current;
+            otherlv_1=(Token)match(input,80,FollowSets000.FOLLOW_80_in_ruleSysMLCS10967); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getSysMLCSAccess().getSysmlKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4410:1: ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) )
-            int alt125=2;
-            int LA125_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4644:1: ( ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' ) | (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' ) )
+            int alt163=2;
+            int LA163_0 = input.LA(1);
 
-            if ( (LA125_0==RULE_SINGLE_QUOTED_STRING||(LA125_0>=RULE_SIMPLE_ID && LA125_0<=RULE_ESCAPED_ID)||LA125_0==17||(LA125_0>=19 && LA125_0<=54)||LA125_0==59||LA125_0==72||(LA125_0>=74 && LA125_0<=75)||LA125_0==80) ) {
-                alt125=1;
+            if ( (LA163_0==RULE_SINGLE_QUOTED_STRING||(LA163_0>=RULE_SIMPLE_ID && LA163_0<=RULE_ESCAPED_ID)||LA163_0==17||(LA163_0>=19 && LA163_0<=54)||LA163_0==59||LA163_0==72||(LA163_0>=74 && LA163_0<=75)||LA163_0==80) ) {
+                alt163=1;
             }
-            else if ( (LA125_0==61) ) {
-                alt125=2;
+            else if ( (LA163_0==61) ) {
+                alt163=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 125, 0, input);
+                    new NoViableAltException("", 163, 0, input);
 
                 throw nvae;
             }
-            switch (alt125) {
+            switch (alt163) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4410:2: ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4644:2: ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4410:2: ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4410:3: ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4644:2: ( ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4644:3: ( (lv_ownedDetails_2_0= ruleDetailCS ) ) otherlv_3= ';'
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4410:3: ( (lv_ownedDetails_2_0= ruleDetailCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4411:1: (lv_ownedDetails_2_0= ruleDetailCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4644:3: ( (lv_ownedDetails_2_0= ruleDetailCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4645:1: (lv_ownedDetails_2_0= ruleDetailCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4411:1: (lv_ownedDetails_2_0= ruleDetailCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4412:3: lv_ownedDetails_2_0= ruleDetailCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4645:1: (lv_ownedDetails_2_0= ruleDetailCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4646:3: lv_ownedDetails_2_0= ruleDetailCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getSysMLCSAccess().getOwnedDetailsDetailCSParserRuleCall_2_0_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_ruleSysMLCS9584);
+                    pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_ruleSysMLCS10990);
                     lv_ownedDetails_2_0=ruleDetailCS();
 
                     state._fsp--;
@@ -13003,7 +14198,7 @@
 
                     }
 
-                    otherlv_3=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleSysMLCS9596); if (state.failed) return current;
+                    otherlv_3=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleSysMLCS11002); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_3, grammarAccess.getSysMLCSAccess().getSemicolonKeyword_2_0_1());
@@ -13016,44 +14211,44 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4433:6: (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4667:6: (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4433:6: (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4433:8: otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4667:6: (otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4667:8: otherlv_4= '{' ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )* otherlv_7= '}'
                     {
-                    otherlv_4=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleSysMLCS9616); if (state.failed) return current;
+                    otherlv_4=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleSysMLCS11022); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_4, grammarAccess.getSysMLCSAccess().getLeftCurlyBracketKeyword_2_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4437:1: ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )*
-                    loop124:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4671:1: ( ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';' )*
+                    loop162:
                     do {
-                        int alt124=2;
-                        int LA124_0 = input.LA(1);
+                        int alt162=2;
+                        int LA162_0 = input.LA(1);
 
-                        if ( (LA124_0==RULE_SINGLE_QUOTED_STRING||(LA124_0>=RULE_SIMPLE_ID && LA124_0<=RULE_ESCAPED_ID)||LA124_0==17||(LA124_0>=19 && LA124_0<=54)||LA124_0==59||LA124_0==72||(LA124_0>=74 && LA124_0<=75)||LA124_0==80) ) {
-                            alt124=1;
+                        if ( (LA162_0==RULE_SINGLE_QUOTED_STRING||(LA162_0>=RULE_SIMPLE_ID && LA162_0<=RULE_ESCAPED_ID)||LA162_0==17||(LA162_0>=19 && LA162_0<=54)||LA162_0==59||LA162_0==72||(LA162_0>=74 && LA162_0<=75)||LA162_0==80) ) {
+                            alt162=1;
                         }
 
 
-                        switch (alt124) {
+                        switch (alt162) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4437:2: ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';'
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4671:2: ( (lv_ownedDetails_5_0= ruleDetailCS ) ) otherlv_6= ';'
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4437:2: ( (lv_ownedDetails_5_0= ruleDetailCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4438:1: (lv_ownedDetails_5_0= ruleDetailCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4671:2: ( (lv_ownedDetails_5_0= ruleDetailCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4672:1: (lv_ownedDetails_5_0= ruleDetailCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4438:1: (lv_ownedDetails_5_0= ruleDetailCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4439:3: lv_ownedDetails_5_0= ruleDetailCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4672:1: (lv_ownedDetails_5_0= ruleDetailCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4673:3: lv_ownedDetails_5_0= ruleDetailCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getSysMLCSAccess().getOwnedDetailsDetailCSParserRuleCall_2_1_1_0_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_ruleSysMLCS9638);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleDetailCS_in_ruleSysMLCS11044);
                     	    lv_ownedDetails_5_0=ruleDetailCS();
 
                     	    state._fsp--;
@@ -13077,7 +14272,7 @@
 
                     	    }
 
-                    	    otherlv_6=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleSysMLCS9650); if (state.failed) return current;
+                    	    otherlv_6=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleSysMLCS11056); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_6, grammarAccess.getSysMLCSAccess().getSemicolonKeyword_2_1_1_1());
@@ -13088,11 +14283,11 @@
                     	    break;
 
                     	default :
-                    	    break loop124;
+                    	    break loop162;
                         }
                     } while (true);
 
-                    otherlv_7=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleSysMLCS9664); if (state.failed) return current;
+                    otherlv_7=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleSysMLCS11070); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_7, grammarAccess.getSysMLCSAccess().getRightCurlyBracketKeyword_2_1_2());
@@ -13130,7 +14325,7 @@
 
 
     // $ANTLR start "entryRuleTypedMultiplicityRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4473:1: entryRuleTypedMultiplicityRefCS returns [EObject current=null] : iv_ruleTypedMultiplicityRefCS= ruleTypedMultiplicityRefCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4707:1: entryRuleTypedMultiplicityRefCS returns [EObject current=null] : iv_ruleTypedMultiplicityRefCS= ruleTypedMultiplicityRefCS EOF ;
     public final EObject entryRuleTypedMultiplicityRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -13138,13 +14333,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4474:2: (iv_ruleTypedMultiplicityRefCS= ruleTypedMultiplicityRefCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4475:2: iv_ruleTypedMultiplicityRefCS= ruleTypedMultiplicityRefCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4708:2: (iv_ruleTypedMultiplicityRefCS= ruleTypedMultiplicityRefCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4709:2: iv_ruleTypedMultiplicityRefCS= ruleTypedMultiplicityRefCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypedMultiplicityRefCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_entryRuleTypedMultiplicityRefCS9704);
+            pushFollow(FollowSets000.FOLLOW_ruleTypedMultiplicityRefCS_in_entryRuleTypedMultiplicityRefCS11110);
             iv_ruleTypedMultiplicityRefCS=ruleTypedMultiplicityRefCS();
 
             state._fsp--;
@@ -13152,7 +14347,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypedMultiplicityRefCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypedMultiplicityRefCS9714); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypedMultiplicityRefCS11120); if (state.failed) return current;
 
             }
 
@@ -13170,7 +14365,7 @@
 
 
     // $ANTLR start "ruleTypedMultiplicityRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4482:1: ruleTypedMultiplicityRefCS returns [EObject current=null] : (this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4716:1: ruleTypedMultiplicityRefCS returns [EObject current=null] : (this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? ) ;
     public final EObject ruleTypedMultiplicityRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -13182,11 +14377,11 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4485:28: ( (this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4486:1: (this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4719:28: ( (this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4720:1: (this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4486:1: (this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4487:2: this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4720:1: (this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4721:2: this_TypedRefCS_0= ruleTypedRefCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )?
             {
             if ( state.backtracking==0 ) {
                
@@ -13198,7 +14393,7 @@
                       newCompositeNode(grammarAccess.getTypedMultiplicityRefCSAccess().getTypedRefCSParserRuleCall_0()); 
                   
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypedMultiplicityRefCS9764);
+            pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypedMultiplicityRefCS11170);
             this_TypedRefCS_0=ruleTypedRefCS();
 
             state._fsp--;
@@ -13209,26 +14404,26 @@
                       afterParserOrEnumRuleCall();
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4498:1: ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )?
-            int alt126=2;
-            int LA126_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4732:1: ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )?
+            int alt164=2;
+            int LA164_0 = input.LA(1);
 
-            if ( (LA126_0==122) ) {
-                alt126=1;
+            if ( (LA164_0==122) ) {
+                alt164=1;
             }
-            switch (alt126) {
+            switch (alt164) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4499:1: (lv_ownedMultiplicity_1_0= ruleMultiplicityCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4733:1: (lv_ownedMultiplicity_1_0= ruleMultiplicityCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4499:1: (lv_ownedMultiplicity_1_0= ruleMultiplicityCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4500:3: lv_ownedMultiplicity_1_0= ruleMultiplicityCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4733:1: (lv_ownedMultiplicity_1_0= ruleMultiplicityCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4734:3: lv_ownedMultiplicity_1_0= ruleMultiplicityCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTypedMultiplicityRefCSAccess().getOwnedMultiplicityMultiplicityCSParserRuleCall_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityCS_in_ruleTypedMultiplicityRefCS9784);
+                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityCS_in_ruleTypedMultiplicityRefCS11190);
                     lv_ownedMultiplicity_1_0=ruleMultiplicityCS();
 
                     state._fsp--;
@@ -13278,7 +14473,7 @@
 
 
     // $ANTLR start "entryRuleTemplateBindingCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4524:1: entryRuleTemplateBindingCS returns [EObject current=null] : iv_ruleTemplateBindingCS= ruleTemplateBindingCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4758:1: entryRuleTemplateBindingCS returns [EObject current=null] : iv_ruleTemplateBindingCS= ruleTemplateBindingCS EOF ;
     public final EObject entryRuleTemplateBindingCS() throws RecognitionException {
         EObject current = null;
 
@@ -13286,13 +14481,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4525:2: (iv_ruleTemplateBindingCS= ruleTemplateBindingCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4526:2: iv_ruleTemplateBindingCS= ruleTemplateBindingCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4759:2: (iv_ruleTemplateBindingCS= ruleTemplateBindingCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4760:2: iv_ruleTemplateBindingCS= ruleTemplateBindingCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTemplateBindingCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTemplateBindingCS_in_entryRuleTemplateBindingCS9821);
+            pushFollow(FollowSets000.FOLLOW_ruleTemplateBindingCS_in_entryRuleTemplateBindingCS11227);
             iv_ruleTemplateBindingCS=ruleTemplateBindingCS();
 
             state._fsp--;
@@ -13300,7 +14495,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTemplateBindingCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTemplateBindingCS9831); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTemplateBindingCS11237); if (state.failed) return current;
 
             }
 
@@ -13318,7 +14513,7 @@
 
 
     // $ANTLR start "ruleTemplateBindingCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4533:1: ruleTemplateBindingCS returns [EObject current=null] : ( (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4767:1: ruleTemplateBindingCS returns [EObject current=null] : ( (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' ) ) ;
     public final EObject ruleTemplateBindingCS() throws RecognitionException {
         EObject current = null;
 
@@ -13340,51 +14535,51 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4536:28: ( ( (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4537:1: ( (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4770:28: ( ( (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4771:1: ( (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4537:1: ( (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' ) )
-            int alt129=2;
-            int LA129_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4771:1: ( (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' ) )
+            int alt167=2;
+            int LA167_0 = input.LA(1);
 
-            if ( (LA129_0==55) ) {
-                alt129=1;
+            if ( (LA167_0==55) ) {
+                alt167=1;
             }
-            else if ( (LA129_0==81) ) {
-                alt129=2;
+            else if ( (LA167_0==81) ) {
+                alt167=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 129, 0, input);
+                    new NoViableAltException("", 167, 0, input);
 
                 throw nvae;
             }
-            switch (alt129) {
+            switch (alt167) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4537:2: (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4771:2: (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4537:2: (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4537:4: otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4771:2: (otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4771:4: otherlv_0= '(' ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_4= ')'
                     {
-                    otherlv_0=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleTemplateBindingCS9869); if (state.failed) return current;
+                    otherlv_0=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleTemplateBindingCS11275); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_0, grammarAccess.getTemplateBindingCSAccess().getLeftParenthesisKeyword_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4541:1: ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4542:1: (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4775:1: ( (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4776:1: (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4542:1: (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4543:3: lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4776:1: (lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4777:3: lv_ownedSubstitutions_1_0= ruleTemplateParameterSubstitutionCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsTemplateParameterSubstitutionCSParserRuleCall_0_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS9890);
+                    pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS11296);
                     lv_ownedSubstitutions_1_0=ruleTemplateParameterSubstitutionCS();
 
                     state._fsp--;
@@ -13408,39 +14603,39 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4559:2: (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )*
-                    loop127:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4793:2: (otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) ) )*
+                    loop165:
                     do {
-                        int alt127=2;
-                        int LA127_0 = input.LA(1);
+                        int alt165=2;
+                        int LA165_0 = input.LA(1);
 
-                        if ( (LA127_0==60) ) {
-                            alt127=1;
+                        if ( (LA165_0==60) ) {
+                            alt165=1;
                         }
 
 
-                        switch (alt127) {
+                        switch (alt165) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4559:4: otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4793:4: otherlv_2= ',' ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) )
                     	    {
-                    	    otherlv_2=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTemplateBindingCS9903); if (state.failed) return current;
+                    	    otherlv_2=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTemplateBindingCS11309); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_2, grammarAccess.getTemplateBindingCSAccess().getCommaKeyword_0_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4563:1: ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4564:1: (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4797:1: ( (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4798:1: (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4564:1: (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4565:3: lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4798:1: (lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4799:3: lv_ownedSubstitutions_3_0= ruleTemplateParameterSubstitutionCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsTemplateParameterSubstitutionCSParserRuleCall_0_2_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS9924);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS11330);
                     	    lv_ownedSubstitutions_3_0=ruleTemplateParameterSubstitutionCS();
 
                     	    state._fsp--;
@@ -13469,11 +14664,11 @@
                     	    break;
 
                     	default :
-                    	    break loop127;
+                    	    break loop165;
                         }
                     } while (true);
 
-                    otherlv_4=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleTemplateBindingCS9938); if (state.failed) return current;
+                    otherlv_4=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleTemplateBindingCS11344); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_4, grammarAccess.getTemplateBindingCSAccess().getRightParenthesisKeyword_0_3());
@@ -13486,29 +14681,29 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4586:6: (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4820:6: (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4586:6: (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4586:8: otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4820:6: (otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4820:8: otherlv_5= '<' ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) ) (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )* otherlv_9= '>'
                     {
-                    otherlv_5=(Token)match(input,81,FollowSets000.FOLLOW_81_in_ruleTemplateBindingCS9958); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,81,FollowSets000.FOLLOW_81_in_ruleTemplateBindingCS11364); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_5, grammarAccess.getTemplateBindingCSAccess().getLessThanSignKeyword_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4590:1: ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4591:1: (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4824:1: ( (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4825:1: (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4591:1: (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4592:3: lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4825:1: (lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4826:3: lv_ownedSubstitutions_6_0= ruleTemplateParameterSubstitutionCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsTemplateParameterSubstitutionCSParserRuleCall_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS9979);
+                    pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS11385);
                     lv_ownedSubstitutions_6_0=ruleTemplateParameterSubstitutionCS();
 
                     state._fsp--;
@@ -13532,39 +14727,39 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4608:2: (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )*
-                    loop128:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4842:2: (otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) ) )*
+                    loop166:
                     do {
-                        int alt128=2;
-                        int LA128_0 = input.LA(1);
+                        int alt166=2;
+                        int LA166_0 = input.LA(1);
 
-                        if ( (LA128_0==60) ) {
-                            alt128=1;
+                        if ( (LA166_0==60) ) {
+                            alt166=1;
                         }
 
 
-                        switch (alt128) {
+                        switch (alt166) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4608:4: otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4842:4: otherlv_7= ',' ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) )
                     	    {
-                    	    otherlv_7=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTemplateBindingCS9992); if (state.failed) return current;
+                    	    otherlv_7=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTemplateBindingCS11398); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_7, grammarAccess.getTemplateBindingCSAccess().getCommaKeyword_1_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4612:1: ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4613:1: (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4846:1: ( (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4847:1: (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4613:1: (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4614:3: lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4847:1: (lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4848:3: lv_ownedSubstitutions_8_0= ruleTemplateParameterSubstitutionCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getTemplateBindingCSAccess().getOwnedSubstitutionsTemplateParameterSubstitutionCSParserRuleCall_1_2_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS10013);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS11419);
                     	    lv_ownedSubstitutions_8_0=ruleTemplateParameterSubstitutionCS();
 
                     	    state._fsp--;
@@ -13593,11 +14788,11 @@
                     	    break;
 
                     	default :
-                    	    break loop128;
+                    	    break loop166;
                         }
                     } while (true);
 
-                    otherlv_9=(Token)match(input,82,FollowSets000.FOLLOW_82_in_ruleTemplateBindingCS10027); if (state.failed) return current;
+                    otherlv_9=(Token)match(input,82,FollowSets000.FOLLOW_82_in_ruleTemplateBindingCS11433); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_9, grammarAccess.getTemplateBindingCSAccess().getGreaterThanSignKeyword_1_3());
@@ -13632,7 +14827,7 @@
 
 
     // $ANTLR start "entryRuleTemplateSignatureCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4642:1: entryRuleTemplateSignatureCS returns [EObject current=null] : iv_ruleTemplateSignatureCS= ruleTemplateSignatureCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4876:1: entryRuleTemplateSignatureCS returns [EObject current=null] : iv_ruleTemplateSignatureCS= ruleTemplateSignatureCS EOF ;
     public final EObject entryRuleTemplateSignatureCS() throws RecognitionException {
         EObject current = null;
 
@@ -13640,13 +14835,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4643:2: (iv_ruleTemplateSignatureCS= ruleTemplateSignatureCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4644:2: iv_ruleTemplateSignatureCS= ruleTemplateSignatureCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4877:2: (iv_ruleTemplateSignatureCS= ruleTemplateSignatureCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4878:2: iv_ruleTemplateSignatureCS= ruleTemplateSignatureCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTemplateSignatureCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_entryRuleTemplateSignatureCS10064);
+            pushFollow(FollowSets000.FOLLOW_ruleTemplateSignatureCS_in_entryRuleTemplateSignatureCS11470);
             iv_ruleTemplateSignatureCS=ruleTemplateSignatureCS();
 
             state._fsp--;
@@ -13654,7 +14849,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTemplateSignatureCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTemplateSignatureCS10074); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTemplateSignatureCS11480); if (state.failed) return current;
 
             }
 
@@ -13672,7 +14867,7 @@
 
 
     // $ANTLR start "ruleTemplateSignatureCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4651:1: ruleTemplateSignatureCS returns [EObject current=null] : ( (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4885:1: ruleTemplateSignatureCS returns [EObject current=null] : ( (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' ) ) ;
     public final EObject ruleTemplateSignatureCS() throws RecognitionException {
         EObject current = null;
 
@@ -13694,51 +14889,51 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4654:28: ( ( (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4655:1: ( (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4888:28: ( ( (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4889:1: ( (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4655:1: ( (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' ) )
-            int alt132=2;
-            int LA132_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4889:1: ( (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' ) | (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' ) )
+            int alt170=2;
+            int LA170_0 = input.LA(1);
 
-            if ( (LA132_0==55) ) {
-                alt132=1;
+            if ( (LA170_0==55) ) {
+                alt170=1;
             }
-            else if ( (LA132_0==81) ) {
-                alt132=2;
+            else if ( (LA170_0==81) ) {
+                alt170=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 132, 0, input);
+                    new NoViableAltException("", 170, 0, input);
 
                 throw nvae;
             }
-            switch (alt132) {
+            switch (alt170) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4655:2: (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4889:2: (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4655:2: (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4655:4: otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4889:2: (otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4889:4: otherlv_0= '(' ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) ) (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )* otherlv_4= ')'
                     {
-                    otherlv_0=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleTemplateSignatureCS10112); if (state.failed) return current;
+                    otherlv_0=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleTemplateSignatureCS11518); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_0, grammarAccess.getTemplateSignatureCSAccess().getLeftParenthesisKeyword_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4659:1: ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4660:1: (lv_ownedParameters_1_0= ruleTypeParameterCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4893:1: ( (lv_ownedParameters_1_0= ruleTypeParameterCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4894:1: (lv_ownedParameters_1_0= ruleTypeParameterCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4660:1: (lv_ownedParameters_1_0= ruleTypeParameterCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4661:3: lv_ownedParameters_1_0= ruleTypeParameterCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4894:1: (lv_ownedParameters_1_0= ruleTypeParameterCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4895:3: lv_ownedParameters_1_0= ruleTypeParameterCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersTypeParameterCSParserRuleCall_0_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS10133);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS11539);
                     lv_ownedParameters_1_0=ruleTypeParameterCS();
 
                     state._fsp--;
@@ -13762,39 +14957,39 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4677:2: (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )*
-                    loop130:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4911:2: (otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) ) )*
+                    loop168:
                     do {
-                        int alt130=2;
-                        int LA130_0 = input.LA(1);
+                        int alt168=2;
+                        int LA168_0 = input.LA(1);
 
-                        if ( (LA130_0==60) ) {
-                            alt130=1;
+                        if ( (LA168_0==60) ) {
+                            alt168=1;
                         }
 
 
-                        switch (alt130) {
+                        switch (alt168) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4677:4: otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4911:4: otherlv_2= ',' ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) )
                     	    {
-                    	    otherlv_2=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTemplateSignatureCS10146); if (state.failed) return current;
+                    	    otherlv_2=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTemplateSignatureCS11552); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_2, grammarAccess.getTemplateSignatureCSAccess().getCommaKeyword_0_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4681:1: ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4682:1: (lv_ownedParameters_3_0= ruleTypeParameterCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4915:1: ( (lv_ownedParameters_3_0= ruleTypeParameterCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4916:1: (lv_ownedParameters_3_0= ruleTypeParameterCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4682:1: (lv_ownedParameters_3_0= ruleTypeParameterCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4683:3: lv_ownedParameters_3_0= ruleTypeParameterCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4916:1: (lv_ownedParameters_3_0= ruleTypeParameterCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4917:3: lv_ownedParameters_3_0= ruleTypeParameterCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersTypeParameterCSParserRuleCall_0_2_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS10167);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS11573);
                     	    lv_ownedParameters_3_0=ruleTypeParameterCS();
 
                     	    state._fsp--;
@@ -13823,11 +15018,11 @@
                     	    break;
 
                     	default :
-                    	    break loop130;
+                    	    break loop168;
                         }
                     } while (true);
 
-                    otherlv_4=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleTemplateSignatureCS10181); if (state.failed) return current;
+                    otherlv_4=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleTemplateSignatureCS11587); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_4, grammarAccess.getTemplateSignatureCSAccess().getRightParenthesisKeyword_0_3());
@@ -13840,29 +15035,29 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4704:6: (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4938:6: (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4704:6: (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4704:8: otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4938:6: (otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4938:8: otherlv_5= '<' ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) ) (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )* otherlv_9= '>'
                     {
-                    otherlv_5=(Token)match(input,81,FollowSets000.FOLLOW_81_in_ruleTemplateSignatureCS10201); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,81,FollowSets000.FOLLOW_81_in_ruleTemplateSignatureCS11607); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_5, grammarAccess.getTemplateSignatureCSAccess().getLessThanSignKeyword_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4708:1: ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4709:1: (lv_ownedParameters_6_0= ruleTypeParameterCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4942:1: ( (lv_ownedParameters_6_0= ruleTypeParameterCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4943:1: (lv_ownedParameters_6_0= ruleTypeParameterCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4709:1: (lv_ownedParameters_6_0= ruleTypeParameterCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4710:3: lv_ownedParameters_6_0= ruleTypeParameterCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4943:1: (lv_ownedParameters_6_0= ruleTypeParameterCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4944:3: lv_ownedParameters_6_0= ruleTypeParameterCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersTypeParameterCSParserRuleCall_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS10222);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS11628);
                     lv_ownedParameters_6_0=ruleTypeParameterCS();
 
                     state._fsp--;
@@ -13886,39 +15081,39 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4726:2: (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )*
-                    loop131:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4960:2: (otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) ) )*
+                    loop169:
                     do {
-                        int alt131=2;
-                        int LA131_0 = input.LA(1);
+                        int alt169=2;
+                        int LA169_0 = input.LA(1);
 
-                        if ( (LA131_0==60) ) {
-                            alt131=1;
+                        if ( (LA169_0==60) ) {
+                            alt169=1;
                         }
 
 
-                        switch (alt131) {
+                        switch (alt169) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4726:4: otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4960:4: otherlv_7= ',' ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) )
                     	    {
-                    	    otherlv_7=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTemplateSignatureCS10235); if (state.failed) return current;
+                    	    otherlv_7=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTemplateSignatureCS11641); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_7, grammarAccess.getTemplateSignatureCSAccess().getCommaKeyword_1_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4730:1: ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4731:1: (lv_ownedParameters_8_0= ruleTypeParameterCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4964:1: ( (lv_ownedParameters_8_0= ruleTypeParameterCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4965:1: (lv_ownedParameters_8_0= ruleTypeParameterCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4731:1: (lv_ownedParameters_8_0= ruleTypeParameterCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4732:3: lv_ownedParameters_8_0= ruleTypeParameterCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4965:1: (lv_ownedParameters_8_0= ruleTypeParameterCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4966:3: lv_ownedParameters_8_0= ruleTypeParameterCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getTemplateSignatureCSAccess().getOwnedParametersTypeParameterCSParserRuleCall_1_2_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS10256);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS11662);
                     	    lv_ownedParameters_8_0=ruleTypeParameterCS();
 
                     	    state._fsp--;
@@ -13947,11 +15142,11 @@
                     	    break;
 
                     	default :
-                    	    break loop131;
+                    	    break loop169;
                         }
                     } while (true);
 
-                    otherlv_9=(Token)match(input,82,FollowSets000.FOLLOW_82_in_ruleTemplateSignatureCS10270); if (state.failed) return current;
+                    otherlv_9=(Token)match(input,82,FollowSets000.FOLLOW_82_in_ruleTemplateSignatureCS11676); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_9, grammarAccess.getTemplateSignatureCSAccess().getGreaterThanSignKeyword_1_3());
@@ -13986,7 +15181,7 @@
 
 
     // $ANTLR start "entryRuleTypedRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4760:1: entryRuleTypedRefCS returns [EObject current=null] : iv_ruleTypedRefCS= ruleTypedRefCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4994:1: entryRuleTypedRefCS returns [EObject current=null] : iv_ruleTypedRefCS= ruleTypedRefCS EOF ;
     public final EObject entryRuleTypedRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -13994,13 +15189,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4761:2: (iv_ruleTypedRefCS= ruleTypedRefCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4762:2: iv_ruleTypedRefCS= ruleTypedRefCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4995:2: (iv_ruleTypedRefCS= ruleTypedRefCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4996:2: iv_ruleTypedRefCS= ruleTypedRefCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypedRefCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_entryRuleTypedRefCS10307);
+            pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_entryRuleTypedRefCS11713);
             iv_ruleTypedRefCS=ruleTypedRefCS();
 
             state._fsp--;
@@ -14008,7 +15203,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypedRefCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypedRefCS10317); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypedRefCS11723); if (state.failed) return current;
 
             }
 
@@ -14026,7 +15221,7 @@
 
 
     // $ANTLR start "ruleTypedRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4769:1: ruleTypedRefCS returns [EObject current=null] : (this_TypeLiteralCS_0= ruleTypeLiteralCS | this_TypedTypeRefCS_1= ruleTypedTypeRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5003:1: ruleTypedRefCS returns [EObject current=null] : (this_TypeLiteralCS_0= ruleTypeLiteralCS | this_TypedTypeRefCS_1= ruleTypedTypeRefCS ) ;
     public final EObject ruleTypedRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -14038,29 +15233,29 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4772:28: ( (this_TypeLiteralCS_0= ruleTypeLiteralCS | this_TypedTypeRefCS_1= ruleTypedTypeRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4773:1: (this_TypeLiteralCS_0= ruleTypeLiteralCS | this_TypedTypeRefCS_1= ruleTypedTypeRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5006:28: ( (this_TypeLiteralCS_0= ruleTypeLiteralCS | this_TypedTypeRefCS_1= ruleTypedTypeRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5007:1: (this_TypeLiteralCS_0= ruleTypeLiteralCS | this_TypedTypeRefCS_1= ruleTypedTypeRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4773:1: (this_TypeLiteralCS_0= ruleTypeLiteralCS | this_TypedTypeRefCS_1= ruleTypedTypeRefCS )
-            int alt133=2;
-            int LA133_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5007:1: (this_TypeLiteralCS_0= ruleTypeLiteralCS | this_TypedTypeRefCS_1= ruleTypedTypeRefCS )
+            int alt171=2;
+            int LA171_0 = input.LA(1);
 
-            if ( (LA133_0==98||(LA133_0>=100 && LA133_0<=112)) ) {
-                alt133=1;
+            if ( (LA171_0==98||(LA171_0>=100 && LA171_0<=112)) ) {
+                alt171=1;
             }
-            else if ( ((LA133_0>=RULE_SIMPLE_ID && LA133_0<=RULE_ESCAPED_ID)||LA133_0==17||(LA133_0>=19 && LA133_0<=54)||LA133_0==59||LA133_0==72||(LA133_0>=74 && LA133_0<=75)||LA133_0==80) ) {
-                alt133=2;
+            else if ( ((LA171_0>=RULE_SIMPLE_ID && LA171_0<=RULE_ESCAPED_ID)||LA171_0==17||(LA171_0>=19 && LA171_0<=54)||LA171_0==59||LA171_0==72||(LA171_0>=74 && LA171_0<=75)||LA171_0==80) ) {
+                alt171=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 133, 0, input);
+                    new NoViableAltException("", 171, 0, input);
 
                 throw nvae;
             }
-            switch (alt133) {
+            switch (alt171) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4774:2: this_TypeLiteralCS_0= ruleTypeLiteralCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5008:2: this_TypeLiteralCS_0= ruleTypeLiteralCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -14072,7 +15267,7 @@
                               newCompositeNode(grammarAccess.getTypedRefCSAccess().getTypeLiteralCSParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_ruleTypedRefCS10367);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_ruleTypedRefCS11773);
                     this_TypeLiteralCS_0=ruleTypeLiteralCS();
 
                     state._fsp--;
@@ -14087,7 +15282,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4787:2: this_TypedTypeRefCS_1= ruleTypedTypeRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5021:2: this_TypedTypeRefCS_1= ruleTypedTypeRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -14099,7 +15294,7 @@
                               newCompositeNode(grammarAccess.getTypedRefCSAccess().getTypedTypeRefCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedTypeRefCS_in_ruleTypedRefCS10397);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedTypeRefCS_in_ruleTypedRefCS11803);
                     this_TypedTypeRefCS_1=ruleTypedTypeRefCS();
 
                     state._fsp--;
@@ -14136,7 +15331,7 @@
 
 
     // $ANTLR start "entryRuleUnrestrictedName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4806:1: entryRuleUnrestrictedName returns [String current=null] : iv_ruleUnrestrictedName= ruleUnrestrictedName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5040:1: entryRuleUnrestrictedName returns [String current=null] : iv_ruleUnrestrictedName= ruleUnrestrictedName EOF ;
     public final String entryRuleUnrestrictedName() throws RecognitionException {
         String current = null;
 
@@ -14144,13 +15339,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4807:2: (iv_ruleUnrestrictedName= ruleUnrestrictedName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4808:2: iv_ruleUnrestrictedName= ruleUnrestrictedName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5041:2: (iv_ruleUnrestrictedName= ruleUnrestrictedName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5042:2: iv_ruleUnrestrictedName= ruleUnrestrictedName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getUnrestrictedNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_entryRuleUnrestrictedName10433);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_entryRuleUnrestrictedName11839);
             iv_ruleUnrestrictedName=ruleUnrestrictedName();
 
             state._fsp--;
@@ -14158,7 +15353,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleUnrestrictedName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUnrestrictedName10444); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUnrestrictedName11850); if (state.failed) return current;
 
             }
 
@@ -14176,7 +15371,7 @@
 
 
     // $ANTLR start "ruleUnrestrictedName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4815:1: ruleUnrestrictedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_EnumerationLiteralName_0= ruleEnumerationLiteralName | kw= 'annotation' | kw= 'documentation' | kw= 'invariant' | kw= 'literal' | kw= 'serializable' | kw= 'sysml' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5049:1: ruleUnrestrictedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_EnumerationLiteralName_0= ruleEnumerationLiteralName | kw= 'annotation' | kw= 'documentation' | kw= 'invariant' | kw= 'literal' | kw= 'serializable' | kw= 'sysml' ) ;
     public final AntlrDatatypeRuleToken ruleUnrestrictedName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -14187,11 +15382,11 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4818:28: ( (this_EnumerationLiteralName_0= ruleEnumerationLiteralName | kw= 'annotation' | kw= 'documentation' | kw= 'invariant' | kw= 'literal' | kw= 'serializable' | kw= 'sysml' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4819:1: (this_EnumerationLiteralName_0= ruleEnumerationLiteralName | kw= 'annotation' | kw= 'documentation' | kw= 'invariant' | kw= 'literal' | kw= 'serializable' | kw= 'sysml' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5052:28: ( (this_EnumerationLiteralName_0= ruleEnumerationLiteralName | kw= 'annotation' | kw= 'documentation' | kw= 'invariant' | kw= 'literal' | kw= 'serializable' | kw= 'sysml' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5053:1: (this_EnumerationLiteralName_0= ruleEnumerationLiteralName | kw= 'annotation' | kw= 'documentation' | kw= 'invariant' | kw= 'literal' | kw= 'serializable' | kw= 'sysml' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4819:1: (this_EnumerationLiteralName_0= ruleEnumerationLiteralName | kw= 'annotation' | kw= 'documentation' | kw= 'invariant' | kw= 'literal' | kw= 'serializable' | kw= 'sysml' )
-            int alt134=7;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5053:1: (this_EnumerationLiteralName_0= ruleEnumerationLiteralName | kw= 'annotation' | kw= 'documentation' | kw= 'invariant' | kw= 'literal' | kw= 'serializable' | kw= 'sysml' )
+            int alt172=7;
             switch ( input.LA(1) ) {
             case RULE_SIMPLE_ID:
             case RULE_ESCAPED_ID:
@@ -14232,57 +15427,57 @@
             case 52:
             case 53:
                 {
-                alt134=1;
+                alt172=1;
                 }
                 break;
             case 59:
                 {
-                alt134=2;
+                alt172=2;
                 }
                 break;
             case 74:
                 {
-                alt134=3;
+                alt172=3;
                 }
                 break;
             case 54:
                 {
-                alt134=4;
+                alt172=4;
                 }
                 break;
             case 75:
                 {
-                alt134=5;
+                alt172=5;
                 }
                 break;
             case 72:
                 {
-                alt134=6;
+                alt172=6;
                 }
                 break;
             case 80:
                 {
-                alt134=7;
+                alt172=7;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 134, 0, input);
+                    new NoViableAltException("", 172, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt134) {
+            switch (alt172) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4820:5: this_EnumerationLiteralName_0= ruleEnumerationLiteralName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5054:5: this_EnumerationLiteralName_0= ruleEnumerationLiteralName
                     {
                     if ( state.backtracking==0 ) {
                        
                               newCompositeNode(grammarAccess.getUnrestrictedNameAccess().getEnumerationLiteralNameParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralName_in_ruleUnrestrictedName10491);
+                    pushFollow(FollowSets000.FOLLOW_ruleEnumerationLiteralName_in_ruleUnrestrictedName11897);
                     this_EnumerationLiteralName_0=ruleEnumerationLiteralName();
 
                     state._fsp--;
@@ -14301,9 +15496,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4832:2: kw= 'annotation'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5066:2: kw= 'annotation'
                     {
-                    kw=(Token)match(input,59,FollowSets000.FOLLOW_59_in_ruleUnrestrictedName10515); if (state.failed) return current;
+                    kw=(Token)match(input,59,FollowSets000.FOLLOW_59_in_ruleUnrestrictedName11921); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14314,9 +15509,9 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4839:2: kw= 'documentation'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5073:2: kw= 'documentation'
                     {
-                    kw=(Token)match(input,74,FollowSets000.FOLLOW_74_in_ruleUnrestrictedName10534); if (state.failed) return current;
+                    kw=(Token)match(input,74,FollowSets000.FOLLOW_74_in_ruleUnrestrictedName11940); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14327,9 +15522,9 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4846:2: kw= 'invariant'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5080:2: kw= 'invariant'
                     {
-                    kw=(Token)match(input,54,FollowSets000.FOLLOW_54_in_ruleUnrestrictedName10553); if (state.failed) return current;
+                    kw=(Token)match(input,54,FollowSets000.FOLLOW_54_in_ruleUnrestrictedName11959); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14340,9 +15535,9 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4853:2: kw= 'literal'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5087:2: kw= 'literal'
                     {
-                    kw=(Token)match(input,75,FollowSets000.FOLLOW_75_in_ruleUnrestrictedName10572); if (state.failed) return current;
+                    kw=(Token)match(input,75,FollowSets000.FOLLOW_75_in_ruleUnrestrictedName11978); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14353,9 +15548,9 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4860:2: kw= 'serializable'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5094:2: kw= 'serializable'
                     {
-                    kw=(Token)match(input,72,FollowSets000.FOLLOW_72_in_ruleUnrestrictedName10591); if (state.failed) return current;
+                    kw=(Token)match(input,72,FollowSets000.FOLLOW_72_in_ruleUnrestrictedName11997); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14366,9 +15561,9 @@
                     }
                     break;
                 case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4867:2: kw= 'sysml'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5101:2: kw= 'sysml'
                     {
-                    kw=(Token)match(input,80,FollowSets000.FOLLOW_80_in_ruleUnrestrictedName10610); if (state.failed) return current;
+                    kw=(Token)match(input,80,FollowSets000.FOLLOW_80_in_ruleUnrestrictedName12016); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14401,7 +15596,7 @@
 
 
     // $ANTLR start "entryRuleEssentialOCLUnaryOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4884:1: entryRuleEssentialOCLUnaryOperatorName returns [String current=null] : iv_ruleEssentialOCLUnaryOperatorName= ruleEssentialOCLUnaryOperatorName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5118:1: entryRuleEssentialOCLUnaryOperatorName returns [String current=null] : iv_ruleEssentialOCLUnaryOperatorName= ruleEssentialOCLUnaryOperatorName EOF ;
     public final String entryRuleEssentialOCLUnaryOperatorName() throws RecognitionException {
         String current = null;
 
@@ -14409,13 +15604,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4885:2: (iv_ruleEssentialOCLUnaryOperatorName= ruleEssentialOCLUnaryOperatorName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4886:2: iv_ruleEssentialOCLUnaryOperatorName= ruleEssentialOCLUnaryOperatorName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5119:2: (iv_ruleEssentialOCLUnaryOperatorName= ruleEssentialOCLUnaryOperatorName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5120:2: iv_ruleEssentialOCLUnaryOperatorName= ruleEssentialOCLUnaryOperatorName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getEssentialOCLUnaryOperatorNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnaryOperatorName_in_entryRuleEssentialOCLUnaryOperatorName10655);
+            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnaryOperatorName_in_entryRuleEssentialOCLUnaryOperatorName12061);
             iv_ruleEssentialOCLUnaryOperatorName=ruleEssentialOCLUnaryOperatorName();
 
             state._fsp--;
@@ -14423,7 +15618,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleEssentialOCLUnaryOperatorName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLUnaryOperatorName10666); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLUnaryOperatorName12072); if (state.failed) return current;
 
             }
 
@@ -14441,7 +15636,7 @@
 
 
     // $ANTLR start "ruleEssentialOCLUnaryOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4893:1: ruleEssentialOCLUnaryOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '-' | kw= 'not' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5127:1: ruleEssentialOCLUnaryOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '-' | kw= 'not' ) ;
     public final AntlrDatatypeRuleToken ruleEssentialOCLUnaryOperatorName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -14450,31 +15645,31 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4896:28: ( (kw= '-' | kw= 'not' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4897:1: (kw= '-' | kw= 'not' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5130:28: ( (kw= '-' | kw= 'not' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5131:1: (kw= '-' | kw= 'not' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4897:1: (kw= '-' | kw= 'not' )
-            int alt135=2;
-            int LA135_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5131:1: (kw= '-' | kw= 'not' )
+            int alt173=2;
+            int LA173_0 = input.LA(1);
 
-            if ( (LA135_0==18) ) {
-                alt135=1;
+            if ( (LA173_0==18) ) {
+                alt173=1;
             }
-            else if ( (LA135_0==83) ) {
-                alt135=2;
+            else if ( (LA173_0==83) ) {
+                alt173=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 135, 0, input);
+                    new NoViableAltException("", 173, 0, input);
 
                 throw nvae;
             }
-            switch (alt135) {
+            switch (alt173) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4898:2: kw= '-'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5132:2: kw= '-'
                     {
-                    kw=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleEssentialOCLUnaryOperatorName10704); if (state.failed) return current;
+                    kw=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleEssentialOCLUnaryOperatorName12110); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14485,9 +15680,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4905:2: kw= 'not'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5139:2: kw= 'not'
                     {
-                    kw=(Token)match(input,83,FollowSets000.FOLLOW_83_in_ruleEssentialOCLUnaryOperatorName10723); if (state.failed) return current;
+                    kw=(Token)match(input,83,FollowSets000.FOLLOW_83_in_ruleEssentialOCLUnaryOperatorName12129); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14520,7 +15715,7 @@
 
 
     // $ANTLR start "entryRuleEssentialOCLInfixOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4918:1: entryRuleEssentialOCLInfixOperatorName returns [String current=null] : iv_ruleEssentialOCLInfixOperatorName= ruleEssentialOCLInfixOperatorName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5152:1: entryRuleEssentialOCLInfixOperatorName returns [String current=null] : iv_ruleEssentialOCLInfixOperatorName= ruleEssentialOCLInfixOperatorName EOF ;
     public final String entryRuleEssentialOCLInfixOperatorName() throws RecognitionException {
         String current = null;
 
@@ -14528,13 +15723,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4919:2: (iv_ruleEssentialOCLInfixOperatorName= ruleEssentialOCLInfixOperatorName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4920:2: iv_ruleEssentialOCLInfixOperatorName= ruleEssentialOCLInfixOperatorName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5153:2: (iv_ruleEssentialOCLInfixOperatorName= ruleEssentialOCLInfixOperatorName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5154:2: iv_ruleEssentialOCLInfixOperatorName= ruleEssentialOCLInfixOperatorName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getEssentialOCLInfixOperatorNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLInfixOperatorName_in_entryRuleEssentialOCLInfixOperatorName10764);
+            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLInfixOperatorName_in_entryRuleEssentialOCLInfixOperatorName12170);
             iv_ruleEssentialOCLInfixOperatorName=ruleEssentialOCLInfixOperatorName();
 
             state._fsp--;
@@ -14542,7 +15737,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleEssentialOCLInfixOperatorName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLInfixOperatorName10775); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLInfixOperatorName12181); if (state.failed) return current;
 
             }
 
@@ -14560,7 +15755,7 @@
 
 
     // $ANTLR start "ruleEssentialOCLInfixOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4927:1: ruleEssentialOCLInfixOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '*' | kw= '/' | kw= '+' | kw= '-' | kw= '>' | kw= '<' | kw= '>=' | kw= '<=' | kw= '=' | kw= '<>' | kw= 'and' | kw= 'or' | kw= 'xor' | kw= 'implies' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5161:1: ruleEssentialOCLInfixOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '*' | kw= '/' | kw= '+' | kw= '-' | kw= '>' | kw= '<' | kw= '>=' | kw= '<=' | kw= '=' | kw= '<>' | kw= 'and' | kw= 'or' | kw= 'xor' | kw= 'implies' ) ;
     public final AntlrDatatypeRuleToken ruleEssentialOCLInfixOperatorName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -14569,95 +15764,95 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4930:28: ( (kw= '*' | kw= '/' | kw= '+' | kw= '-' | kw= '>' | kw= '<' | kw= '>=' | kw= '<=' | kw= '=' | kw= '<>' | kw= 'and' | kw= 'or' | kw= 'xor' | kw= 'implies' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4931:1: (kw= '*' | kw= '/' | kw= '+' | kw= '-' | kw= '>' | kw= '<' | kw= '>=' | kw= '<=' | kw= '=' | kw= '<>' | kw= 'and' | kw= 'or' | kw= 'xor' | kw= 'implies' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5164:28: ( (kw= '*' | kw= '/' | kw= '+' | kw= '-' | kw= '>' | kw= '<' | kw= '>=' | kw= '<=' | kw= '=' | kw= '<>' | kw= 'and' | kw= 'or' | kw= 'xor' | kw= 'implies' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5165:1: (kw= '*' | kw= '/' | kw= '+' | kw= '-' | kw= '>' | kw= '<' | kw= '>=' | kw= '<=' | kw= '=' | kw= '<>' | kw= 'and' | kw= 'or' | kw= 'xor' | kw= 'implies' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4931:1: (kw= '*' | kw= '/' | kw= '+' | kw= '-' | kw= '>' | kw= '<' | kw= '>=' | kw= '<=' | kw= '=' | kw= '<>' | kw= 'and' | kw= 'or' | kw= 'xor' | kw= 'implies' )
-            int alt136=14;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5165:1: (kw= '*' | kw= '/' | kw= '+' | kw= '-' | kw= '>' | kw= '<' | kw= '>=' | kw= '<=' | kw= '=' | kw= '<>' | kw= 'and' | kw= 'or' | kw= 'xor' | kw= 'implies' )
+            int alt174=14;
             switch ( input.LA(1) ) {
             case 84:
                 {
-                alt136=1;
+                alt174=1;
                 }
                 break;
             case 85:
                 {
-                alt136=2;
+                alt174=2;
                 }
                 break;
             case 86:
                 {
-                alt136=3;
+                alt174=3;
                 }
                 break;
             case 18:
                 {
-                alt136=4;
+                alt174=4;
                 }
                 break;
             case 82:
                 {
-                alt136=5;
+                alt174=5;
                 }
                 break;
             case 81:
                 {
-                alt136=6;
+                alt174=6;
                 }
                 break;
             case 87:
                 {
-                alt136=7;
+                alt174=7;
                 }
                 break;
             case 88:
                 {
-                alt136=8;
+                alt174=8;
                 }
                 break;
             case 63:
                 {
-                alt136=9;
+                alt174=9;
                 }
                 break;
             case 89:
                 {
-                alt136=10;
+                alt174=10;
                 }
                 break;
             case 90:
                 {
-                alt136=11;
+                alt174=11;
                 }
                 break;
             case 91:
                 {
-                alt136=12;
+                alt174=12;
                 }
                 break;
             case 92:
                 {
-                alt136=13;
+                alt174=13;
                 }
                 break;
             case 93:
                 {
-                alt136=14;
+                alt174=14;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 136, 0, input);
+                    new NoViableAltException("", 174, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt136) {
+            switch (alt174) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4932:2: kw= '*'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5166:2: kw= '*'
                     {
-                    kw=(Token)match(input,84,FollowSets000.FOLLOW_84_in_ruleEssentialOCLInfixOperatorName10813); if (state.failed) return current;
+                    kw=(Token)match(input,84,FollowSets000.FOLLOW_84_in_ruleEssentialOCLInfixOperatorName12219); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14668,9 +15863,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4939:2: kw= '/'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5173:2: kw= '/'
                     {
-                    kw=(Token)match(input,85,FollowSets000.FOLLOW_85_in_ruleEssentialOCLInfixOperatorName10832); if (state.failed) return current;
+                    kw=(Token)match(input,85,FollowSets000.FOLLOW_85_in_ruleEssentialOCLInfixOperatorName12238); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14681,9 +15876,9 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4946:2: kw= '+'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5180:2: kw= '+'
                     {
-                    kw=(Token)match(input,86,FollowSets000.FOLLOW_86_in_ruleEssentialOCLInfixOperatorName10851); if (state.failed) return current;
+                    kw=(Token)match(input,86,FollowSets000.FOLLOW_86_in_ruleEssentialOCLInfixOperatorName12257); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14694,9 +15889,9 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4953:2: kw= '-'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5187:2: kw= '-'
                     {
-                    kw=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleEssentialOCLInfixOperatorName10870); if (state.failed) return current;
+                    kw=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleEssentialOCLInfixOperatorName12276); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14707,9 +15902,9 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4960:2: kw= '>'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5194:2: kw= '>'
                     {
-                    kw=(Token)match(input,82,FollowSets000.FOLLOW_82_in_ruleEssentialOCLInfixOperatorName10889); if (state.failed) return current;
+                    kw=(Token)match(input,82,FollowSets000.FOLLOW_82_in_ruleEssentialOCLInfixOperatorName12295); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14720,9 +15915,9 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4967:2: kw= '<'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5201:2: kw= '<'
                     {
-                    kw=(Token)match(input,81,FollowSets000.FOLLOW_81_in_ruleEssentialOCLInfixOperatorName10908); if (state.failed) return current;
+                    kw=(Token)match(input,81,FollowSets000.FOLLOW_81_in_ruleEssentialOCLInfixOperatorName12314); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14733,9 +15928,9 @@
                     }
                     break;
                 case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4974:2: kw= '>='
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5208:2: kw= '>='
                     {
-                    kw=(Token)match(input,87,FollowSets000.FOLLOW_87_in_ruleEssentialOCLInfixOperatorName10927); if (state.failed) return current;
+                    kw=(Token)match(input,87,FollowSets000.FOLLOW_87_in_ruleEssentialOCLInfixOperatorName12333); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14746,9 +15941,9 @@
                     }
                     break;
                 case 8 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4981:2: kw= '<='
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5215:2: kw= '<='
                     {
-                    kw=(Token)match(input,88,FollowSets000.FOLLOW_88_in_ruleEssentialOCLInfixOperatorName10946); if (state.failed) return current;
+                    kw=(Token)match(input,88,FollowSets000.FOLLOW_88_in_ruleEssentialOCLInfixOperatorName12352); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14759,9 +15954,9 @@
                     }
                     break;
                 case 9 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4988:2: kw= '='
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5222:2: kw= '='
                     {
-                    kw=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleEssentialOCLInfixOperatorName10965); if (state.failed) return current;
+                    kw=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleEssentialOCLInfixOperatorName12371); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14772,9 +15967,9 @@
                     }
                     break;
                 case 10 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4995:2: kw= '<>'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5229:2: kw= '<>'
                     {
-                    kw=(Token)match(input,89,FollowSets000.FOLLOW_89_in_ruleEssentialOCLInfixOperatorName10984); if (state.failed) return current;
+                    kw=(Token)match(input,89,FollowSets000.FOLLOW_89_in_ruleEssentialOCLInfixOperatorName12390); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14785,9 +15980,9 @@
                     }
                     break;
                 case 11 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5002:2: kw= 'and'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5236:2: kw= 'and'
                     {
-                    kw=(Token)match(input,90,FollowSets000.FOLLOW_90_in_ruleEssentialOCLInfixOperatorName11003); if (state.failed) return current;
+                    kw=(Token)match(input,90,FollowSets000.FOLLOW_90_in_ruleEssentialOCLInfixOperatorName12409); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14798,9 +15993,9 @@
                     }
                     break;
                 case 12 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5009:2: kw= 'or'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5243:2: kw= 'or'
                     {
-                    kw=(Token)match(input,91,FollowSets000.FOLLOW_91_in_ruleEssentialOCLInfixOperatorName11022); if (state.failed) return current;
+                    kw=(Token)match(input,91,FollowSets000.FOLLOW_91_in_ruleEssentialOCLInfixOperatorName12428); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14811,9 +16006,9 @@
                     }
                     break;
                 case 13 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5016:2: kw= 'xor'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5250:2: kw= 'xor'
                     {
-                    kw=(Token)match(input,92,FollowSets000.FOLLOW_92_in_ruleEssentialOCLInfixOperatorName11041); if (state.failed) return current;
+                    kw=(Token)match(input,92,FollowSets000.FOLLOW_92_in_ruleEssentialOCLInfixOperatorName12447); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14824,9 +16019,9 @@
                     }
                     break;
                 case 14 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5023:2: kw= 'implies'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5257:2: kw= 'implies'
                     {
-                    kw=(Token)match(input,93,FollowSets000.FOLLOW_93_in_ruleEssentialOCLInfixOperatorName11060); if (state.failed) return current;
+                    kw=(Token)match(input,93,FollowSets000.FOLLOW_93_in_ruleEssentialOCLInfixOperatorName12466); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14859,7 +16054,7 @@
 
 
     // $ANTLR start "entryRuleEssentialOCLNavigationOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5036:1: entryRuleEssentialOCLNavigationOperatorName returns [String current=null] : iv_ruleEssentialOCLNavigationOperatorName= ruleEssentialOCLNavigationOperatorName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5270:1: entryRuleEssentialOCLNavigationOperatorName returns [String current=null] : iv_ruleEssentialOCLNavigationOperatorName= ruleEssentialOCLNavigationOperatorName EOF ;
     public final String entryRuleEssentialOCLNavigationOperatorName() throws RecognitionException {
         String current = null;
 
@@ -14867,13 +16062,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5037:2: (iv_ruleEssentialOCLNavigationOperatorName= ruleEssentialOCLNavigationOperatorName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5038:2: iv_ruleEssentialOCLNavigationOperatorName= ruleEssentialOCLNavigationOperatorName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5271:2: (iv_ruleEssentialOCLNavigationOperatorName= ruleEssentialOCLNavigationOperatorName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5272:2: iv_ruleEssentialOCLNavigationOperatorName= ruleEssentialOCLNavigationOperatorName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getEssentialOCLNavigationOperatorNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLNavigationOperatorName_in_entryRuleEssentialOCLNavigationOperatorName11101);
+            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLNavigationOperatorName_in_entryRuleEssentialOCLNavigationOperatorName12507);
             iv_ruleEssentialOCLNavigationOperatorName=ruleEssentialOCLNavigationOperatorName();
 
             state._fsp--;
@@ -14881,7 +16076,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleEssentialOCLNavigationOperatorName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLNavigationOperatorName11112); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLNavigationOperatorName12518); if (state.failed) return current;
 
             }
 
@@ -14899,7 +16094,7 @@
 
 
     // $ANTLR start "ruleEssentialOCLNavigationOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5045:1: ruleEssentialOCLNavigationOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '.' | kw= '->' | kw= '?.' | kw= '?->' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5279:1: ruleEssentialOCLNavigationOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '.' | kw= '->' | kw= '?.' | kw= '?->' ) ;
     public final AntlrDatatypeRuleToken ruleEssentialOCLNavigationOperatorName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -14908,45 +16103,45 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5048:28: ( (kw= '.' | kw= '->' | kw= '?.' | kw= '?->' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5049:1: (kw= '.' | kw= '->' | kw= '?.' | kw= '?->' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5282:28: ( (kw= '.' | kw= '->' | kw= '?.' | kw= '?->' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5283:1: (kw= '.' | kw= '->' | kw= '?.' | kw= '?->' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5049:1: (kw= '.' | kw= '->' | kw= '?.' | kw= '?->' )
-            int alt137=4;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5283:1: (kw= '.' | kw= '->' | kw= '?.' | kw= '?->' )
+            int alt175=4;
             switch ( input.LA(1) ) {
             case 94:
                 {
-                alt137=1;
+                alt175=1;
                 }
                 break;
             case 95:
                 {
-                alt137=2;
+                alt175=2;
                 }
                 break;
             case 96:
                 {
-                alt137=3;
+                alt175=3;
                 }
                 break;
             case 97:
                 {
-                alt137=4;
+                alt175=4;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 137, 0, input);
+                    new NoViableAltException("", 175, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt137) {
+            switch (alt175) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5050:2: kw= '.'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5284:2: kw= '.'
                     {
-                    kw=(Token)match(input,94,FollowSets000.FOLLOW_94_in_ruleEssentialOCLNavigationOperatorName11150); if (state.failed) return current;
+                    kw=(Token)match(input,94,FollowSets000.FOLLOW_94_in_ruleEssentialOCLNavigationOperatorName12556); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14957,9 +16152,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5057:2: kw= '->'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5291:2: kw= '->'
                     {
-                    kw=(Token)match(input,95,FollowSets000.FOLLOW_95_in_ruleEssentialOCLNavigationOperatorName11169); if (state.failed) return current;
+                    kw=(Token)match(input,95,FollowSets000.FOLLOW_95_in_ruleEssentialOCLNavigationOperatorName12575); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14970,9 +16165,9 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5064:2: kw= '?.'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5298:2: kw= '?.'
                     {
-                    kw=(Token)match(input,96,FollowSets000.FOLLOW_96_in_ruleEssentialOCLNavigationOperatorName11188); if (state.failed) return current;
+                    kw=(Token)match(input,96,FollowSets000.FOLLOW_96_in_ruleEssentialOCLNavigationOperatorName12594); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -14983,9 +16178,9 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5071:2: kw= '?->'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5305:2: kw= '?->'
                     {
-                    kw=(Token)match(input,97,FollowSets000.FOLLOW_97_in_ruleEssentialOCLNavigationOperatorName11207); if (state.failed) return current;
+                    kw=(Token)match(input,97,FollowSets000.FOLLOW_97_in_ruleEssentialOCLNavigationOperatorName12613); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -15018,7 +16213,7 @@
 
 
     // $ANTLR start "entryRuleBinaryOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5084:1: entryRuleBinaryOperatorName returns [String current=null] : iv_ruleBinaryOperatorName= ruleBinaryOperatorName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5318:1: entryRuleBinaryOperatorName returns [String current=null] : iv_ruleBinaryOperatorName= ruleBinaryOperatorName EOF ;
     public final String entryRuleBinaryOperatorName() throws RecognitionException {
         String current = null;
 
@@ -15026,13 +16221,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5085:2: (iv_ruleBinaryOperatorName= ruleBinaryOperatorName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5086:2: iv_ruleBinaryOperatorName= ruleBinaryOperatorName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5319:2: (iv_ruleBinaryOperatorName= ruleBinaryOperatorName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5320:2: iv_ruleBinaryOperatorName= ruleBinaryOperatorName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getBinaryOperatorNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleBinaryOperatorName_in_entryRuleBinaryOperatorName11248);
+            pushFollow(FollowSets000.FOLLOW_ruleBinaryOperatorName_in_entryRuleBinaryOperatorName12654);
             iv_ruleBinaryOperatorName=ruleBinaryOperatorName();
 
             state._fsp--;
@@ -15040,7 +16235,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleBinaryOperatorName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleBinaryOperatorName11259); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleBinaryOperatorName12665); if (state.failed) return current;
 
             }
 
@@ -15058,7 +16253,7 @@
 
 
     // $ANTLR start "ruleBinaryOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5093:1: ruleBinaryOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_InfixOperatorName_0= ruleInfixOperatorName | this_NavigationOperatorName_1= ruleNavigationOperatorName ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5327:1: ruleBinaryOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_InfixOperatorName_0= ruleInfixOperatorName | this_NavigationOperatorName_1= ruleNavigationOperatorName ) ;
     public final AntlrDatatypeRuleToken ruleBinaryOperatorName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -15070,36 +16265,36 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5096:28: ( (this_InfixOperatorName_0= ruleInfixOperatorName | this_NavigationOperatorName_1= ruleNavigationOperatorName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5097:1: (this_InfixOperatorName_0= ruleInfixOperatorName | this_NavigationOperatorName_1= ruleNavigationOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5330:28: ( (this_InfixOperatorName_0= ruleInfixOperatorName | this_NavigationOperatorName_1= ruleNavigationOperatorName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5331:1: (this_InfixOperatorName_0= ruleInfixOperatorName | this_NavigationOperatorName_1= ruleNavigationOperatorName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5097:1: (this_InfixOperatorName_0= ruleInfixOperatorName | this_NavigationOperatorName_1= ruleNavigationOperatorName )
-            int alt138=2;
-            int LA138_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5331:1: (this_InfixOperatorName_0= ruleInfixOperatorName | this_NavigationOperatorName_1= ruleNavigationOperatorName )
+            int alt176=2;
+            int LA176_0 = input.LA(1);
 
-            if ( (LA138_0==18||LA138_0==63||(LA138_0>=81 && LA138_0<=82)||(LA138_0>=84 && LA138_0<=93)) ) {
-                alt138=1;
+            if ( (LA176_0==18||LA176_0==63||(LA176_0>=81 && LA176_0<=82)||(LA176_0>=84 && LA176_0<=93)) ) {
+                alt176=1;
             }
-            else if ( ((LA138_0>=94 && LA138_0<=97)) ) {
-                alt138=2;
+            else if ( ((LA176_0>=94 && LA176_0<=97)) ) {
+                alt176=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 138, 0, input);
+                    new NoViableAltException("", 176, 0, input);
 
                 throw nvae;
             }
-            switch (alt138) {
+            switch (alt176) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5098:5: this_InfixOperatorName_0= ruleInfixOperatorName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5332:5: this_InfixOperatorName_0= ruleInfixOperatorName
                     {
                     if ( state.backtracking==0 ) {
                        
                               newCompositeNode(grammarAccess.getBinaryOperatorNameAccess().getInfixOperatorNameParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleInfixOperatorName_in_ruleBinaryOperatorName11306);
+                    pushFollow(FollowSets000.FOLLOW_ruleInfixOperatorName_in_ruleBinaryOperatorName12712);
                     this_InfixOperatorName_0=ruleInfixOperatorName();
 
                     state._fsp--;
@@ -15118,14 +16313,14 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5110:5: this_NavigationOperatorName_1= ruleNavigationOperatorName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5344:5: this_NavigationOperatorName_1= ruleNavigationOperatorName
                     {
                     if ( state.backtracking==0 ) {
                        
                               newCompositeNode(grammarAccess.getBinaryOperatorNameAccess().getNavigationOperatorNameParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNavigationOperatorName_in_ruleBinaryOperatorName11339);
+                    pushFollow(FollowSets000.FOLLOW_ruleNavigationOperatorName_in_ruleBinaryOperatorName12745);
                     this_NavigationOperatorName_1=ruleNavigationOperatorName();
 
                     state._fsp--;
@@ -15166,7 +16361,7 @@
 
 
     // $ANTLR start "entryRuleInfixOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5128:1: entryRuleInfixOperatorName returns [String current=null] : iv_ruleInfixOperatorName= ruleInfixOperatorName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5362:1: entryRuleInfixOperatorName returns [String current=null] : iv_ruleInfixOperatorName= ruleInfixOperatorName EOF ;
     public final String entryRuleInfixOperatorName() throws RecognitionException {
         String current = null;
 
@@ -15174,13 +16369,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5129:2: (iv_ruleInfixOperatorName= ruleInfixOperatorName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5130:2: iv_ruleInfixOperatorName= ruleInfixOperatorName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5363:2: (iv_ruleInfixOperatorName= ruleInfixOperatorName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5364:2: iv_ruleInfixOperatorName= ruleInfixOperatorName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getInfixOperatorNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleInfixOperatorName_in_entryRuleInfixOperatorName11385);
+            pushFollow(FollowSets000.FOLLOW_ruleInfixOperatorName_in_entryRuleInfixOperatorName12791);
             iv_ruleInfixOperatorName=ruleInfixOperatorName();
 
             state._fsp--;
@@ -15188,7 +16383,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleInfixOperatorName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleInfixOperatorName11396); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleInfixOperatorName12802); if (state.failed) return current;
 
             }
 
@@ -15206,7 +16401,7 @@
 
 
     // $ANTLR start "ruleInfixOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5137:1: ruleInfixOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_EssentialOCLInfixOperatorName_0= ruleEssentialOCLInfixOperatorName ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5371:1: ruleInfixOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_EssentialOCLInfixOperatorName_0= ruleEssentialOCLInfixOperatorName ;
     public final AntlrDatatypeRuleToken ruleInfixOperatorName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -15216,15 +16411,15 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5140:28: (this_EssentialOCLInfixOperatorName_0= ruleEssentialOCLInfixOperatorName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5142:5: this_EssentialOCLInfixOperatorName_0= ruleEssentialOCLInfixOperatorName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5374:28: (this_EssentialOCLInfixOperatorName_0= ruleEssentialOCLInfixOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5376:5: this_EssentialOCLInfixOperatorName_0= ruleEssentialOCLInfixOperatorName
             {
             if ( state.backtracking==0 ) {
                
                       newCompositeNode(grammarAccess.getInfixOperatorNameAccess().getEssentialOCLInfixOperatorNameParserRuleCall()); 
                   
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLInfixOperatorName_in_ruleInfixOperatorName11442);
+            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLInfixOperatorName_in_ruleInfixOperatorName12848);
             this_EssentialOCLInfixOperatorName_0=ruleEssentialOCLInfixOperatorName();
 
             state._fsp--;
@@ -15259,7 +16454,7 @@
 
 
     // $ANTLR start "entryRuleNavigationOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5160:1: entryRuleNavigationOperatorName returns [String current=null] : iv_ruleNavigationOperatorName= ruleNavigationOperatorName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5394:1: entryRuleNavigationOperatorName returns [String current=null] : iv_ruleNavigationOperatorName= ruleNavigationOperatorName EOF ;
     public final String entryRuleNavigationOperatorName() throws RecognitionException {
         String current = null;
 
@@ -15267,13 +16462,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5161:2: (iv_ruleNavigationOperatorName= ruleNavigationOperatorName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5162:2: iv_ruleNavigationOperatorName= ruleNavigationOperatorName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5395:2: (iv_ruleNavigationOperatorName= ruleNavigationOperatorName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5396:2: iv_ruleNavigationOperatorName= ruleNavigationOperatorName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNavigationOperatorNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNavigationOperatorName_in_entryRuleNavigationOperatorName11487);
+            pushFollow(FollowSets000.FOLLOW_ruleNavigationOperatorName_in_entryRuleNavigationOperatorName12893);
             iv_ruleNavigationOperatorName=ruleNavigationOperatorName();
 
             state._fsp--;
@@ -15281,7 +16476,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNavigationOperatorName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigationOperatorName11498); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigationOperatorName12904); if (state.failed) return current;
 
             }
 
@@ -15299,7 +16494,7 @@
 
 
     // $ANTLR start "ruleNavigationOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5169:1: ruleNavigationOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_EssentialOCLNavigationOperatorName_0= ruleEssentialOCLNavigationOperatorName ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5403:1: ruleNavigationOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_EssentialOCLNavigationOperatorName_0= ruleEssentialOCLNavigationOperatorName ;
     public final AntlrDatatypeRuleToken ruleNavigationOperatorName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -15309,15 +16504,15 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5172:28: (this_EssentialOCLNavigationOperatorName_0= ruleEssentialOCLNavigationOperatorName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5174:5: this_EssentialOCLNavigationOperatorName_0= ruleEssentialOCLNavigationOperatorName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5406:28: (this_EssentialOCLNavigationOperatorName_0= ruleEssentialOCLNavigationOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5408:5: this_EssentialOCLNavigationOperatorName_0= ruleEssentialOCLNavigationOperatorName
             {
             if ( state.backtracking==0 ) {
                
                       newCompositeNode(grammarAccess.getNavigationOperatorNameAccess().getEssentialOCLNavigationOperatorNameParserRuleCall()); 
                   
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLNavigationOperatorName_in_ruleNavigationOperatorName11544);
+            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLNavigationOperatorName_in_ruleNavigationOperatorName12950);
             this_EssentialOCLNavigationOperatorName_0=ruleEssentialOCLNavigationOperatorName();
 
             state._fsp--;
@@ -15352,7 +16547,7 @@
 
 
     // $ANTLR start "entryRuleUnaryOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5192:1: entryRuleUnaryOperatorName returns [String current=null] : iv_ruleUnaryOperatorName= ruleUnaryOperatorName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5426:1: entryRuleUnaryOperatorName returns [String current=null] : iv_ruleUnaryOperatorName= ruleUnaryOperatorName EOF ;
     public final String entryRuleUnaryOperatorName() throws RecognitionException {
         String current = null;
 
@@ -15360,13 +16555,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5193:2: (iv_ruleUnaryOperatorName= ruleUnaryOperatorName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5194:2: iv_ruleUnaryOperatorName= ruleUnaryOperatorName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5427:2: (iv_ruleUnaryOperatorName= ruleUnaryOperatorName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5428:2: iv_ruleUnaryOperatorName= ruleUnaryOperatorName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getUnaryOperatorNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnaryOperatorName_in_entryRuleUnaryOperatorName11589);
+            pushFollow(FollowSets000.FOLLOW_ruleUnaryOperatorName_in_entryRuleUnaryOperatorName12995);
             iv_ruleUnaryOperatorName=ruleUnaryOperatorName();
 
             state._fsp--;
@@ -15374,7 +16569,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleUnaryOperatorName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUnaryOperatorName11600); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUnaryOperatorName13006); if (state.failed) return current;
 
             }
 
@@ -15392,7 +16587,7 @@
 
 
     // $ANTLR start "ruleUnaryOperatorName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5201:1: ruleUnaryOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_EssentialOCLUnaryOperatorName_0= ruleEssentialOCLUnaryOperatorName ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5435:1: ruleUnaryOperatorName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_EssentialOCLUnaryOperatorName_0= ruleEssentialOCLUnaryOperatorName ;
     public final AntlrDatatypeRuleToken ruleUnaryOperatorName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -15402,15 +16597,15 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5204:28: (this_EssentialOCLUnaryOperatorName_0= ruleEssentialOCLUnaryOperatorName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5206:5: this_EssentialOCLUnaryOperatorName_0= ruleEssentialOCLUnaryOperatorName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5438:28: (this_EssentialOCLUnaryOperatorName_0= ruleEssentialOCLUnaryOperatorName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5440:5: this_EssentialOCLUnaryOperatorName_0= ruleEssentialOCLUnaryOperatorName
             {
             if ( state.backtracking==0 ) {
                
                       newCompositeNode(grammarAccess.getUnaryOperatorNameAccess().getEssentialOCLUnaryOperatorNameParserRuleCall()); 
                   
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnaryOperatorName_in_ruleUnaryOperatorName11646);
+            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnaryOperatorName_in_ruleUnaryOperatorName13052);
             this_EssentialOCLUnaryOperatorName_0=ruleEssentialOCLUnaryOperatorName();
 
             state._fsp--;
@@ -15445,7 +16640,7 @@
 
 
     // $ANTLR start "entryRuleEssentialOCLUnrestrictedName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5224:1: entryRuleEssentialOCLUnrestrictedName returns [String current=null] : iv_ruleEssentialOCLUnrestrictedName= ruleEssentialOCLUnrestrictedName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5458:1: entryRuleEssentialOCLUnrestrictedName returns [String current=null] : iv_ruleEssentialOCLUnrestrictedName= ruleEssentialOCLUnrestrictedName EOF ;
     public final String entryRuleEssentialOCLUnrestrictedName() throws RecognitionException {
         String current = null;
 
@@ -15453,13 +16648,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5225:2: (iv_ruleEssentialOCLUnrestrictedName= ruleEssentialOCLUnrestrictedName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5226:2: iv_ruleEssentialOCLUnrestrictedName= ruleEssentialOCLUnrestrictedName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5459:2: (iv_ruleEssentialOCLUnrestrictedName= ruleEssentialOCLUnrestrictedName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5460:2: iv_ruleEssentialOCLUnrestrictedName= ruleEssentialOCLUnrestrictedName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getEssentialOCLUnrestrictedNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnrestrictedName_in_entryRuleEssentialOCLUnrestrictedName11691);
+            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnrestrictedName_in_entryRuleEssentialOCLUnrestrictedName13097);
             iv_ruleEssentialOCLUnrestrictedName=ruleEssentialOCLUnrestrictedName();
 
             state._fsp--;
@@ -15467,7 +16662,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleEssentialOCLUnrestrictedName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLUnrestrictedName11702); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLUnrestrictedName13108); if (state.failed) return current;
 
             }
 
@@ -15485,7 +16680,7 @@
 
 
     // $ANTLR start "ruleEssentialOCLUnrestrictedName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5233:1: ruleEssentialOCLUnrestrictedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_Identifier_0= ruleIdentifier ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5467:1: ruleEssentialOCLUnrestrictedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_Identifier_0= ruleIdentifier ;
     public final AntlrDatatypeRuleToken ruleEssentialOCLUnrestrictedName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -15495,15 +16690,15 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5236:28: (this_Identifier_0= ruleIdentifier )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5238:5: this_Identifier_0= ruleIdentifier
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5470:28: (this_Identifier_0= ruleIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5472:5: this_Identifier_0= ruleIdentifier
             {
             if ( state.backtracking==0 ) {
                
                       newCompositeNode(grammarAccess.getEssentialOCLUnrestrictedNameAccess().getIdentifierParserRuleCall()); 
                   
             }
-            pushFollow(FollowSets000.FOLLOW_ruleIdentifier_in_ruleEssentialOCLUnrestrictedName11748);
+            pushFollow(FollowSets000.FOLLOW_ruleIdentifier_in_ruleEssentialOCLUnrestrictedName13154);
             this_Identifier_0=ruleIdentifier();
 
             state._fsp--;
@@ -15538,7 +16733,7 @@
 
 
     // $ANTLR start "entryRuleEssentialOCLUnreservedName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5256:1: entryRuleEssentialOCLUnreservedName returns [String current=null] : iv_ruleEssentialOCLUnreservedName= ruleEssentialOCLUnreservedName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5490:1: entryRuleEssentialOCLUnreservedName returns [String current=null] : iv_ruleEssentialOCLUnreservedName= ruleEssentialOCLUnreservedName EOF ;
     public final String entryRuleEssentialOCLUnreservedName() throws RecognitionException {
         String current = null;
 
@@ -15546,13 +16741,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5257:2: (iv_ruleEssentialOCLUnreservedName= ruleEssentialOCLUnreservedName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5258:2: iv_ruleEssentialOCLUnreservedName= ruleEssentialOCLUnreservedName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5491:2: (iv_ruleEssentialOCLUnreservedName= ruleEssentialOCLUnreservedName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5492:2: iv_ruleEssentialOCLUnreservedName= ruleEssentialOCLUnreservedName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getEssentialOCLUnreservedNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnreservedName_in_entryRuleEssentialOCLUnreservedName11793);
+            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnreservedName_in_entryRuleEssentialOCLUnreservedName13199);
             iv_ruleEssentialOCLUnreservedName=ruleEssentialOCLUnreservedName();
 
             state._fsp--;
@@ -15560,7 +16755,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleEssentialOCLUnreservedName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLUnreservedName11804); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEssentialOCLUnreservedName13210); if (state.failed) return current;
 
             }
 
@@ -15578,7 +16773,7 @@
 
 
     // $ANTLR start "ruleEssentialOCLUnreservedName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5265:1: ruleEssentialOCLUnreservedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_UnrestrictedName_0= ruleUnrestrictedName | this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier | this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier | kw= 'Tuple' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5499:1: ruleEssentialOCLUnreservedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_UnrestrictedName_0= ruleUnrestrictedName | this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier | this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier | kw= 'Tuple' ) ;
     public final AntlrDatatypeRuleToken ruleEssentialOCLUnreservedName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -15593,11 +16788,11 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5268:28: ( (this_UnrestrictedName_0= ruleUnrestrictedName | this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier | this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier | kw= 'Tuple' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5269:1: (this_UnrestrictedName_0= ruleUnrestrictedName | this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier | this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier | kw= 'Tuple' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5502:28: ( (this_UnrestrictedName_0= ruleUnrestrictedName | this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier | this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier | kw= 'Tuple' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5503:1: (this_UnrestrictedName_0= ruleUnrestrictedName | this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier | this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier | kw= 'Tuple' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5269:1: (this_UnrestrictedName_0= ruleUnrestrictedName | this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier | this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier | kw= 'Tuple' )
-            int alt139=4;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5503:1: (this_UnrestrictedName_0= ruleUnrestrictedName | this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier | this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier | kw= 'Tuple' )
+            int alt177=4;
             switch ( input.LA(1) ) {
             case RULE_SIMPLE_ID:
             case RULE_ESCAPED_ID:
@@ -15644,7 +16839,7 @@
             case 75:
             case 80:
                 {
-                alt139=1;
+                alt177=1;
                 }
                 break;
             case 108:
@@ -15653,7 +16848,7 @@
             case 111:
             case 112:
                 {
-                alt139=2;
+                alt177=2;
                 }
                 break;
             case 100:
@@ -15665,32 +16860,32 @@
             case 106:
             case 107:
                 {
-                alt139=3;
+                alt177=3;
                 }
                 break;
             case 98:
                 {
-                alt139=4;
+                alt177=4;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 139, 0, input);
+                    new NoViableAltException("", 177, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt139) {
+            switch (alt177) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5270:5: this_UnrestrictedName_0= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5504:5: this_UnrestrictedName_0= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
                               newCompositeNode(grammarAccess.getEssentialOCLUnreservedNameAccess().getUnrestrictedNameParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleEssentialOCLUnreservedName11851);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleEssentialOCLUnreservedName13257);
                     this_UnrestrictedName_0=ruleUnrestrictedName();
 
                     state._fsp--;
@@ -15709,14 +16904,14 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5282:5: this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5516:5: this_CollectionTypeIdentifier_1= ruleCollectionTypeIdentifier
                     {
                     if ( state.backtracking==0 ) {
                        
                               newCompositeNode(grammarAccess.getEssentialOCLUnreservedNameAccess().getCollectionTypeIdentifierParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeIdentifier_in_ruleEssentialOCLUnreservedName11884);
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeIdentifier_in_ruleEssentialOCLUnreservedName13290);
                     this_CollectionTypeIdentifier_1=ruleCollectionTypeIdentifier();
 
                     state._fsp--;
@@ -15735,14 +16930,14 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5294:5: this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5528:5: this_PrimitiveTypeIdentifier_2= rulePrimitiveTypeIdentifier
                     {
                     if ( state.backtracking==0 ) {
                        
                               newCompositeNode(grammarAccess.getEssentialOCLUnreservedNameAccess().getPrimitiveTypeIdentifierParserRuleCall_2()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeIdentifier_in_ruleEssentialOCLUnreservedName11917);
+                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeIdentifier_in_ruleEssentialOCLUnreservedName13323);
                     this_PrimitiveTypeIdentifier_2=rulePrimitiveTypeIdentifier();
 
                     state._fsp--;
@@ -15761,9 +16956,9 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5306:2: kw= 'Tuple'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5540:2: kw= 'Tuple'
                     {
-                    kw=(Token)match(input,98,FollowSets000.FOLLOW_98_in_ruleEssentialOCLUnreservedName11941); if (state.failed) return current;
+                    kw=(Token)match(input,98,FollowSets000.FOLLOW_98_in_ruleEssentialOCLUnreservedName13347); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -15796,7 +16991,7 @@
 
 
     // $ANTLR start "entryRuleUnreservedName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5319:1: entryRuleUnreservedName returns [String current=null] : iv_ruleUnreservedName= ruleUnreservedName EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5553:1: entryRuleUnreservedName returns [String current=null] : iv_ruleUnreservedName= ruleUnreservedName EOF ;
     public final String entryRuleUnreservedName() throws RecognitionException {
         String current = null;
 
@@ -15804,13 +16999,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5320:2: (iv_ruleUnreservedName= ruleUnreservedName EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5321:2: iv_ruleUnreservedName= ruleUnreservedName EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5554:2: (iv_ruleUnreservedName= ruleUnreservedName EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5555:2: iv_ruleUnreservedName= ruleUnreservedName EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getUnreservedNameRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnreservedName_in_entryRuleUnreservedName11982);
+            pushFollow(FollowSets000.FOLLOW_ruleUnreservedName_in_entryRuleUnreservedName13388);
             iv_ruleUnreservedName=ruleUnreservedName();
 
             state._fsp--;
@@ -15818,7 +17013,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleUnreservedName.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUnreservedName11993); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUnreservedName13399); if (state.failed) return current;
 
             }
 
@@ -15836,7 +17031,7 @@
 
 
     // $ANTLR start "ruleUnreservedName"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5328:1: ruleUnreservedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_EssentialOCLUnreservedName_0= ruleEssentialOCLUnreservedName ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5562:1: ruleUnreservedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_EssentialOCLUnreservedName_0= ruleEssentialOCLUnreservedName ;
     public final AntlrDatatypeRuleToken ruleUnreservedName() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -15846,15 +17041,15 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5331:28: (this_EssentialOCLUnreservedName_0= ruleEssentialOCLUnreservedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5333:5: this_EssentialOCLUnreservedName_0= ruleEssentialOCLUnreservedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5565:28: (this_EssentialOCLUnreservedName_0= ruleEssentialOCLUnreservedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5567:5: this_EssentialOCLUnreservedName_0= ruleEssentialOCLUnreservedName
             {
             if ( state.backtracking==0 ) {
                
                       newCompositeNode(grammarAccess.getUnreservedNameAccess().getEssentialOCLUnreservedNameParserRuleCall()); 
                   
             }
-            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnreservedName_in_ruleUnreservedName12039);
+            pushFollow(FollowSets000.FOLLOW_ruleEssentialOCLUnreservedName_in_ruleUnreservedName13445);
             this_EssentialOCLUnreservedName_0=ruleEssentialOCLUnreservedName();
 
             state._fsp--;
@@ -15889,7 +17084,7 @@
 
 
     // $ANTLR start "entryRuleURIPathNameCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5351:1: entryRuleURIPathNameCS returns [EObject current=null] : iv_ruleURIPathNameCS= ruleURIPathNameCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5585:1: entryRuleURIPathNameCS returns [EObject current=null] : iv_ruleURIPathNameCS= ruleURIPathNameCS EOF ;
     public final EObject entryRuleURIPathNameCS() throws RecognitionException {
         EObject current = null;
 
@@ -15897,13 +17092,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5352:2: (iv_ruleURIPathNameCS= ruleURIPathNameCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5353:2: iv_ruleURIPathNameCS= ruleURIPathNameCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5586:2: (iv_ruleURIPathNameCS= ruleURIPathNameCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5587:2: iv_ruleURIPathNameCS= ruleURIPathNameCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getURIPathNameCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleURIPathNameCS_in_entryRuleURIPathNameCS12083);
+            pushFollow(FollowSets000.FOLLOW_ruleURIPathNameCS_in_entryRuleURIPathNameCS13489);
             iv_ruleURIPathNameCS=ruleURIPathNameCS();
 
             state._fsp--;
@@ -15911,7 +17106,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleURIPathNameCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleURIPathNameCS12093); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleURIPathNameCS13499); if (state.failed) return current;
 
             }
 
@@ -15929,7 +17124,7 @@
 
 
     // $ANTLR start "ruleURIPathNameCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5360:1: ruleURIPathNameCS returns [EObject current=null] : ( ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5594:1: ruleURIPathNameCS returns [EObject current=null] : ( ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* ) ;
     public final EObject ruleURIPathNameCS() throws RecognitionException {
         EObject current = null;
 
@@ -15942,24 +17137,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5363:28: ( ( ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5364:1: ( ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5597:28: ( ( ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5598:1: ( ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5364:1: ( ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5364:2: ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5598:1: ( ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5598:2: ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )*
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5364:2: ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5365:1: (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5598:2: ( (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5599:1: (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5365:1: (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5366:3: lv_ownedPathElements_0_0= ruleURIFirstPathElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5599:1: (lv_ownedPathElements_0_0= ruleURIFirstPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5600:3: lv_ownedPathElements_0_0= ruleURIFirstPathElementCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getURIPathNameCSAccess().getOwnedPathElementsURIFirstPathElementCSParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleURIFirstPathElementCS_in_ruleURIPathNameCS12139);
+            pushFollow(FollowSets000.FOLLOW_ruleURIFirstPathElementCS_in_ruleURIPathNameCS13545);
             lv_ownedPathElements_0_0=ruleURIFirstPathElementCS();
 
             state._fsp--;
@@ -15983,39 +17178,39 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5382:2: (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )*
-            loop140:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5616:2: (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )*
+            loop178:
             do {
-                int alt140=2;
-                int LA140_0 = input.LA(1);
+                int alt178=2;
+                int LA178_0 = input.LA(1);
 
-                if ( (LA140_0==99) ) {
-                    alt140=1;
+                if ( (LA178_0==99) ) {
+                    alt178=1;
                 }
 
 
-                switch (alt140) {
+                switch (alt178) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5382:4: otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5616:4: otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) )
             	    {
-            	    otherlv_1=(Token)match(input,99,FollowSets000.FOLLOW_99_in_ruleURIPathNameCS12152); if (state.failed) return current;
+            	    otherlv_1=(Token)match(input,99,FollowSets000.FOLLOW_99_in_ruleURIPathNameCS13558); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
             	          	newLeafNode(otherlv_1, grammarAccess.getURIPathNameCSAccess().getColonColonKeyword_1_0());
             	          
             	    }
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5386:1: ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5387:1: (lv_ownedPathElements_2_0= ruleNextPathElementCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5620:1: ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5621:1: (lv_ownedPathElements_2_0= ruleNextPathElementCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5387:1: (lv_ownedPathElements_2_0= ruleNextPathElementCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5388:3: lv_ownedPathElements_2_0= ruleNextPathElementCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5621:1: (lv_ownedPathElements_2_0= ruleNextPathElementCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5622:3: lv_ownedPathElements_2_0= ruleNextPathElementCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
             	      	        newCompositeNode(grammarAccess.getURIPathNameCSAccess().getOwnedPathElementsNextPathElementCSParserRuleCall_1_1_0()); 
             	      	    
             	    }
-            	    pushFollow(FollowSets000.FOLLOW_ruleNextPathElementCS_in_ruleURIPathNameCS12173);
+            	    pushFollow(FollowSets000.FOLLOW_ruleNextPathElementCS_in_ruleURIPathNameCS13579);
             	    lv_ownedPathElements_2_0=ruleNextPathElementCS();
 
             	    state._fsp--;
@@ -16044,7 +17239,7 @@
             	    break;
 
             	default :
-            	    break loop140;
+            	    break loop178;
                 }
             } while (true);
 
@@ -16071,7 +17266,7 @@
 
 
     // $ANTLR start "entryRuleURIFirstPathElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5412:1: entryRuleURIFirstPathElementCS returns [EObject current=null] : iv_ruleURIFirstPathElementCS= ruleURIFirstPathElementCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5646:1: entryRuleURIFirstPathElementCS returns [EObject current=null] : iv_ruleURIFirstPathElementCS= ruleURIFirstPathElementCS EOF ;
     public final EObject entryRuleURIFirstPathElementCS() throws RecognitionException {
         EObject current = null;
 
@@ -16079,13 +17274,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5413:2: (iv_ruleURIFirstPathElementCS= ruleURIFirstPathElementCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5414:2: iv_ruleURIFirstPathElementCS= ruleURIFirstPathElementCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5647:2: (iv_ruleURIFirstPathElementCS= ruleURIFirstPathElementCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5648:2: iv_ruleURIFirstPathElementCS= ruleURIFirstPathElementCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getURIFirstPathElementCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleURIFirstPathElementCS_in_entryRuleURIFirstPathElementCS12211);
+            pushFollow(FollowSets000.FOLLOW_ruleURIFirstPathElementCS_in_entryRuleURIFirstPathElementCS13617);
             iv_ruleURIFirstPathElementCS=ruleURIFirstPathElementCS();
 
             state._fsp--;
@@ -16093,7 +17288,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleURIFirstPathElementCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleURIFirstPathElementCS12221); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleURIFirstPathElementCS13627); if (state.failed) return current;
 
             }
 
@@ -16111,42 +17306,42 @@
 
 
     // $ANTLR start "ruleURIFirstPathElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5421:1: ruleURIFirstPathElementCS returns [EObject current=null] : ( ( ( ruleUnrestrictedName ) ) | ( () ( ( ruleURI ) ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5655:1: ruleURIFirstPathElementCS returns [EObject current=null] : ( ( ( ruleUnrestrictedName ) ) | ( () ( ( ruleURI ) ) ) ) ;
     public final EObject ruleURIFirstPathElementCS() throws RecognitionException {
         EObject current = null;
 
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5424:28: ( ( ( ( ruleUnrestrictedName ) ) | ( () ( ( ruleURI ) ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5425:1: ( ( ( ruleUnrestrictedName ) ) | ( () ( ( ruleURI ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5658:28: ( ( ( ( ruleUnrestrictedName ) ) | ( () ( ( ruleURI ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5659:1: ( ( ( ruleUnrestrictedName ) ) | ( () ( ( ruleURI ) ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5425:1: ( ( ( ruleUnrestrictedName ) ) | ( () ( ( ruleURI ) ) ) )
-            int alt141=2;
-            int LA141_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5659:1: ( ( ( ruleUnrestrictedName ) ) | ( () ( ( ruleURI ) ) ) )
+            int alt179=2;
+            int LA179_0 = input.LA(1);
 
-            if ( ((LA141_0>=RULE_SIMPLE_ID && LA141_0<=RULE_ESCAPED_ID)||LA141_0==17||(LA141_0>=19 && LA141_0<=54)||LA141_0==59||LA141_0==72||(LA141_0>=74 && LA141_0<=75)||LA141_0==80) ) {
-                alt141=1;
+            if ( ((LA179_0>=RULE_SIMPLE_ID && LA179_0<=RULE_ESCAPED_ID)||LA179_0==17||(LA179_0>=19 && LA179_0<=54)||LA179_0==59||LA179_0==72||(LA179_0>=74 && LA179_0<=75)||LA179_0==80) ) {
+                alt179=1;
             }
-            else if ( (LA141_0==RULE_SINGLE_QUOTED_STRING) ) {
-                alt141=2;
+            else if ( (LA179_0==RULE_SINGLE_QUOTED_STRING) ) {
+                alt179=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 141, 0, input);
+                    new NoViableAltException("", 179, 0, input);
 
                 throw nvae;
             }
-            switch (alt141) {
+            switch (alt179) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5425:2: ( ( ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5659:2: ( ( ruleUnrestrictedName ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5425:2: ( ( ruleUnrestrictedName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5426:1: ( ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5659:2: ( ( ruleUnrestrictedName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5660:1: ( ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5426:1: ( ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5427:3: ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5660:1: ( ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5661:3: ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -16165,7 +17360,7 @@
                       	        newCompositeNode(grammarAccess.getURIFirstPathElementCSAccess().getReferredElementNamedElementCrossReference_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleURIFirstPathElementCS12273);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleURIFirstPathElementCS13679);
                     ruleUnrestrictedName();
 
                     state._fsp--;
@@ -16185,13 +17380,13 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5444:6: ( () ( ( ruleURI ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5678:6: ( () ( ( ruleURI ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5444:6: ( () ( ( ruleURI ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5444:7: () ( ( ruleURI ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5678:6: ( () ( ( ruleURI ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5678:7: () ( ( ruleURI ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5444:7: ()
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5445:2: 
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5678:7: ()
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5679:2: 
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -16208,11 +17403,11 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5453:2: ( ( ruleURI ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5454:1: ( ruleURI )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5687:2: ( ( ruleURI ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5688:1: ( ruleURI )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5454:1: ( ruleURI )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5455:3: ruleURI
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5688:1: ( ruleURI )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5689:3: ruleURI
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -16231,7 +17426,7 @@
                       	        newCompositeNode(grammarAccess.getURIFirstPathElementCSAccess().getReferredElementNamespaceCrossReference_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleURI_in_ruleURIFirstPathElementCS12319);
+                    pushFollow(FollowSets000.FOLLOW_ruleURI_in_ruleURIFirstPathElementCS13725);
                     ruleURI();
 
                     state._fsp--;
@@ -16276,7 +17471,7 @@
 
 
     // $ANTLR start "entryRulePrimitiveTypeIdentifier"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5479:1: entryRulePrimitiveTypeIdentifier returns [String current=null] : iv_rulePrimitiveTypeIdentifier= rulePrimitiveTypeIdentifier EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5713:1: entryRulePrimitiveTypeIdentifier returns [String current=null] : iv_rulePrimitiveTypeIdentifier= rulePrimitiveTypeIdentifier EOF ;
     public final String entryRulePrimitiveTypeIdentifier() throws RecognitionException {
         String current = null;
 
@@ -16284,13 +17479,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5480:2: (iv_rulePrimitiveTypeIdentifier= rulePrimitiveTypeIdentifier EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5481:2: iv_rulePrimitiveTypeIdentifier= rulePrimitiveTypeIdentifier EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5714:2: (iv_rulePrimitiveTypeIdentifier= rulePrimitiveTypeIdentifier EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5715:2: iv_rulePrimitiveTypeIdentifier= rulePrimitiveTypeIdentifier EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPrimitiveTypeIdentifierRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeIdentifier_in_entryRulePrimitiveTypeIdentifier12357);
+            pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeIdentifier_in_entryRulePrimitiveTypeIdentifier13763);
             iv_rulePrimitiveTypeIdentifier=rulePrimitiveTypeIdentifier();
 
             state._fsp--;
@@ -16298,7 +17493,7 @@
             if ( state.backtracking==0 ) {
                current =iv_rulePrimitiveTypeIdentifier.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimitiveTypeIdentifier12368); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimitiveTypeIdentifier13774); if (state.failed) return current;
 
             }
 
@@ -16316,7 +17511,7 @@
 
 
     // $ANTLR start "rulePrimitiveTypeIdentifier"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5488:1: rulePrimitiveTypeIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'Boolean' | kw= 'Integer' | kw= 'Real' | kw= 'String' | kw= 'UnlimitedNatural' | kw= 'OclAny' | kw= 'OclInvalid' | kw= 'OclVoid' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5722:1: rulePrimitiveTypeIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'Boolean' | kw= 'Integer' | kw= 'Real' | kw= 'String' | kw= 'UnlimitedNatural' | kw= 'OclAny' | kw= 'OclInvalid' | kw= 'OclVoid' ) ;
     public final AntlrDatatypeRuleToken rulePrimitiveTypeIdentifier() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -16325,65 +17520,65 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5491:28: ( (kw= 'Boolean' | kw= 'Integer' | kw= 'Real' | kw= 'String' | kw= 'UnlimitedNatural' | kw= 'OclAny' | kw= 'OclInvalid' | kw= 'OclVoid' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5492:1: (kw= 'Boolean' | kw= 'Integer' | kw= 'Real' | kw= 'String' | kw= 'UnlimitedNatural' | kw= 'OclAny' | kw= 'OclInvalid' | kw= 'OclVoid' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5725:28: ( (kw= 'Boolean' | kw= 'Integer' | kw= 'Real' | kw= 'String' | kw= 'UnlimitedNatural' | kw= 'OclAny' | kw= 'OclInvalid' | kw= 'OclVoid' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5726:1: (kw= 'Boolean' | kw= 'Integer' | kw= 'Real' | kw= 'String' | kw= 'UnlimitedNatural' | kw= 'OclAny' | kw= 'OclInvalid' | kw= 'OclVoid' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5492:1: (kw= 'Boolean' | kw= 'Integer' | kw= 'Real' | kw= 'String' | kw= 'UnlimitedNatural' | kw= 'OclAny' | kw= 'OclInvalid' | kw= 'OclVoid' )
-            int alt142=8;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5726:1: (kw= 'Boolean' | kw= 'Integer' | kw= 'Real' | kw= 'String' | kw= 'UnlimitedNatural' | kw= 'OclAny' | kw= 'OclInvalid' | kw= 'OclVoid' )
+            int alt180=8;
             switch ( input.LA(1) ) {
             case 100:
                 {
-                alt142=1;
+                alt180=1;
                 }
                 break;
             case 101:
                 {
-                alt142=2;
+                alt180=2;
                 }
                 break;
             case 102:
                 {
-                alt142=3;
+                alt180=3;
                 }
                 break;
             case 103:
                 {
-                alt142=4;
+                alt180=4;
                 }
                 break;
             case 104:
                 {
-                alt142=5;
+                alt180=5;
                 }
                 break;
             case 105:
                 {
-                alt142=6;
+                alt180=6;
                 }
                 break;
             case 106:
                 {
-                alt142=7;
+                alt180=7;
                 }
                 break;
             case 107:
                 {
-                alt142=8;
+                alt180=8;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 142, 0, input);
+                    new NoViableAltException("", 180, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt142) {
+            switch (alt180) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5493:2: kw= 'Boolean'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5727:2: kw= 'Boolean'
                     {
-                    kw=(Token)match(input,100,FollowSets000.FOLLOW_100_in_rulePrimitiveTypeIdentifier12406); if (state.failed) return current;
+                    kw=(Token)match(input,100,FollowSets000.FOLLOW_100_in_rulePrimitiveTypeIdentifier13812); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16394,9 +17589,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5500:2: kw= 'Integer'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5734:2: kw= 'Integer'
                     {
-                    kw=(Token)match(input,101,FollowSets000.FOLLOW_101_in_rulePrimitiveTypeIdentifier12425); if (state.failed) return current;
+                    kw=(Token)match(input,101,FollowSets000.FOLLOW_101_in_rulePrimitiveTypeIdentifier13831); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16407,9 +17602,9 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5507:2: kw= 'Real'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5741:2: kw= 'Real'
                     {
-                    kw=(Token)match(input,102,FollowSets000.FOLLOW_102_in_rulePrimitiveTypeIdentifier12444); if (state.failed) return current;
+                    kw=(Token)match(input,102,FollowSets000.FOLLOW_102_in_rulePrimitiveTypeIdentifier13850); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16420,9 +17615,9 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5514:2: kw= 'String'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5748:2: kw= 'String'
                     {
-                    kw=(Token)match(input,103,FollowSets000.FOLLOW_103_in_rulePrimitiveTypeIdentifier12463); if (state.failed) return current;
+                    kw=(Token)match(input,103,FollowSets000.FOLLOW_103_in_rulePrimitiveTypeIdentifier13869); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16433,9 +17628,9 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5521:2: kw= 'UnlimitedNatural'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5755:2: kw= 'UnlimitedNatural'
                     {
-                    kw=(Token)match(input,104,FollowSets000.FOLLOW_104_in_rulePrimitiveTypeIdentifier12482); if (state.failed) return current;
+                    kw=(Token)match(input,104,FollowSets000.FOLLOW_104_in_rulePrimitiveTypeIdentifier13888); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16446,9 +17641,9 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5528:2: kw= 'OclAny'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5762:2: kw= 'OclAny'
                     {
-                    kw=(Token)match(input,105,FollowSets000.FOLLOW_105_in_rulePrimitiveTypeIdentifier12501); if (state.failed) return current;
+                    kw=(Token)match(input,105,FollowSets000.FOLLOW_105_in_rulePrimitiveTypeIdentifier13907); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16459,9 +17654,9 @@
                     }
                     break;
                 case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5535:2: kw= 'OclInvalid'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5769:2: kw= 'OclInvalid'
                     {
-                    kw=(Token)match(input,106,FollowSets000.FOLLOW_106_in_rulePrimitiveTypeIdentifier12520); if (state.failed) return current;
+                    kw=(Token)match(input,106,FollowSets000.FOLLOW_106_in_rulePrimitiveTypeIdentifier13926); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16472,9 +17667,9 @@
                     }
                     break;
                 case 8 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5542:2: kw= 'OclVoid'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5776:2: kw= 'OclVoid'
                     {
-                    kw=(Token)match(input,107,FollowSets000.FOLLOW_107_in_rulePrimitiveTypeIdentifier12539); if (state.failed) return current;
+                    kw=(Token)match(input,107,FollowSets000.FOLLOW_107_in_rulePrimitiveTypeIdentifier13945); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16507,7 +17702,7 @@
 
 
     // $ANTLR start "entryRulePrimitiveTypeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5555:1: entryRulePrimitiveTypeCS returns [EObject current=null] : iv_rulePrimitiveTypeCS= rulePrimitiveTypeCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5789:1: entryRulePrimitiveTypeCS returns [EObject current=null] : iv_rulePrimitiveTypeCS= rulePrimitiveTypeCS EOF ;
     public final EObject entryRulePrimitiveTypeCS() throws RecognitionException {
         EObject current = null;
 
@@ -16515,13 +17710,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5556:2: (iv_rulePrimitiveTypeCS= rulePrimitiveTypeCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5557:2: iv_rulePrimitiveTypeCS= rulePrimitiveTypeCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5790:2: (iv_rulePrimitiveTypeCS= rulePrimitiveTypeCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5791:2: iv_rulePrimitiveTypeCS= rulePrimitiveTypeCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPrimitiveTypeCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeCS_in_entryRulePrimitiveTypeCS12579);
+            pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeCS_in_entryRulePrimitiveTypeCS13985);
             iv_rulePrimitiveTypeCS=rulePrimitiveTypeCS();
 
             state._fsp--;
@@ -16529,7 +17724,7 @@
             if ( state.backtracking==0 ) {
                current =iv_rulePrimitiveTypeCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimitiveTypeCS12589); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimitiveTypeCS13995); if (state.failed) return current;
 
             }
 
@@ -16547,7 +17742,7 @@
 
 
     // $ANTLR start "rulePrimitiveTypeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5564:1: rulePrimitiveTypeCS returns [EObject current=null] : ( (lv_name_0_0= rulePrimitiveTypeIdentifier ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5798:1: rulePrimitiveTypeCS returns [EObject current=null] : ( (lv_name_0_0= rulePrimitiveTypeIdentifier ) ) ;
     public final EObject rulePrimitiveTypeCS() throws RecognitionException {
         EObject current = null;
 
@@ -16557,21 +17752,21 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5567:28: ( ( (lv_name_0_0= rulePrimitiveTypeIdentifier ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5568:1: ( (lv_name_0_0= rulePrimitiveTypeIdentifier ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5801:28: ( ( (lv_name_0_0= rulePrimitiveTypeIdentifier ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5802:1: ( (lv_name_0_0= rulePrimitiveTypeIdentifier ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5568:1: ( (lv_name_0_0= rulePrimitiveTypeIdentifier ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5569:1: (lv_name_0_0= rulePrimitiveTypeIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5802:1: ( (lv_name_0_0= rulePrimitiveTypeIdentifier ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5803:1: (lv_name_0_0= rulePrimitiveTypeIdentifier )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5569:1: (lv_name_0_0= rulePrimitiveTypeIdentifier )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5570:3: lv_name_0_0= rulePrimitiveTypeIdentifier
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5803:1: (lv_name_0_0= rulePrimitiveTypeIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5804:3: lv_name_0_0= rulePrimitiveTypeIdentifier
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getPrimitiveTypeCSAccess().getNamePrimitiveTypeIdentifierParserRuleCall_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeIdentifier_in_rulePrimitiveTypeCS12634);
+            pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeIdentifier_in_rulePrimitiveTypeCS14040);
             lv_name_0_0=rulePrimitiveTypeIdentifier();
 
             state._fsp--;
@@ -16615,7 +17810,7 @@
 
 
     // $ANTLR start "entryRuleCollectionTypeIdentifier"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5594:1: entryRuleCollectionTypeIdentifier returns [String current=null] : iv_ruleCollectionTypeIdentifier= ruleCollectionTypeIdentifier EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5828:1: entryRuleCollectionTypeIdentifier returns [String current=null] : iv_ruleCollectionTypeIdentifier= ruleCollectionTypeIdentifier EOF ;
     public final String entryRuleCollectionTypeIdentifier() throws RecognitionException {
         String current = null;
 
@@ -16623,13 +17818,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5595:2: (iv_ruleCollectionTypeIdentifier= ruleCollectionTypeIdentifier EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5596:2: iv_ruleCollectionTypeIdentifier= ruleCollectionTypeIdentifier EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5829:2: (iv_ruleCollectionTypeIdentifier= ruleCollectionTypeIdentifier EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5830:2: iv_ruleCollectionTypeIdentifier= ruleCollectionTypeIdentifier EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getCollectionTypeIdentifierRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeIdentifier_in_entryRuleCollectionTypeIdentifier12670);
+            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeIdentifier_in_entryRuleCollectionTypeIdentifier14076);
             iv_ruleCollectionTypeIdentifier=ruleCollectionTypeIdentifier();
 
             state._fsp--;
@@ -16637,7 +17832,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleCollectionTypeIdentifier.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionTypeIdentifier12681); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionTypeIdentifier14087); if (state.failed) return current;
 
             }
 
@@ -16655,7 +17850,7 @@
 
 
     // $ANTLR start "ruleCollectionTypeIdentifier"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5603:1: ruleCollectionTypeIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'Set' | kw= 'Bag' | kw= 'Sequence' | kw= 'Collection' | kw= 'OrderedSet' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5837:1: ruleCollectionTypeIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'Set' | kw= 'Bag' | kw= 'Sequence' | kw= 'Collection' | kw= 'OrderedSet' ) ;
     public final AntlrDatatypeRuleToken ruleCollectionTypeIdentifier() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -16664,50 +17859,50 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5606:28: ( (kw= 'Set' | kw= 'Bag' | kw= 'Sequence' | kw= 'Collection' | kw= 'OrderedSet' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5607:1: (kw= 'Set' | kw= 'Bag' | kw= 'Sequence' | kw= 'Collection' | kw= 'OrderedSet' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5840:28: ( (kw= 'Set' | kw= 'Bag' | kw= 'Sequence' | kw= 'Collection' | kw= 'OrderedSet' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5841:1: (kw= 'Set' | kw= 'Bag' | kw= 'Sequence' | kw= 'Collection' | kw= 'OrderedSet' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5607:1: (kw= 'Set' | kw= 'Bag' | kw= 'Sequence' | kw= 'Collection' | kw= 'OrderedSet' )
-            int alt143=5;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5841:1: (kw= 'Set' | kw= 'Bag' | kw= 'Sequence' | kw= 'Collection' | kw= 'OrderedSet' )
+            int alt181=5;
             switch ( input.LA(1) ) {
             case 108:
                 {
-                alt143=1;
+                alt181=1;
                 }
                 break;
             case 109:
                 {
-                alt143=2;
+                alt181=2;
                 }
                 break;
             case 110:
                 {
-                alt143=3;
+                alt181=3;
                 }
                 break;
             case 111:
                 {
-                alt143=4;
+                alt181=4;
                 }
                 break;
             case 112:
                 {
-                alt143=5;
+                alt181=5;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 143, 0, input);
+                    new NoViableAltException("", 181, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt143) {
+            switch (alt181) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5608:2: kw= 'Set'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5842:2: kw= 'Set'
                     {
-                    kw=(Token)match(input,108,FollowSets000.FOLLOW_108_in_ruleCollectionTypeIdentifier12719); if (state.failed) return current;
+                    kw=(Token)match(input,108,FollowSets000.FOLLOW_108_in_ruleCollectionTypeIdentifier14125); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16718,9 +17913,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5615:2: kw= 'Bag'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5849:2: kw= 'Bag'
                     {
-                    kw=(Token)match(input,109,FollowSets000.FOLLOW_109_in_ruleCollectionTypeIdentifier12738); if (state.failed) return current;
+                    kw=(Token)match(input,109,FollowSets000.FOLLOW_109_in_ruleCollectionTypeIdentifier14144); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16731,9 +17926,9 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5622:2: kw= 'Sequence'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5856:2: kw= 'Sequence'
                     {
-                    kw=(Token)match(input,110,FollowSets000.FOLLOW_110_in_ruleCollectionTypeIdentifier12757); if (state.failed) return current;
+                    kw=(Token)match(input,110,FollowSets000.FOLLOW_110_in_ruleCollectionTypeIdentifier14163); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16744,9 +17939,9 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5629:2: kw= 'Collection'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5863:2: kw= 'Collection'
                     {
-                    kw=(Token)match(input,111,FollowSets000.FOLLOW_111_in_ruleCollectionTypeIdentifier12776); if (state.failed) return current;
+                    kw=(Token)match(input,111,FollowSets000.FOLLOW_111_in_ruleCollectionTypeIdentifier14182); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16757,9 +17952,9 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5636:2: kw= 'OrderedSet'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5870:2: kw= 'OrderedSet'
                     {
-                    kw=(Token)match(input,112,FollowSets000.FOLLOW_112_in_ruleCollectionTypeIdentifier12795); if (state.failed) return current;
+                    kw=(Token)match(input,112,FollowSets000.FOLLOW_112_in_ruleCollectionTypeIdentifier14201); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -16792,7 +17987,7 @@
 
 
     // $ANTLR start "entryRuleCollectionTypeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5649:1: entryRuleCollectionTypeCS returns [EObject current=null] : iv_ruleCollectionTypeCS= ruleCollectionTypeCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5883:1: entryRuleCollectionTypeCS returns [EObject current=null] : iv_ruleCollectionTypeCS= ruleCollectionTypeCS EOF ;
     public final EObject entryRuleCollectionTypeCS() throws RecognitionException {
         EObject current = null;
 
@@ -16800,13 +17995,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5650:2: (iv_ruleCollectionTypeCS= ruleCollectionTypeCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5651:2: iv_ruleCollectionTypeCS= ruleCollectionTypeCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5884:2: (iv_ruleCollectionTypeCS= ruleCollectionTypeCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5885:2: iv_ruleCollectionTypeCS= ruleCollectionTypeCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getCollectionTypeCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_entryRuleCollectionTypeCS12835);
+            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_entryRuleCollectionTypeCS14241);
             iv_ruleCollectionTypeCS=ruleCollectionTypeCS();
 
             state._fsp--;
@@ -16814,7 +18009,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleCollectionTypeCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionTypeCS12845); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionTypeCS14251); if (state.failed) return current;
 
             }
 
@@ -16832,7 +18027,7 @@
 
 
     // $ANTLR start "ruleCollectionTypeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5658:1: ruleCollectionTypeCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5892:1: ruleCollectionTypeCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )? ) ;
     public final EObject ruleCollectionTypeCS() throws RecognitionException {
         EObject current = null;
 
@@ -16846,24 +18041,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5661:28: ( ( ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5662:1: ( ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5895:28: ( ( ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5896:1: ( ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5662:1: ( ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5662:2: ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5896:1: ( ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5896:2: ( (lv_name_0_0= ruleCollectionTypeIdentifier ) ) (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5662:2: ( (lv_name_0_0= ruleCollectionTypeIdentifier ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5663:1: (lv_name_0_0= ruleCollectionTypeIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5896:2: ( (lv_name_0_0= ruleCollectionTypeIdentifier ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5897:1: (lv_name_0_0= ruleCollectionTypeIdentifier )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5663:1: (lv_name_0_0= ruleCollectionTypeIdentifier )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5664:3: lv_name_0_0= ruleCollectionTypeIdentifier
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5897:1: (lv_name_0_0= ruleCollectionTypeIdentifier )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5898:3: lv_name_0_0= ruleCollectionTypeIdentifier
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getCollectionTypeCSAccess().getNameCollectionTypeIdentifierParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeIdentifier_in_ruleCollectionTypeCS12891);
+            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeIdentifier_in_ruleCollectionTypeCS14297);
             lv_name_0_0=ruleCollectionTypeIdentifier();
 
             state._fsp--;
@@ -16887,35 +18082,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5680:2: (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )?
-            int alt144=2;
-            int LA144_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5914:2: (otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')' )?
+            int alt182=2;
+            int LA182_0 = input.LA(1);
 
-            if ( (LA144_0==55) ) {
-                alt144=1;
+            if ( (LA182_0==55) ) {
+                alt182=1;
             }
-            switch (alt144) {
+            switch (alt182) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5680:4: otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5914:4: otherlv_1= '(' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) otherlv_3= ')'
                     {
-                    otherlv_1=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleCollectionTypeCS12904); if (state.failed) return current;
+                    otherlv_1=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleCollectionTypeCS14310); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_1, grammarAccess.getCollectionTypeCSAccess().getLeftParenthesisKeyword_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5684:1: ( (lv_ownedType_2_0= ruleTypeExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5685:1: (lv_ownedType_2_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5918:1: ( (lv_ownedType_2_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5919:1: (lv_ownedType_2_0= ruleTypeExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5685:1: (lv_ownedType_2_0= ruleTypeExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5686:3: lv_ownedType_2_0= ruleTypeExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5919:1: (lv_ownedType_2_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5920:3: lv_ownedType_2_0= ruleTypeExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getCollectionTypeCSAccess().getOwnedTypeTypeExpCSParserRuleCall_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleCollectionTypeCS12925);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleCollectionTypeCS14331);
                     lv_ownedType_2_0=ruleTypeExpCS();
 
                     state._fsp--;
@@ -16939,7 +18134,7 @@
 
                     }
 
-                    otherlv_3=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleCollectionTypeCS12937); if (state.failed) return current;
+                    otherlv_3=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleCollectionTypeCS14343); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_3, grammarAccess.getCollectionTypeCSAccess().getRightParenthesisKeyword_1_2());
@@ -16974,7 +18169,7 @@
 
 
     // $ANTLR start "entryRuleTupleTypeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5714:1: entryRuleTupleTypeCS returns [EObject current=null] : iv_ruleTupleTypeCS= ruleTupleTypeCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5948:1: entryRuleTupleTypeCS returns [EObject current=null] : iv_ruleTupleTypeCS= ruleTupleTypeCS EOF ;
     public final EObject entryRuleTupleTypeCS() throws RecognitionException {
         EObject current = null;
 
@@ -16982,13 +18177,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5715:2: (iv_ruleTupleTypeCS= ruleTupleTypeCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5716:2: iv_ruleTupleTypeCS= ruleTupleTypeCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5949:2: (iv_ruleTupleTypeCS= ruleTupleTypeCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5950:2: iv_ruleTupleTypeCS= ruleTupleTypeCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTupleTypeCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTupleTypeCS_in_entryRuleTupleTypeCS12975);
+            pushFollow(FollowSets000.FOLLOW_ruleTupleTypeCS_in_entryRuleTupleTypeCS14381);
             iv_ruleTupleTypeCS=ruleTupleTypeCS();
 
             state._fsp--;
@@ -16996,7 +18191,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTupleTypeCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTupleTypeCS12985); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTupleTypeCS14391); if (state.failed) return current;
 
             }
 
@@ -17014,7 +18209,7 @@
 
 
     // $ANTLR start "ruleTupleTypeCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5723:1: ruleTupleTypeCS returns [EObject current=null] : ( ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5957:1: ruleTupleTypeCS returns [EObject current=null] : ( ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )? ) ;
     public final EObject ruleTupleTypeCS() throws RecognitionException {
         EObject current = null;
 
@@ -17030,19 +18225,19 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5726:28: ( ( ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5727:1: ( ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5960:28: ( ( ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5961:1: ( ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5727:1: ( ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5727:2: ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5961:1: ( ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5961:2: ( (lv_name_0_0= 'Tuple' ) ) (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5727:2: ( (lv_name_0_0= 'Tuple' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5728:1: (lv_name_0_0= 'Tuple' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5961:2: ( (lv_name_0_0= 'Tuple' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5962:1: (lv_name_0_0= 'Tuple' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5728:1: (lv_name_0_0= 'Tuple' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5729:3: lv_name_0_0= 'Tuple'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5962:1: (lv_name_0_0= 'Tuple' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5963:3: lv_name_0_0= 'Tuple'
             {
-            lv_name_0_0=(Token)match(input,98,FollowSets000.FOLLOW_98_in_ruleTupleTypeCS13028); if (state.failed) return current;
+            lv_name_0_0=(Token)match(input,98,FollowSets000.FOLLOW_98_in_ruleTupleTypeCS14434); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                       newLeafNode(lv_name_0_0, grammarAccess.getTupleTypeCSAccess().getNameTupleKeyword_0_0());
@@ -17062,46 +18257,46 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5742:2: (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )?
-            int alt147=2;
-            int LA147_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5976:2: (otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')' )?
+            int alt185=2;
+            int LA185_0 = input.LA(1);
 
-            if ( (LA147_0==55) ) {
-                alt147=1;
+            if ( (LA185_0==55) ) {
+                alt185=1;
             }
-            switch (alt147) {
+            switch (alt185) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5742:4: otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5976:4: otherlv_1= '(' ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )? otherlv_5= ')'
                     {
-                    otherlv_1=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleTupleTypeCS13054); if (state.failed) return current;
+                    otherlv_1=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleTupleTypeCS14460); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_1, grammarAccess.getTupleTypeCSAccess().getLeftParenthesisKeyword_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5746:1: ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )?
-                    int alt146=2;
-                    int LA146_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5980:1: ( ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )* )?
+                    int alt184=2;
+                    int LA184_0 = input.LA(1);
 
-                    if ( ((LA146_0>=RULE_SIMPLE_ID && LA146_0<=RULE_ESCAPED_ID)||LA146_0==17||(LA146_0>=19 && LA146_0<=54)||LA146_0==59||LA146_0==72||(LA146_0>=74 && LA146_0<=75)||LA146_0==80) ) {
-                        alt146=1;
+                    if ( ((LA184_0>=RULE_SIMPLE_ID && LA184_0<=RULE_ESCAPED_ID)||LA184_0==17||(LA184_0>=19 && LA184_0<=54)||LA184_0==59||LA184_0==72||(LA184_0>=74 && LA184_0<=75)||LA184_0==80) ) {
+                        alt184=1;
                     }
-                    switch (alt146) {
+                    switch (alt184) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5746:2: ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )*
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5980:2: ( (lv_ownedParts_2_0= ruleTuplePartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )*
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5746:2: ( (lv_ownedParts_2_0= ruleTuplePartCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5747:1: (lv_ownedParts_2_0= ruleTuplePartCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5980:2: ( (lv_ownedParts_2_0= ruleTuplePartCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5981:1: (lv_ownedParts_2_0= ruleTuplePartCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5747:1: (lv_ownedParts_2_0= ruleTuplePartCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5748:3: lv_ownedParts_2_0= ruleTuplePartCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5981:1: (lv_ownedParts_2_0= ruleTuplePartCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5982:3: lv_ownedParts_2_0= ruleTuplePartCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getTupleTypeCSAccess().getOwnedPartsTuplePartCSParserRuleCall_1_1_0_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleTuplePartCS_in_ruleTupleTypeCS13076);
+                            pushFollow(FollowSets000.FOLLOW_ruleTuplePartCS_in_ruleTupleTypeCS14482);
                             lv_ownedParts_2_0=ruleTuplePartCS();
 
                             state._fsp--;
@@ -17125,39 +18320,39 @@
 
                             }
 
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5764:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )*
-                            loop145:
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5998:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) ) )*
+                            loop183:
                             do {
-                                int alt145=2;
-                                int LA145_0 = input.LA(1);
+                                int alt183=2;
+                                int LA183_0 = input.LA(1);
 
-                                if ( (LA145_0==60) ) {
-                                    alt145=1;
+                                if ( (LA183_0==60) ) {
+                                    alt183=1;
                                 }
 
 
-                                switch (alt145) {
+                                switch (alt183) {
                             	case 1 :
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5764:4: otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5998:4: otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTuplePartCS ) )
                             	    {
-                            	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTupleTypeCS13089); if (state.failed) return current;
+                            	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTupleTypeCS14495); if (state.failed) return current;
                             	    if ( state.backtracking==0 ) {
 
                             	          	newLeafNode(otherlv_3, grammarAccess.getTupleTypeCSAccess().getCommaKeyword_1_1_1_0());
                             	          
                             	    }
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5768:1: ( (lv_ownedParts_4_0= ruleTuplePartCS ) )
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5769:1: (lv_ownedParts_4_0= ruleTuplePartCS )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6002:1: ( (lv_ownedParts_4_0= ruleTuplePartCS ) )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6003:1: (lv_ownedParts_4_0= ruleTuplePartCS )
                             	    {
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5769:1: (lv_ownedParts_4_0= ruleTuplePartCS )
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5770:3: lv_ownedParts_4_0= ruleTuplePartCS
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6003:1: (lv_ownedParts_4_0= ruleTuplePartCS )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6004:3: lv_ownedParts_4_0= ruleTuplePartCS
                             	    {
                             	    if ( state.backtracking==0 ) {
                             	       
                             	      	        newCompositeNode(grammarAccess.getTupleTypeCSAccess().getOwnedPartsTuplePartCSParserRuleCall_1_1_1_1_0()); 
                             	      	    
                             	    }
-                            	    pushFollow(FollowSets000.FOLLOW_ruleTuplePartCS_in_ruleTupleTypeCS13110);
+                            	    pushFollow(FollowSets000.FOLLOW_ruleTuplePartCS_in_ruleTupleTypeCS14516);
                             	    lv_ownedParts_4_0=ruleTuplePartCS();
 
                             	    state._fsp--;
@@ -17186,7 +18381,7 @@
                             	    break;
 
                             	default :
-                            	    break loop145;
+                            	    break loop183;
                                 }
                             } while (true);
 
@@ -17196,7 +18391,7 @@
 
                     }
 
-                    otherlv_5=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleTupleTypeCS13126); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleTupleTypeCS14532); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_5, grammarAccess.getTupleTypeCSAccess().getRightParenthesisKeyword_1_2());
@@ -17231,7 +18426,7 @@
 
 
     // $ANTLR start "entryRuleTuplePartCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5798:1: entryRuleTuplePartCS returns [EObject current=null] : iv_ruleTuplePartCS= ruleTuplePartCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6032:1: entryRuleTuplePartCS returns [EObject current=null] : iv_ruleTuplePartCS= ruleTuplePartCS EOF ;
     public final EObject entryRuleTuplePartCS() throws RecognitionException {
         EObject current = null;
 
@@ -17239,13 +18434,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5799:2: (iv_ruleTuplePartCS= ruleTuplePartCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5800:2: iv_ruleTuplePartCS= ruleTuplePartCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6033:2: (iv_ruleTuplePartCS= ruleTuplePartCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6034:2: iv_ruleTuplePartCS= ruleTuplePartCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTuplePartCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTuplePartCS_in_entryRuleTuplePartCS13164);
+            pushFollow(FollowSets000.FOLLOW_ruleTuplePartCS_in_entryRuleTuplePartCS14570);
             iv_ruleTuplePartCS=ruleTuplePartCS();
 
             state._fsp--;
@@ -17253,7 +18448,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTuplePartCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTuplePartCS13174); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTuplePartCS14580); if (state.failed) return current;
 
             }
 
@@ -17271,7 +18466,7 @@
 
 
     // $ANTLR start "ruleTuplePartCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5807:1: ruleTuplePartCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6041:1: ruleTuplePartCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) ) ;
     public final EObject ruleTuplePartCS() throws RecognitionException {
         EObject current = null;
 
@@ -17284,24 +18479,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5810:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5811:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6044:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6045:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5811:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5811:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6045:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6045:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5811:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5812:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6045:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6046:1: (lv_name_0_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5812:1: (lv_name_0_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5813:3: lv_name_0_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6046:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6047:3: lv_name_0_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTuplePartCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleTuplePartCS13220);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleTuplePartCS14626);
             lv_name_0_0=ruleUnrestrictedName();
 
             state._fsp--;
@@ -17325,24 +18520,24 @@
 
             }
 
-            otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleTuplePartCS13232); if (state.failed) return current;
+            otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleTuplePartCS14638); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getTuplePartCSAccess().getColonKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5833:1: ( (lv_ownedType_2_0= ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5834:1: (lv_ownedType_2_0= ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6067:1: ( (lv_ownedType_2_0= ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6068:1: (lv_ownedType_2_0= ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5834:1: (lv_ownedType_2_0= ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5835:3: lv_ownedType_2_0= ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6068:1: (lv_ownedType_2_0= ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6069:3: lv_ownedType_2_0= ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTuplePartCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleTuplePartCS13253);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleTuplePartCS14659);
             lv_ownedType_2_0=ruleTypeExpCS();
 
             state._fsp--;
@@ -17389,7 +18584,7 @@
 
 
     // $ANTLR start "entryRuleCollectionLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5859:1: entryRuleCollectionLiteralExpCS returns [EObject current=null] : iv_ruleCollectionLiteralExpCS= ruleCollectionLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6093:1: entryRuleCollectionLiteralExpCS returns [EObject current=null] : iv_ruleCollectionLiteralExpCS= ruleCollectionLiteralExpCS EOF ;
     public final EObject entryRuleCollectionLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -17397,13 +18592,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5860:2: (iv_ruleCollectionLiteralExpCS= ruleCollectionLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5861:2: iv_ruleCollectionLiteralExpCS= ruleCollectionLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6094:2: (iv_ruleCollectionLiteralExpCS= ruleCollectionLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6095:2: iv_ruleCollectionLiteralExpCS= ruleCollectionLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getCollectionLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralExpCS_in_entryRuleCollectionLiteralExpCS13289);
+            pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralExpCS_in_entryRuleCollectionLiteralExpCS14695);
             iv_ruleCollectionLiteralExpCS=ruleCollectionLiteralExpCS();
 
             state._fsp--;
@@ -17411,7 +18606,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleCollectionLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionLiteralExpCS13299); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionLiteralExpCS14705); if (state.failed) return current;
 
             }
 
@@ -17429,7 +18624,7 @@
 
 
     // $ANTLR start "ruleCollectionLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5868:1: ruleCollectionLiteralExpCS returns [EObject current=null] : ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6102:1: ruleCollectionLiteralExpCS returns [EObject current=null] : ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}' ) ;
     public final EObject ruleCollectionLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -17446,24 +18641,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5871:28: ( ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5872:1: ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6105:28: ( ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6106:1: ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5872:1: ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5872:2: ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6106:1: ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6106:2: ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )? otherlv_5= '}'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5872:2: ( (lv_ownedType_0_0= ruleCollectionTypeCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5873:1: (lv_ownedType_0_0= ruleCollectionTypeCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6106:2: ( (lv_ownedType_0_0= ruleCollectionTypeCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6107:1: (lv_ownedType_0_0= ruleCollectionTypeCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5873:1: (lv_ownedType_0_0= ruleCollectionTypeCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5874:3: lv_ownedType_0_0= ruleCollectionTypeCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6107:1: (lv_ownedType_0_0= ruleCollectionTypeCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6108:3: lv_ownedType_0_0= ruleCollectionTypeCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getCollectionLiteralExpCSAccess().getOwnedTypeCollectionTypeCSParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_ruleCollectionLiteralExpCS13345);
+            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_ruleCollectionLiteralExpCS14751);
             lv_ownedType_0_0=ruleCollectionTypeCS();
 
             state._fsp--;
@@ -17487,35 +18682,35 @@
 
             }
 
-            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleCollectionLiteralExpCS13357); if (state.failed) return current;
+            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleCollectionLiteralExpCS14763); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5894:1: ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )?
-            int alt149=2;
-            int LA149_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6128:1: ( ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )* )?
+            int alt187=2;
+            int LA187_0 = input.LA(1);
 
-            if ( ((LA149_0>=RULE_INT && LA149_0<=RULE_SINGLE_QUOTED_STRING)||(LA149_0>=RULE_SIMPLE_ID && LA149_0<=RULE_ESCAPED_ID)||(LA149_0>=17 && LA149_0<=55)||LA149_0==57||LA149_0==59||LA149_0==72||(LA149_0>=74 && LA149_0<=75)||LA149_0==80||(LA149_0>=83 && LA149_0<=84)||LA149_0==98||(LA149_0>=100 && LA149_0<=112)||(LA149_0>=115 && LA149_0<=119)||LA149_0==126||(LA149_0>=131 && LA149_0<=132)) ) {
-                alt149=1;
+            if ( ((LA187_0>=RULE_INT && LA187_0<=RULE_SINGLE_QUOTED_STRING)||(LA187_0>=RULE_SIMPLE_ID && LA187_0<=RULE_ESCAPED_ID)||(LA187_0>=17 && LA187_0<=55)||LA187_0==57||LA187_0==59||LA187_0==72||(LA187_0>=74 && LA187_0<=75)||LA187_0==80||(LA187_0>=83 && LA187_0<=84)||LA187_0==98||(LA187_0>=100 && LA187_0<=112)||(LA187_0>=115 && LA187_0<=119)||LA187_0==126||(LA187_0>=131 && LA187_0<=132)) ) {
+                alt187=1;
             }
-            switch (alt149) {
+            switch (alt187) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5894:2: ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )*
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6128:2: ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )*
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5894:2: ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5895:1: (lv_ownedParts_2_0= ruleCollectionLiteralPartCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6128:2: ( (lv_ownedParts_2_0= ruleCollectionLiteralPartCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6129:1: (lv_ownedParts_2_0= ruleCollectionLiteralPartCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5895:1: (lv_ownedParts_2_0= ruleCollectionLiteralPartCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5896:3: lv_ownedParts_2_0= ruleCollectionLiteralPartCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6129:1: (lv_ownedParts_2_0= ruleCollectionLiteralPartCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6130:3: lv_ownedParts_2_0= ruleCollectionLiteralPartCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getCollectionLiteralExpCSAccess().getOwnedPartsCollectionLiteralPartCSParserRuleCall_2_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralPartCS_in_ruleCollectionLiteralExpCS13379);
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralPartCS_in_ruleCollectionLiteralExpCS14785);
                     lv_ownedParts_2_0=ruleCollectionLiteralPartCS();
 
                     state._fsp--;
@@ -17539,39 +18734,39 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5912:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )*
-                    loop148:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6146:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) ) )*
+                    loop186:
                     do {
-                        int alt148=2;
-                        int LA148_0 = input.LA(1);
+                        int alt186=2;
+                        int LA186_0 = input.LA(1);
 
-                        if ( (LA148_0==60) ) {
-                            alt148=1;
+                        if ( (LA186_0==60) ) {
+                            alt186=1;
                         }
 
 
-                        switch (alt148) {
+                        switch (alt186) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5912:4: otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6146:4: otherlv_3= ',' ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) )
                     	    {
-                    	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleCollectionLiteralExpCS13392); if (state.failed) return current;
+                    	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleCollectionLiteralExpCS14798); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_3, grammarAccess.getCollectionLiteralExpCSAccess().getCommaKeyword_2_1_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5916:1: ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5917:1: (lv_ownedParts_4_0= ruleCollectionLiteralPartCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6150:1: ( (lv_ownedParts_4_0= ruleCollectionLiteralPartCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6151:1: (lv_ownedParts_4_0= ruleCollectionLiteralPartCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5917:1: (lv_ownedParts_4_0= ruleCollectionLiteralPartCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5918:3: lv_ownedParts_4_0= ruleCollectionLiteralPartCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6151:1: (lv_ownedParts_4_0= ruleCollectionLiteralPartCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6152:3: lv_ownedParts_4_0= ruleCollectionLiteralPartCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getCollectionLiteralExpCSAccess().getOwnedPartsCollectionLiteralPartCSParserRuleCall_2_1_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralPartCS_in_ruleCollectionLiteralExpCS13413);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralPartCS_in_ruleCollectionLiteralExpCS14819);
                     	    lv_ownedParts_4_0=ruleCollectionLiteralPartCS();
 
                     	    state._fsp--;
@@ -17600,7 +18795,7 @@
                     	    break;
 
                     	default :
-                    	    break loop148;
+                    	    break loop186;
                         }
                     } while (true);
 
@@ -17610,7 +18805,7 @@
 
             }
 
-            otherlv_5=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleCollectionLiteralExpCS13429); if (state.failed) return current;
+            otherlv_5=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleCollectionLiteralExpCS14835); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_5, grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3());
@@ -17639,7 +18834,7 @@
 
 
     // $ANTLR start "entryRuleCollectionLiteralPartCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5946:1: entryRuleCollectionLiteralPartCS returns [EObject current=null] : iv_ruleCollectionLiteralPartCS= ruleCollectionLiteralPartCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6180:1: entryRuleCollectionLiteralPartCS returns [EObject current=null] : iv_ruleCollectionLiteralPartCS= ruleCollectionLiteralPartCS EOF ;
     public final EObject entryRuleCollectionLiteralPartCS() throws RecognitionException {
         EObject current = null;
 
@@ -17647,13 +18842,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5947:2: (iv_ruleCollectionLiteralPartCS= ruleCollectionLiteralPartCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5948:2: iv_ruleCollectionLiteralPartCS= ruleCollectionLiteralPartCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6181:2: (iv_ruleCollectionLiteralPartCS= ruleCollectionLiteralPartCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6182:2: iv_ruleCollectionLiteralPartCS= ruleCollectionLiteralPartCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getCollectionLiteralPartCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralPartCS_in_entryRuleCollectionLiteralPartCS13465);
+            pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralPartCS_in_entryRuleCollectionLiteralPartCS14871);
             iv_ruleCollectionLiteralPartCS=ruleCollectionLiteralPartCS();
 
             state._fsp--;
@@ -17661,7 +18856,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleCollectionLiteralPartCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionLiteralPartCS13475); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionLiteralPartCS14881); if (state.failed) return current;
 
             }
 
@@ -17679,7 +18874,7 @@
 
 
     // $ANTLR start "ruleCollectionLiteralPartCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5955:1: ruleCollectionLiteralPartCS returns [EObject current=null] : ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6189:1: ruleCollectionLiteralPartCS returns [EObject current=null] : ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) ) ;
     public final EObject ruleCollectionLiteralPartCS() throws RecognitionException {
         EObject current = null;
 
@@ -17694,31 +18889,31 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5958:28: ( ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5959:1: ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6192:28: ( ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6193:1: ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5959:1: ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) )
-            int alt151=2;
-            alt151 = dfa151.predict(input);
-            switch (alt151) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6193:1: ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) )
+            int alt189=2;
+            alt189 = dfa189.predict(input);
+            switch (alt189) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5959:2: ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6193:2: ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5959:2: ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5959:3: ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6193:2: ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6193:3: ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )?
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5959:3: ( (lv_ownedExpression_0_0= ruleExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5960:1: (lv_ownedExpression_0_0= ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6193:3: ( (lv_ownedExpression_0_0= ruleExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6194:1: (lv_ownedExpression_0_0= ruleExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5960:1: (lv_ownedExpression_0_0= ruleExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5961:3: lv_ownedExpression_0_0= ruleExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6194:1: (lv_ownedExpression_0_0= ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6195:3: lv_ownedExpression_0_0= ruleExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getCollectionLiteralPartCSAccess().getOwnedExpressionExpCSParserRuleCall_0_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleCollectionLiteralPartCS13522);
+                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleCollectionLiteralPartCS14928);
                     lv_ownedExpression_0_0=ruleExpCS();
 
                     state._fsp--;
@@ -17742,35 +18937,35 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5977:2: (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )?
-                    int alt150=2;
-                    int LA150_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6211:2: (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )?
+                    int alt188=2;
+                    int LA188_0 = input.LA(1);
 
-                    if ( (LA150_0==113) ) {
-                        alt150=1;
+                    if ( (LA188_0==113) ) {
+                        alt188=1;
                     }
-                    switch (alt150) {
+                    switch (alt188) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5977:4: otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6211:4: otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) )
                             {
-                            otherlv_1=(Token)match(input,113,FollowSets000.FOLLOW_113_in_ruleCollectionLiteralPartCS13535); if (state.failed) return current;
+                            otherlv_1=(Token)match(input,113,FollowSets000.FOLLOW_113_in_ruleCollectionLiteralPartCS14941); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_1, grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_0_1_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5981:1: ( (lv_ownedLastExpression_2_0= ruleExpCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5982:1: (lv_ownedLastExpression_2_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6215:1: ( (lv_ownedLastExpression_2_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6216:1: (lv_ownedLastExpression_2_0= ruleExpCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5982:1: (lv_ownedLastExpression_2_0= ruleExpCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:5983:3: lv_ownedLastExpression_2_0= ruleExpCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6216:1: (lv_ownedLastExpression_2_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6217:3: lv_ownedLastExpression_2_0= ruleExpCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getCollectionLiteralPartCSAccess().getOwnedLastExpressionExpCSParserRuleCall_0_1_1_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleCollectionLiteralPartCS13556);
+                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleCollectionLiteralPartCS14962);
                             lv_ownedLastExpression_2_0=ruleExpCS();
 
                             state._fsp--;
@@ -17807,20 +19002,20 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6000:6: ( (lv_ownedExpression_3_0= rulePatternExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6234:6: ( (lv_ownedExpression_3_0= rulePatternExpCS ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6000:6: ( (lv_ownedExpression_3_0= rulePatternExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6001:1: (lv_ownedExpression_3_0= rulePatternExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6234:6: ( (lv_ownedExpression_3_0= rulePatternExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6235:1: (lv_ownedExpression_3_0= rulePatternExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6001:1: (lv_ownedExpression_3_0= rulePatternExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6002:3: lv_ownedExpression_3_0= rulePatternExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6235:1: (lv_ownedExpression_3_0= rulePatternExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6236:3: lv_ownedExpression_3_0= rulePatternExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getCollectionLiteralPartCSAccess().getOwnedExpressionPatternExpCSParserRuleCall_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleCollectionLiteralPartCS13586);
+                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleCollectionLiteralPartCS14992);
                     lv_ownedExpression_3_0=rulePatternExpCS();
 
                     state._fsp--;
@@ -17870,7 +19065,7 @@
 
 
     // $ANTLR start "entryRuleCollectionPatternCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6026:1: entryRuleCollectionPatternCS returns [EObject current=null] : iv_ruleCollectionPatternCS= ruleCollectionPatternCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6260:1: entryRuleCollectionPatternCS returns [EObject current=null] : iv_ruleCollectionPatternCS= ruleCollectionPatternCS EOF ;
     public final EObject entryRuleCollectionPatternCS() throws RecognitionException {
         EObject current = null;
 
@@ -17878,13 +19073,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6027:2: (iv_ruleCollectionPatternCS= ruleCollectionPatternCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6028:2: iv_ruleCollectionPatternCS= ruleCollectionPatternCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6261:2: (iv_ruleCollectionPatternCS= ruleCollectionPatternCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6262:2: iv_ruleCollectionPatternCS= ruleCollectionPatternCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getCollectionPatternCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleCollectionPatternCS_in_entryRuleCollectionPatternCS13622);
+            pushFollow(FollowSets000.FOLLOW_ruleCollectionPatternCS_in_entryRuleCollectionPatternCS15028);
             iv_ruleCollectionPatternCS=ruleCollectionPatternCS();
 
             state._fsp--;
@@ -17892,7 +19087,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleCollectionPatternCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionPatternCS13632); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionPatternCS15038); if (state.failed) return current;
 
             }
 
@@ -17910,7 +19105,7 @@
 
 
     // $ANTLR start "ruleCollectionPatternCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6035:1: ruleCollectionPatternCS returns [EObject current=null] : ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6269:1: ruleCollectionPatternCS returns [EObject current=null] : ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}' ) ;
     public final EObject ruleCollectionPatternCS() throws RecognitionException {
         EObject current = null;
 
@@ -17930,24 +19125,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6038:28: ( ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6039:1: ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6272:28: ( ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6273:1: ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6039:1: ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6039:2: ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6273:1: ( ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6273:2: ( (lv_ownedType_0_0= ruleCollectionTypeCS ) ) otherlv_1= '{' ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )? otherlv_7= '}'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6039:2: ( (lv_ownedType_0_0= ruleCollectionTypeCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6040:1: (lv_ownedType_0_0= ruleCollectionTypeCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6273:2: ( (lv_ownedType_0_0= ruleCollectionTypeCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6274:1: (lv_ownedType_0_0= ruleCollectionTypeCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6040:1: (lv_ownedType_0_0= ruleCollectionTypeCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6041:3: lv_ownedType_0_0= ruleCollectionTypeCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6274:1: (lv_ownedType_0_0= ruleCollectionTypeCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6275:3: lv_ownedType_0_0= ruleCollectionTypeCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getCollectionPatternCSAccess().getOwnedTypeCollectionTypeCSParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_ruleCollectionPatternCS13678);
+            pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_ruleCollectionPatternCS15084);
             lv_ownedType_0_0=ruleCollectionTypeCS();
 
             state._fsp--;
@@ -17971,35 +19166,35 @@
 
             }
 
-            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleCollectionPatternCS13690); if (state.failed) return current;
+            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleCollectionPatternCS15096); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getCollectionPatternCSAccess().getLeftCurlyBracketKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6061:1: ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )?
-            int alt153=2;
-            int LA153_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6295:1: ( ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) ) )?
+            int alt191=2;
+            int LA191_0 = input.LA(1);
 
-            if ( ((LA153_0>=RULE_SIMPLE_ID && LA153_0<=RULE_ESCAPED_ID)||LA153_0==17||(LA153_0>=19 && LA153_0<=54)||LA153_0==57||LA153_0==59||LA153_0==72||(LA153_0>=74 && LA153_0<=75)||LA153_0==80) ) {
-                alt153=1;
+            if ( ((LA191_0>=RULE_SIMPLE_ID && LA191_0<=RULE_ESCAPED_ID)||LA191_0==17||(LA191_0>=19 && LA191_0<=54)||LA191_0==57||LA191_0==59||LA191_0==72||(LA191_0>=74 && LA191_0<=75)||LA191_0==80) ) {
+                alt191=1;
             }
-            switch (alt153) {
+            switch (alt191) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6061:2: ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6295:2: ( (lv_ownedParts_2_0= rulePatternExpCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )* (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6061:2: ( (lv_ownedParts_2_0= rulePatternExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6062:1: (lv_ownedParts_2_0= rulePatternExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6295:2: ( (lv_ownedParts_2_0= rulePatternExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6296:1: (lv_ownedParts_2_0= rulePatternExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6062:1: (lv_ownedParts_2_0= rulePatternExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6063:3: lv_ownedParts_2_0= rulePatternExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6296:1: (lv_ownedParts_2_0= rulePatternExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6297:3: lv_ownedParts_2_0= rulePatternExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getCollectionPatternCSAccess().getOwnedPartsPatternExpCSParserRuleCall_2_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleCollectionPatternCS13712);
+                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleCollectionPatternCS15118);
                     lv_ownedParts_2_0=rulePatternExpCS();
 
                     state._fsp--;
@@ -18023,39 +19218,39 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6079:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )*
-                    loop152:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6313:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) ) )*
+                    loop190:
                     do {
-                        int alt152=2;
-                        int LA152_0 = input.LA(1);
+                        int alt190=2;
+                        int LA190_0 = input.LA(1);
 
-                        if ( (LA152_0==60) ) {
-                            alt152=1;
+                        if ( (LA190_0==60) ) {
+                            alt190=1;
                         }
 
 
-                        switch (alt152) {
+                        switch (alt190) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6079:4: otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6313:4: otherlv_3= ',' ( (lv_ownedParts_4_0= rulePatternExpCS ) )
                     	    {
-                    	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleCollectionPatternCS13725); if (state.failed) return current;
+                    	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleCollectionPatternCS15131); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_3, grammarAccess.getCollectionPatternCSAccess().getCommaKeyword_2_1_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6083:1: ( (lv_ownedParts_4_0= rulePatternExpCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6084:1: (lv_ownedParts_4_0= rulePatternExpCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6317:1: ( (lv_ownedParts_4_0= rulePatternExpCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6318:1: (lv_ownedParts_4_0= rulePatternExpCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6084:1: (lv_ownedParts_4_0= rulePatternExpCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6085:3: lv_ownedParts_4_0= rulePatternExpCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6318:1: (lv_ownedParts_4_0= rulePatternExpCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6319:3: lv_ownedParts_4_0= rulePatternExpCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getCollectionPatternCSAccess().getOwnedPartsPatternExpCSParserRuleCall_2_1_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleCollectionPatternCS13746);
+                    	    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleCollectionPatternCS15152);
                     	    lv_ownedParts_4_0=rulePatternExpCS();
 
                     	    state._fsp--;
@@ -18084,31 +19279,31 @@
                     	    break;
 
                     	default :
-                    	    break loop152;
+                    	    break loop190;
                         }
                     } while (true);
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6101:4: (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6101:6: otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6335:4: (otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6335:6: otherlv_5= '++' ( (lv_restVariableName_6_0= ruleIdentifier ) )
                     {
-                    otherlv_5=(Token)match(input,114,FollowSets000.FOLLOW_114_in_ruleCollectionPatternCS13761); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,114,FollowSets000.FOLLOW_114_in_ruleCollectionPatternCS15167); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_5, grammarAccess.getCollectionPatternCSAccess().getPlusSignPlusSignKeyword_2_2_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6105:1: ( (lv_restVariableName_6_0= ruleIdentifier ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6106:1: (lv_restVariableName_6_0= ruleIdentifier )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6339:1: ( (lv_restVariableName_6_0= ruleIdentifier ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6340:1: (lv_restVariableName_6_0= ruleIdentifier )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6106:1: (lv_restVariableName_6_0= ruleIdentifier )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6107:3: lv_restVariableName_6_0= ruleIdentifier
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6340:1: (lv_restVariableName_6_0= ruleIdentifier )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6341:3: lv_restVariableName_6_0= ruleIdentifier
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getCollectionPatternCSAccess().getRestVariableNameIdentifierParserRuleCall_2_2_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleIdentifier_in_ruleCollectionPatternCS13782);
+                    pushFollow(FollowSets000.FOLLOW_ruleIdentifier_in_ruleCollectionPatternCS15188);
                     lv_restVariableName_6_0=ruleIdentifier();
 
                     state._fsp--;
@@ -18141,7 +19336,7 @@
 
             }
 
-            otherlv_7=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleCollectionPatternCS13797); if (state.failed) return current;
+            otherlv_7=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleCollectionPatternCS15203); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_7, grammarAccess.getCollectionPatternCSAccess().getRightCurlyBracketKeyword_3());
@@ -18170,7 +19365,7 @@
 
 
     // $ANTLR start "entryRuleConstructorPartCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6135:1: entryRuleConstructorPartCS returns [EObject current=null] : iv_ruleConstructorPartCS= ruleConstructorPartCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6369:1: entryRuleConstructorPartCS returns [EObject current=null] : iv_ruleConstructorPartCS= ruleConstructorPartCS EOF ;
     public final EObject entryRuleConstructorPartCS() throws RecognitionException {
         EObject current = null;
 
@@ -18178,13 +19373,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6136:2: (iv_ruleConstructorPartCS= ruleConstructorPartCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6137:2: iv_ruleConstructorPartCS= ruleConstructorPartCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6370:2: (iv_ruleConstructorPartCS= ruleConstructorPartCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6371:2: iv_ruleConstructorPartCS= ruleConstructorPartCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getConstructorPartCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleConstructorPartCS_in_entryRuleConstructorPartCS13833);
+            pushFollow(FollowSets000.FOLLOW_ruleConstructorPartCS_in_entryRuleConstructorPartCS15239);
             iv_ruleConstructorPartCS=ruleConstructorPartCS();
 
             state._fsp--;
@@ -18192,7 +19387,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleConstructorPartCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleConstructorPartCS13843); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleConstructorPartCS15249); if (state.failed) return current;
 
             }
 
@@ -18210,7 +19405,7 @@
 
 
     // $ANTLR start "ruleConstructorPartCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6144:1: ruleConstructorPartCS returns [EObject current=null] : ( ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6378:1: ruleConstructorPartCS returns [EObject current=null] : ( ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) ) ) ;
     public final EObject ruleConstructorPartCS() throws RecognitionException {
         EObject current = null;
 
@@ -18223,17 +19418,17 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6147:28: ( ( ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6148:1: ( ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6381:28: ( ( ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6382:1: ( ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6148:1: ( ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6148:2: ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6382:1: ( ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6382:2: ( ( ruleUnrestrictedName ) ) otherlv_1= '=' ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6148:2: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6149:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6382:2: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6383:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6149:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6150:3: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6383:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6384:3: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
@@ -18252,7 +19447,7 @@
               	        newCompositeNode(grammarAccess.getConstructorPartCSAccess().getReferredPropertyPropertyCrossReference_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleConstructorPartCS13895);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleConstructorPartCS15301);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -18268,31 +19463,31 @@
 
             }
 
-            otherlv_1=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleConstructorPartCS13907); if (state.failed) return current;
+            otherlv_1=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleConstructorPartCS15313); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getConstructorPartCSAccess().getEqualsSignKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6170:1: ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6171:1: ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6404:1: ( ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6405:1: ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6171:1: ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6172:1: (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6405:1: ( (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6406:1: (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6172:1: (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS )
-            int alt154=2;
-            alt154 = dfa154.predict(input);
-            switch (alt154) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6406:1: (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS )
+            int alt192=2;
+            alt192 = dfa192.predict(input);
+            switch (alt192) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6173:3: lv_ownedInitExpression_2_1= ruleExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6407:3: lv_ownedInitExpression_2_1= ruleExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getConstructorPartCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleConstructorPartCS13930);
+                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleConstructorPartCS15336);
                     lv_ownedInitExpression_2_1=ruleExpCS();
 
                     state._fsp--;
@@ -18314,14 +19509,14 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6188:8: lv_ownedInitExpression_2_2= rulePatternExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6422:8: lv_ownedInitExpression_2_2= rulePatternExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getConstructorPartCSAccess().getOwnedInitExpressionPatternExpCSParserRuleCall_2_0_1()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleConstructorPartCS13949);
+                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleConstructorPartCS15355);
                     lv_ownedInitExpression_2_2=rulePatternExpCS();
 
                     state._fsp--;
@@ -18374,7 +19569,7 @@
 
 
     // $ANTLR start "entryRulePatternExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6214:1: entryRulePatternExpCS returns [EObject current=null] : iv_rulePatternExpCS= rulePatternExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6448:1: entryRulePatternExpCS returns [EObject current=null] : iv_rulePatternExpCS= rulePatternExpCS EOF ;
     public final EObject entryRulePatternExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -18382,13 +19577,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6215:2: (iv_rulePatternExpCS= rulePatternExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6216:2: iv_rulePatternExpCS= rulePatternExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6449:2: (iv_rulePatternExpCS= rulePatternExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6450:2: iv_rulePatternExpCS= rulePatternExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPatternExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_entryRulePatternExpCS13988);
+            pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_entryRulePatternExpCS15394);
             iv_rulePatternExpCS=rulePatternExpCS();
 
             state._fsp--;
@@ -18396,7 +19591,7 @@
             if ( state.backtracking==0 ) {
                current =iv_rulePatternExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePatternExpCS13998); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePatternExpCS15404); if (state.failed) return current;
 
             }
 
@@ -18414,7 +19609,7 @@
 
 
     // $ANTLR start "rulePatternExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6223:1: rulePatternExpCS returns [EObject current=null] : ( ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6457:1: rulePatternExpCS returns [EObject current=null] : ( ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) ) ) ;
     public final EObject rulePatternExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -18427,32 +19622,32 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6226:28: ( ( ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6227:1: ( ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6460:28: ( ( ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6461:1: ( ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6227:1: ( ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6227:2: ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6461:1: ( ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6461:2: ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )? otherlv_1= ':' ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6227:2: ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )?
-            int alt155=2;
-            int LA155_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6461:2: ( (lv_patternVariableName_0_0= ruleUnrestrictedName ) )?
+            int alt193=2;
+            int LA193_0 = input.LA(1);
 
-            if ( ((LA155_0>=RULE_SIMPLE_ID && LA155_0<=RULE_ESCAPED_ID)||LA155_0==17||(LA155_0>=19 && LA155_0<=54)||LA155_0==59||LA155_0==72||(LA155_0>=74 && LA155_0<=75)||LA155_0==80) ) {
-                alt155=1;
+            if ( ((LA193_0>=RULE_SIMPLE_ID && LA193_0<=RULE_ESCAPED_ID)||LA193_0==17||(LA193_0>=19 && LA193_0<=54)||LA193_0==59||LA193_0==72||(LA193_0>=74 && LA193_0<=75)||LA193_0==80) ) {
+                alt193=1;
             }
-            switch (alt155) {
+            switch (alt193) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6228:1: (lv_patternVariableName_0_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6462:1: (lv_patternVariableName_0_0= ruleUnrestrictedName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6228:1: (lv_patternVariableName_0_0= ruleUnrestrictedName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6229:3: lv_patternVariableName_0_0= ruleUnrestrictedName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6462:1: (lv_patternVariableName_0_0= ruleUnrestrictedName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6463:3: lv_patternVariableName_0_0= ruleUnrestrictedName
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getPatternExpCSAccess().getPatternVariableNameUnrestrictedNameParserRuleCall_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rulePatternExpCS14044);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_rulePatternExpCS15450);
                     lv_patternVariableName_0_0=ruleUnrestrictedName();
 
                     state._fsp--;
@@ -18479,24 +19674,24 @@
 
             }
 
-            otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_rulePatternExpCS14057); if (state.failed) return current;
+            otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_rulePatternExpCS15463); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getPatternExpCSAccess().getColonKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6249:1: ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6250:1: (lv_ownedPatternType_2_0= ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6483:1: ( (lv_ownedPatternType_2_0= ruleTypeExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6484:1: (lv_ownedPatternType_2_0= ruleTypeExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6250:1: (lv_ownedPatternType_2_0= ruleTypeExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6251:3: lv_ownedPatternType_2_0= ruleTypeExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6484:1: (lv_ownedPatternType_2_0= ruleTypeExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6485:3: lv_ownedPatternType_2_0= ruleTypeExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getPatternExpCSAccess().getOwnedPatternTypeTypeExpCSParserRuleCall_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_rulePatternExpCS14078);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_rulePatternExpCS15484);
             lv_ownedPatternType_2_0=ruleTypeExpCS();
 
             state._fsp--;
@@ -18543,7 +19738,7 @@
 
 
     // $ANTLR start "entryRuleLambdaLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6275:1: entryRuleLambdaLiteralExpCS returns [EObject current=null] : iv_ruleLambdaLiteralExpCS= ruleLambdaLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6509:1: entryRuleLambdaLiteralExpCS returns [EObject current=null] : iv_ruleLambdaLiteralExpCS= ruleLambdaLiteralExpCS EOF ;
     public final EObject entryRuleLambdaLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -18551,13 +19746,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6276:2: (iv_ruleLambdaLiteralExpCS= ruleLambdaLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6277:2: iv_ruleLambdaLiteralExpCS= ruleLambdaLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6510:2: (iv_ruleLambdaLiteralExpCS= ruleLambdaLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6511:2: iv_ruleLambdaLiteralExpCS= ruleLambdaLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getLambdaLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleLambdaLiteralExpCS_in_entryRuleLambdaLiteralExpCS14114);
+            pushFollow(FollowSets000.FOLLOW_ruleLambdaLiteralExpCS_in_entryRuleLambdaLiteralExpCS15520);
             iv_ruleLambdaLiteralExpCS=ruleLambdaLiteralExpCS();
 
             state._fsp--;
@@ -18565,7 +19760,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleLambdaLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLambdaLiteralExpCS14124); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLambdaLiteralExpCS15530); if (state.failed) return current;
 
             }
 
@@ -18583,7 +19778,7 @@
 
 
     // $ANTLR start "ruleLambdaLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6284:1: ruleLambdaLiteralExpCS returns [EObject current=null] : (otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6518:1: ruleLambdaLiteralExpCS returns [EObject current=null] : (otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}' ) ;
     public final EObject ruleLambdaLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -18596,36 +19791,36 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6287:28: ( (otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6288:1: (otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6521:28: ( (otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6522:1: (otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6288:1: (otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6288:3: otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6522:1: (otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6522:3: otherlv_0= 'Lambda' otherlv_1= '{' ( (lv_ownedExpressionCS_2_0= ruleExpCS ) ) otherlv_3= '}'
             {
-            otherlv_0=(Token)match(input,115,FollowSets000.FOLLOW_115_in_ruleLambdaLiteralExpCS14161); if (state.failed) return current;
+            otherlv_0=(Token)match(input,115,FollowSets000.FOLLOW_115_in_ruleLambdaLiteralExpCS15567); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getLambdaLiteralExpCSAccess().getLambdaKeyword_0());
                   
             }
-            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleLambdaLiteralExpCS14173); if (state.failed) return current;
+            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleLambdaLiteralExpCS15579); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getLambdaLiteralExpCSAccess().getLeftCurlyBracketKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6296:1: ( (lv_ownedExpressionCS_2_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6297:1: (lv_ownedExpressionCS_2_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6530:1: ( (lv_ownedExpressionCS_2_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6531:1: (lv_ownedExpressionCS_2_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6297:1: (lv_ownedExpressionCS_2_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6298:3: lv_ownedExpressionCS_2_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6531:1: (lv_ownedExpressionCS_2_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6532:3: lv_ownedExpressionCS_2_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getLambdaLiteralExpCSAccess().getOwnedExpressionCSExpCSParserRuleCall_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleLambdaLiteralExpCS14194);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleLambdaLiteralExpCS15600);
             lv_ownedExpressionCS_2_0=ruleExpCS();
 
             state._fsp--;
@@ -18649,7 +19844,7 @@
 
             }
 
-            otherlv_3=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleLambdaLiteralExpCS14206); if (state.failed) return current;
+            otherlv_3=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleLambdaLiteralExpCS15612); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_3, grammarAccess.getLambdaLiteralExpCSAccess().getRightCurlyBracketKeyword_3());
@@ -18678,7 +19873,7 @@
 
 
     // $ANTLR start "entryRulePrimitiveLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6326:1: entryRulePrimitiveLiteralExpCS returns [EObject current=null] : iv_rulePrimitiveLiteralExpCS= rulePrimitiveLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6560:1: entryRulePrimitiveLiteralExpCS returns [EObject current=null] : iv_rulePrimitiveLiteralExpCS= rulePrimitiveLiteralExpCS EOF ;
     public final EObject entryRulePrimitiveLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -18686,13 +19881,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6327:2: (iv_rulePrimitiveLiteralExpCS= rulePrimitiveLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6328:2: iv_rulePrimitiveLiteralExpCS= rulePrimitiveLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6561:2: (iv_rulePrimitiveLiteralExpCS= rulePrimitiveLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6562:2: iv_rulePrimitiveLiteralExpCS= rulePrimitiveLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPrimitiveLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_rulePrimitiveLiteralExpCS_in_entryRulePrimitiveLiteralExpCS14242);
+            pushFollow(FollowSets000.FOLLOW_rulePrimitiveLiteralExpCS_in_entryRulePrimitiveLiteralExpCS15648);
             iv_rulePrimitiveLiteralExpCS=rulePrimitiveLiteralExpCS();
 
             state._fsp--;
@@ -18700,7 +19895,7 @@
             if ( state.backtracking==0 ) {
                current =iv_rulePrimitiveLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimitiveLiteralExpCS14252); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimitiveLiteralExpCS15658); if (state.failed) return current;
 
             }
 
@@ -18718,7 +19913,7 @@
 
 
     // $ANTLR start "rulePrimitiveLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6335:1: rulePrimitiveLiteralExpCS returns [EObject current=null] : (this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS | this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS | this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS | this_NullLiteralExpCS_5= ruleNullLiteralExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6569:1: rulePrimitiveLiteralExpCS returns [EObject current=null] : (this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS | this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS | this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS | this_NullLiteralExpCS_5= ruleNullLiteralExpCS ) ;
     public final EObject rulePrimitiveLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -18738,54 +19933,54 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6338:28: ( (this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS | this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS | this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS | this_NullLiteralExpCS_5= ruleNullLiteralExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6339:1: (this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS | this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS | this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS | this_NullLiteralExpCS_5= ruleNullLiteralExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6572:28: ( (this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS | this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS | this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS | this_NullLiteralExpCS_5= ruleNullLiteralExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6573:1: (this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS | this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS | this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS | this_NullLiteralExpCS_5= ruleNullLiteralExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6339:1: (this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS | this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS | this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS | this_NullLiteralExpCS_5= ruleNullLiteralExpCS )
-            int alt156=6;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6573:1: (this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS | this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS | this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS | this_NullLiteralExpCS_5= ruleNullLiteralExpCS )
+            int alt194=6;
             switch ( input.LA(1) ) {
             case RULE_INT:
                 {
-                alt156=1;
+                alt194=1;
                 }
                 break;
             case RULE_SINGLE_QUOTED_STRING:
                 {
-                alt156=2;
+                alt194=2;
                 }
                 break;
             case 116:
             case 117:
                 {
-                alt156=3;
+                alt194=3;
                 }
                 break;
             case 84:
                 {
-                alt156=4;
+                alt194=4;
                 }
                 break;
             case 118:
                 {
-                alt156=5;
+                alt194=5;
                 }
                 break;
             case 119:
                 {
-                alt156=6;
+                alt194=6;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 156, 0, input);
+                    new NoViableAltException("", 194, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt156) {
+            switch (alt194) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6340:2: this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6574:2: this_NumberLiteralExpCS_0= ruleNumberLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -18797,7 +19992,7 @@
                               newCompositeNode(grammarAccess.getPrimitiveLiteralExpCSAccess().getNumberLiteralExpCSParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNumberLiteralExpCS_in_rulePrimitiveLiteralExpCS14302);
+                    pushFollow(FollowSets000.FOLLOW_ruleNumberLiteralExpCS_in_rulePrimitiveLiteralExpCS15708);
                     this_NumberLiteralExpCS_0=ruleNumberLiteralExpCS();
 
                     state._fsp--;
@@ -18812,7 +20007,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6353:2: this_StringLiteralExpCS_1= ruleStringLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6587:2: this_StringLiteralExpCS_1= ruleStringLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -18824,7 +20019,7 @@
                               newCompositeNode(grammarAccess.getPrimitiveLiteralExpCSAccess().getStringLiteralExpCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleStringLiteralExpCS_in_rulePrimitiveLiteralExpCS14332);
+                    pushFollow(FollowSets000.FOLLOW_ruleStringLiteralExpCS_in_rulePrimitiveLiteralExpCS15738);
                     this_StringLiteralExpCS_1=ruleStringLiteralExpCS();
 
                     state._fsp--;
@@ -18839,7 +20034,7 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6366:2: this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6600:2: this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -18851,7 +20046,7 @@
                               newCompositeNode(grammarAccess.getPrimitiveLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_2()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleBooleanLiteralExpCS_in_rulePrimitiveLiteralExpCS14362);
+                    pushFollow(FollowSets000.FOLLOW_ruleBooleanLiteralExpCS_in_rulePrimitiveLiteralExpCS15768);
                     this_BooleanLiteralExpCS_2=ruleBooleanLiteralExpCS();
 
                     state._fsp--;
@@ -18866,7 +20061,7 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6379:2: this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6613:2: this_UnlimitedNaturalLiteralExpCS_3= ruleUnlimitedNaturalLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -18878,7 +20073,7 @@
                               newCompositeNode(grammarAccess.getPrimitiveLiteralExpCSAccess().getUnlimitedNaturalLiteralExpCSParserRuleCall_3()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_rulePrimitiveLiteralExpCS14392);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_rulePrimitiveLiteralExpCS15798);
                     this_UnlimitedNaturalLiteralExpCS_3=ruleUnlimitedNaturalLiteralExpCS();
 
                     state._fsp--;
@@ -18893,7 +20088,7 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6392:2: this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6626:2: this_InvalidLiteralExpCS_4= ruleInvalidLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -18905,7 +20100,7 @@
                               newCompositeNode(grammarAccess.getPrimitiveLiteralExpCSAccess().getInvalidLiteralExpCSParserRuleCall_4()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleInvalidLiteralExpCS_in_rulePrimitiveLiteralExpCS14422);
+                    pushFollow(FollowSets000.FOLLOW_ruleInvalidLiteralExpCS_in_rulePrimitiveLiteralExpCS15828);
                     this_InvalidLiteralExpCS_4=ruleInvalidLiteralExpCS();
 
                     state._fsp--;
@@ -18920,7 +20115,7 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6405:2: this_NullLiteralExpCS_5= ruleNullLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6639:2: this_NullLiteralExpCS_5= ruleNullLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -18932,7 +20127,7 @@
                               newCompositeNode(grammarAccess.getPrimitiveLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_5()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNullLiteralExpCS_in_rulePrimitiveLiteralExpCS14452);
+                    pushFollow(FollowSets000.FOLLOW_ruleNullLiteralExpCS_in_rulePrimitiveLiteralExpCS15858);
                     this_NullLiteralExpCS_5=ruleNullLiteralExpCS();
 
                     state._fsp--;
@@ -18969,7 +20164,7 @@
 
 
     // $ANTLR start "entryRuleTupleLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6424:1: entryRuleTupleLiteralExpCS returns [EObject current=null] : iv_ruleTupleLiteralExpCS= ruleTupleLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6658:1: entryRuleTupleLiteralExpCS returns [EObject current=null] : iv_ruleTupleLiteralExpCS= ruleTupleLiteralExpCS EOF ;
     public final EObject entryRuleTupleLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -18977,13 +20172,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6425:2: (iv_ruleTupleLiteralExpCS= ruleTupleLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6426:2: iv_ruleTupleLiteralExpCS= ruleTupleLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6659:2: (iv_ruleTupleLiteralExpCS= ruleTupleLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6660:2: iv_ruleTupleLiteralExpCS= ruleTupleLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTupleLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralExpCS_in_entryRuleTupleLiteralExpCS14487);
+            pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralExpCS_in_entryRuleTupleLiteralExpCS15893);
             iv_ruleTupleLiteralExpCS=ruleTupleLiteralExpCS();
 
             state._fsp--;
@@ -18991,7 +20186,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTupleLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTupleLiteralExpCS14497); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTupleLiteralExpCS15903); if (state.failed) return current;
 
             }
 
@@ -19009,7 +20204,7 @@
 
 
     // $ANTLR start "ruleTupleLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6433:1: ruleTupleLiteralExpCS returns [EObject current=null] : (otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6667:1: ruleTupleLiteralExpCS returns [EObject current=null] : (otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}' ) ;
     public final EObject ruleTupleLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19025,36 +20220,36 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6436:28: ( (otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6437:1: (otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6670:28: ( (otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6671:1: (otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6437:1: (otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6437:3: otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6671:1: (otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6671:3: otherlv_0= 'Tuple' otherlv_1= '{' ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )* otherlv_5= '}'
             {
-            otherlv_0=(Token)match(input,98,FollowSets000.FOLLOW_98_in_ruleTupleLiteralExpCS14534); if (state.failed) return current;
+            otherlv_0=(Token)match(input,98,FollowSets000.FOLLOW_98_in_ruleTupleLiteralExpCS15940); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getTupleLiteralExpCSAccess().getTupleKeyword_0());
                   
             }
-            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleTupleLiteralExpCS14546); if (state.failed) return current;
+            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleTupleLiteralExpCS15952); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getTupleLiteralExpCSAccess().getLeftCurlyBracketKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6445:1: ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6446:1: (lv_ownedParts_2_0= ruleTupleLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6679:1: ( (lv_ownedParts_2_0= ruleTupleLiteralPartCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6680:1: (lv_ownedParts_2_0= ruleTupleLiteralPartCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6446:1: (lv_ownedParts_2_0= ruleTupleLiteralPartCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6447:3: lv_ownedParts_2_0= ruleTupleLiteralPartCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6680:1: (lv_ownedParts_2_0= ruleTupleLiteralPartCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6681:3: lv_ownedParts_2_0= ruleTupleLiteralPartCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTupleLiteralExpCSAccess().getOwnedPartsTupleLiteralPartCSParserRuleCall_2_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralPartCS_in_ruleTupleLiteralExpCS14567);
+            pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralPartCS_in_ruleTupleLiteralExpCS15973);
             lv_ownedParts_2_0=ruleTupleLiteralPartCS();
 
             state._fsp--;
@@ -19078,39 +20273,39 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6463:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )*
-            loop157:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6697:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) ) )*
+            loop195:
             do {
-                int alt157=2;
-                int LA157_0 = input.LA(1);
+                int alt195=2;
+                int LA195_0 = input.LA(1);
 
-                if ( (LA157_0==60) ) {
-                    alt157=1;
+                if ( (LA195_0==60) ) {
+                    alt195=1;
                 }
 
 
-                switch (alt157) {
+                switch (alt195) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6463:4: otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6697:4: otherlv_3= ',' ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) )
             	    {
-            	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTupleLiteralExpCS14580); if (state.failed) return current;
+            	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleTupleLiteralExpCS15986); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
             	          	newLeafNode(otherlv_3, grammarAccess.getTupleLiteralExpCSAccess().getCommaKeyword_3_0());
             	          
             	    }
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6467:1: ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6468:1: (lv_ownedParts_4_0= ruleTupleLiteralPartCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6701:1: ( (lv_ownedParts_4_0= ruleTupleLiteralPartCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6702:1: (lv_ownedParts_4_0= ruleTupleLiteralPartCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6468:1: (lv_ownedParts_4_0= ruleTupleLiteralPartCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6469:3: lv_ownedParts_4_0= ruleTupleLiteralPartCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6702:1: (lv_ownedParts_4_0= ruleTupleLiteralPartCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6703:3: lv_ownedParts_4_0= ruleTupleLiteralPartCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
             	      	        newCompositeNode(grammarAccess.getTupleLiteralExpCSAccess().getOwnedPartsTupleLiteralPartCSParserRuleCall_3_1_0()); 
             	      	    
             	    }
-            	    pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralPartCS_in_ruleTupleLiteralExpCS14601);
+            	    pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralPartCS_in_ruleTupleLiteralExpCS16007);
             	    lv_ownedParts_4_0=ruleTupleLiteralPartCS();
 
             	    state._fsp--;
@@ -19139,11 +20334,11 @@
             	    break;
 
             	default :
-            	    break loop157;
+            	    break loop195;
                 }
             } while (true);
 
-            otherlv_5=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleTupleLiteralExpCS14615); if (state.failed) return current;
+            otherlv_5=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleTupleLiteralExpCS16021); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_5, grammarAccess.getTupleLiteralExpCSAccess().getRightCurlyBracketKeyword_4());
@@ -19172,7 +20367,7 @@
 
 
     // $ANTLR start "entryRuleTupleLiteralPartCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6497:1: entryRuleTupleLiteralPartCS returns [EObject current=null] : iv_ruleTupleLiteralPartCS= ruleTupleLiteralPartCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6731:1: entryRuleTupleLiteralPartCS returns [EObject current=null] : iv_ruleTupleLiteralPartCS= ruleTupleLiteralPartCS EOF ;
     public final EObject entryRuleTupleLiteralPartCS() throws RecognitionException {
         EObject current = null;
 
@@ -19180,13 +20375,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6498:2: (iv_ruleTupleLiteralPartCS= ruleTupleLiteralPartCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6499:2: iv_ruleTupleLiteralPartCS= ruleTupleLiteralPartCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6732:2: (iv_ruleTupleLiteralPartCS= ruleTupleLiteralPartCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6733:2: iv_ruleTupleLiteralPartCS= ruleTupleLiteralPartCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTupleLiteralPartCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralPartCS_in_entryRuleTupleLiteralPartCS14651);
+            pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralPartCS_in_entryRuleTupleLiteralPartCS16057);
             iv_ruleTupleLiteralPartCS=ruleTupleLiteralPartCS();
 
             state._fsp--;
@@ -19194,7 +20389,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTupleLiteralPartCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTupleLiteralPartCS14661); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTupleLiteralPartCS16067); if (state.failed) return current;
 
             }
 
@@ -19212,7 +20407,7 @@
 
 
     // $ANTLR start "ruleTupleLiteralPartCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6506:1: ruleTupleLiteralPartCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6740:1: ruleTupleLiteralPartCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) ) ;
     public final EObject ruleTupleLiteralPartCS() throws RecognitionException {
         EObject current = null;
 
@@ -19228,24 +20423,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6509:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6510:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6743:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6744:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6510:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6510:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6744:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6744:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )? otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6510:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6511:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6744:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6745:1: (lv_name_0_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6511:1: (lv_name_0_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6512:3: lv_name_0_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6745:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6746:3: lv_name_0_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTupleLiteralPartCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleTupleLiteralPartCS14707);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleTupleLiteralPartCS16113);
             lv_name_0_0=ruleUnrestrictedName();
 
             state._fsp--;
@@ -19269,35 +20464,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6528:2: (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )?
-            int alt158=2;
-            int LA158_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6762:2: (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) )?
+            int alt196=2;
+            int LA196_0 = input.LA(1);
 
-            if ( (LA158_0==57) ) {
-                alt158=1;
+            if ( (LA196_0==57) ) {
+                alt196=1;
             }
-            switch (alt158) {
+            switch (alt196) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6528:4: otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6762:4: otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) )
                     {
-                    otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleTupleLiteralPartCS14720); if (state.failed) return current;
+                    otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleTupleLiteralPartCS16126); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_1, grammarAccess.getTupleLiteralPartCSAccess().getColonKeyword_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6532:1: ( (lv_ownedType_2_0= ruleTypeExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6533:1: (lv_ownedType_2_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6766:1: ( (lv_ownedType_2_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6767:1: (lv_ownedType_2_0= ruleTypeExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6533:1: (lv_ownedType_2_0= ruleTypeExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6534:3: lv_ownedType_2_0= ruleTypeExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6767:1: (lv_ownedType_2_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6768:3: lv_ownedType_2_0= ruleTypeExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTupleLiteralPartCSAccess().getOwnedTypeTypeExpCSParserRuleCall_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleTupleLiteralPartCS14741);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleTupleLiteralPartCS16147);
                     lv_ownedType_2_0=ruleTypeExpCS();
 
                     state._fsp--;
@@ -19327,24 +20522,24 @@
 
             }
 
-            otherlv_3=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleTupleLiteralPartCS14755); if (state.failed) return current;
+            otherlv_3=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleTupleLiteralPartCS16161); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_3, grammarAccess.getTupleLiteralPartCSAccess().getEqualsSignKeyword_2());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6554:1: ( (lv_ownedInitExpression_4_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6555:1: (lv_ownedInitExpression_4_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6788:1: ( (lv_ownedInitExpression_4_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6789:1: (lv_ownedInitExpression_4_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6555:1: (lv_ownedInitExpression_4_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6556:3: lv_ownedInitExpression_4_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6789:1: (lv_ownedInitExpression_4_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6790:3: lv_ownedInitExpression_4_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTupleLiteralPartCSAccess().getOwnedInitExpressionExpCSParserRuleCall_3_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleTupleLiteralPartCS14776);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleTupleLiteralPartCS16182);
             lv_ownedInitExpression_4_0=ruleExpCS();
 
             state._fsp--;
@@ -19391,7 +20586,7 @@
 
 
     // $ANTLR start "entryRuleNumberLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6580:1: entryRuleNumberLiteralExpCS returns [EObject current=null] : iv_ruleNumberLiteralExpCS= ruleNumberLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6814:1: entryRuleNumberLiteralExpCS returns [EObject current=null] : iv_ruleNumberLiteralExpCS= ruleNumberLiteralExpCS EOF ;
     public final EObject entryRuleNumberLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19399,13 +20594,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6581:2: (iv_ruleNumberLiteralExpCS= ruleNumberLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6582:2: iv_ruleNumberLiteralExpCS= ruleNumberLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6815:2: (iv_ruleNumberLiteralExpCS= ruleNumberLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6816:2: iv_ruleNumberLiteralExpCS= ruleNumberLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNumberLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNumberLiteralExpCS_in_entryRuleNumberLiteralExpCS14812);
+            pushFollow(FollowSets000.FOLLOW_ruleNumberLiteralExpCS_in_entryRuleNumberLiteralExpCS16218);
             iv_ruleNumberLiteralExpCS=ruleNumberLiteralExpCS();
 
             state._fsp--;
@@ -19413,7 +20608,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNumberLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNumberLiteralExpCS14822); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNumberLiteralExpCS16228); if (state.failed) return current;
 
             }
 
@@ -19431,7 +20626,7 @@
 
 
     // $ANTLR start "ruleNumberLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6589:1: ruleNumberLiteralExpCS returns [EObject current=null] : ( (lv_symbol_0_0= ruleNUMBER_LITERAL ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6823:1: ruleNumberLiteralExpCS returns [EObject current=null] : ( (lv_symbol_0_0= ruleNUMBER_LITERAL ) ) ;
     public final EObject ruleNumberLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19441,21 +20636,21 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6592:28: ( ( (lv_symbol_0_0= ruleNUMBER_LITERAL ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6593:1: ( (lv_symbol_0_0= ruleNUMBER_LITERAL ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6826:28: ( ( (lv_symbol_0_0= ruleNUMBER_LITERAL ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6827:1: ( (lv_symbol_0_0= ruleNUMBER_LITERAL ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6593:1: ( (lv_symbol_0_0= ruleNUMBER_LITERAL ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6594:1: (lv_symbol_0_0= ruleNUMBER_LITERAL )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6827:1: ( (lv_symbol_0_0= ruleNUMBER_LITERAL ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6828:1: (lv_symbol_0_0= ruleNUMBER_LITERAL )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6594:1: (lv_symbol_0_0= ruleNUMBER_LITERAL )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6595:3: lv_symbol_0_0= ruleNUMBER_LITERAL
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6828:1: (lv_symbol_0_0= ruleNUMBER_LITERAL )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6829:3: lv_symbol_0_0= ruleNUMBER_LITERAL
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getNumberLiteralExpCSAccess().getSymbolNUMBER_LITERALParserRuleCall_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNUMBER_LITERAL_in_ruleNumberLiteralExpCS14867);
+            pushFollow(FollowSets000.FOLLOW_ruleNUMBER_LITERAL_in_ruleNumberLiteralExpCS16273);
             lv_symbol_0_0=ruleNUMBER_LITERAL();
 
             state._fsp--;
@@ -19499,7 +20694,7 @@
 
 
     // $ANTLR start "entryRuleStringLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6619:1: entryRuleStringLiteralExpCS returns [EObject current=null] : iv_ruleStringLiteralExpCS= ruleStringLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6853:1: entryRuleStringLiteralExpCS returns [EObject current=null] : iv_ruleStringLiteralExpCS= ruleStringLiteralExpCS EOF ;
     public final EObject entryRuleStringLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19507,13 +20702,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6620:2: (iv_ruleStringLiteralExpCS= ruleStringLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6621:2: iv_ruleStringLiteralExpCS= ruleStringLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6854:2: (iv_ruleStringLiteralExpCS= ruleStringLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6855:2: iv_ruleStringLiteralExpCS= ruleStringLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getStringLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleStringLiteralExpCS_in_entryRuleStringLiteralExpCS14902);
+            pushFollow(FollowSets000.FOLLOW_ruleStringLiteralExpCS_in_entryRuleStringLiteralExpCS16308);
             iv_ruleStringLiteralExpCS=ruleStringLiteralExpCS();
 
             state._fsp--;
@@ -19521,7 +20716,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleStringLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleStringLiteralExpCS14912); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleStringLiteralExpCS16318); if (state.failed) return current;
 
             }
 
@@ -19539,7 +20734,7 @@
 
 
     // $ANTLR start "ruleStringLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6628:1: ruleStringLiteralExpCS returns [EObject current=null] : ( (lv_segments_0_0= ruleStringLiteral ) )+ ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6862:1: ruleStringLiteralExpCS returns [EObject current=null] : ( (lv_segments_0_0= ruleStringLiteral ) )+ ;
     public final EObject ruleStringLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19549,34 +20744,34 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6631:28: ( ( (lv_segments_0_0= ruleStringLiteral ) )+ )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6632:1: ( (lv_segments_0_0= ruleStringLiteral ) )+
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6865:28: ( ( (lv_segments_0_0= ruleStringLiteral ) )+ )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6866:1: ( (lv_segments_0_0= ruleStringLiteral ) )+
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6632:1: ( (lv_segments_0_0= ruleStringLiteral ) )+
-            int cnt159=0;
-            loop159:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6866:1: ( (lv_segments_0_0= ruleStringLiteral ) )+
+            int cnt197=0;
+            loop197:
             do {
-                int alt159=2;
-                int LA159_0 = input.LA(1);
+                int alt197=2;
+                int LA197_0 = input.LA(1);
 
-                if ( (LA159_0==RULE_SINGLE_QUOTED_STRING) ) {
-                    alt159=1;
+                if ( (LA197_0==RULE_SINGLE_QUOTED_STRING) ) {
+                    alt197=1;
                 }
 
 
-                switch (alt159) {
+                switch (alt197) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6633:1: (lv_segments_0_0= ruleStringLiteral )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6867:1: (lv_segments_0_0= ruleStringLiteral )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6633:1: (lv_segments_0_0= ruleStringLiteral )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6634:3: lv_segments_0_0= ruleStringLiteral
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6867:1: (lv_segments_0_0= ruleStringLiteral )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6868:3: lv_segments_0_0= ruleStringLiteral
             	    {
             	    if ( state.backtracking==0 ) {
             	       
             	      	        newCompositeNode(grammarAccess.getStringLiteralExpCSAccess().getSegmentsStringLiteralParserRuleCall_0()); 
             	      	    
             	    }
-            	    pushFollow(FollowSets000.FOLLOW_ruleStringLiteral_in_ruleStringLiteralExpCS14957);
+            	    pushFollow(FollowSets000.FOLLOW_ruleStringLiteral_in_ruleStringLiteralExpCS16363);
             	    lv_segments_0_0=ruleStringLiteral();
 
             	    state._fsp--;
@@ -19602,13 +20797,13 @@
             	    break;
 
             	default :
-            	    if ( cnt159 >= 1 ) break loop159;
+            	    if ( cnt197 >= 1 ) break loop197;
             	    if (state.backtracking>0) {state.failed=true; return current;}
                         EarlyExitException eee =
-                            new EarlyExitException(159, input);
+                            new EarlyExitException(197, input);
                         throw eee;
                 }
-                cnt159++;
+                cnt197++;
             } while (true);
 
 
@@ -19631,7 +20826,7 @@
 
 
     // $ANTLR start "entryRuleBooleanLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6658:1: entryRuleBooleanLiteralExpCS returns [EObject current=null] : iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6892:1: entryRuleBooleanLiteralExpCS returns [EObject current=null] : iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF ;
     public final EObject entryRuleBooleanLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19639,13 +20834,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6659:2: (iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6660:2: iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6893:2: (iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6894:2: iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getBooleanLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleBooleanLiteralExpCS_in_entryRuleBooleanLiteralExpCS14993);
+            pushFollow(FollowSets000.FOLLOW_ruleBooleanLiteralExpCS_in_entryRuleBooleanLiteralExpCS16399);
             iv_ruleBooleanLiteralExpCS=ruleBooleanLiteralExpCS();
 
             state._fsp--;
@@ -19653,7 +20848,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleBooleanLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleBooleanLiteralExpCS15003); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleBooleanLiteralExpCS16409); if (state.failed) return current;
 
             }
 
@@ -19671,7 +20866,7 @@
 
 
     // $ANTLR start "ruleBooleanLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6667:1: ruleBooleanLiteralExpCS returns [EObject current=null] : ( ( (lv_symbol_0_0= 'true' ) ) | ( (lv_symbol_1_0= 'false' ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6901:1: ruleBooleanLiteralExpCS returns [EObject current=null] : ( ( (lv_symbol_0_0= 'true' ) ) | ( (lv_symbol_1_0= 'false' ) ) ) ;
     public final EObject ruleBooleanLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19681,37 +20876,37 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6670:28: ( ( ( (lv_symbol_0_0= 'true' ) ) | ( (lv_symbol_1_0= 'false' ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6671:1: ( ( (lv_symbol_0_0= 'true' ) ) | ( (lv_symbol_1_0= 'false' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6904:28: ( ( ( (lv_symbol_0_0= 'true' ) ) | ( (lv_symbol_1_0= 'false' ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6905:1: ( ( (lv_symbol_0_0= 'true' ) ) | ( (lv_symbol_1_0= 'false' ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6671:1: ( ( (lv_symbol_0_0= 'true' ) ) | ( (lv_symbol_1_0= 'false' ) ) )
-            int alt160=2;
-            int LA160_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6905:1: ( ( (lv_symbol_0_0= 'true' ) ) | ( (lv_symbol_1_0= 'false' ) ) )
+            int alt198=2;
+            int LA198_0 = input.LA(1);
 
-            if ( (LA160_0==116) ) {
-                alt160=1;
+            if ( (LA198_0==116) ) {
+                alt198=1;
             }
-            else if ( (LA160_0==117) ) {
-                alt160=2;
+            else if ( (LA198_0==117) ) {
+                alt198=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 160, 0, input);
+                    new NoViableAltException("", 198, 0, input);
 
                 throw nvae;
             }
-            switch (alt160) {
+            switch (alt198) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6671:2: ( (lv_symbol_0_0= 'true' ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6905:2: ( (lv_symbol_0_0= 'true' ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6671:2: ( (lv_symbol_0_0= 'true' ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6672:1: (lv_symbol_0_0= 'true' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6905:2: ( (lv_symbol_0_0= 'true' ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6906:1: (lv_symbol_0_0= 'true' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6672:1: (lv_symbol_0_0= 'true' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6673:3: lv_symbol_0_0= 'true'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6906:1: (lv_symbol_0_0= 'true' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6907:3: lv_symbol_0_0= 'true'
                     {
-                    lv_symbol_0_0=(Token)match(input,116,FollowSets000.FOLLOW_116_in_ruleBooleanLiteralExpCS15046); if (state.failed) return current;
+                    lv_symbol_0_0=(Token)match(input,116,FollowSets000.FOLLOW_116_in_ruleBooleanLiteralExpCS16452); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               newLeafNode(lv_symbol_0_0, grammarAccess.getBooleanLiteralExpCSAccess().getSymbolTrueKeyword_0_0());
@@ -19735,15 +20930,15 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6687:6: ( (lv_symbol_1_0= 'false' ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6921:6: ( (lv_symbol_1_0= 'false' ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6687:6: ( (lv_symbol_1_0= 'false' ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6688:1: (lv_symbol_1_0= 'false' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6921:6: ( (lv_symbol_1_0= 'false' ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6922:1: (lv_symbol_1_0= 'false' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6688:1: (lv_symbol_1_0= 'false' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6689:3: lv_symbol_1_0= 'false'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6922:1: (lv_symbol_1_0= 'false' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6923:3: lv_symbol_1_0= 'false'
                     {
-                    lv_symbol_1_0=(Token)match(input,117,FollowSets000.FOLLOW_117_in_ruleBooleanLiteralExpCS15083); if (state.failed) return current;
+                    lv_symbol_1_0=(Token)match(input,117,FollowSets000.FOLLOW_117_in_ruleBooleanLiteralExpCS16489); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               newLeafNode(lv_symbol_1_0, grammarAccess.getBooleanLiteralExpCSAccess().getSymbolFalseKeyword_1_0());
@@ -19789,7 +20984,7 @@
 
 
     // $ANTLR start "entryRuleUnlimitedNaturalLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6710:1: entryRuleUnlimitedNaturalLiteralExpCS returns [EObject current=null] : iv_ruleUnlimitedNaturalLiteralExpCS= ruleUnlimitedNaturalLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6944:1: entryRuleUnlimitedNaturalLiteralExpCS returns [EObject current=null] : iv_ruleUnlimitedNaturalLiteralExpCS= ruleUnlimitedNaturalLiteralExpCS EOF ;
     public final EObject entryRuleUnlimitedNaturalLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19797,13 +20992,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6711:2: (iv_ruleUnlimitedNaturalLiteralExpCS= ruleUnlimitedNaturalLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6712:2: iv_ruleUnlimitedNaturalLiteralExpCS= ruleUnlimitedNaturalLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6945:2: (iv_ruleUnlimitedNaturalLiteralExpCS= ruleUnlimitedNaturalLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6946:2: iv_ruleUnlimitedNaturalLiteralExpCS= ruleUnlimitedNaturalLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getUnlimitedNaturalLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_entryRuleUnlimitedNaturalLiteralExpCS15132);
+            pushFollow(FollowSets000.FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_entryRuleUnlimitedNaturalLiteralExpCS16538);
             iv_ruleUnlimitedNaturalLiteralExpCS=ruleUnlimitedNaturalLiteralExpCS();
 
             state._fsp--;
@@ -19811,7 +21006,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleUnlimitedNaturalLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUnlimitedNaturalLiteralExpCS15142); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUnlimitedNaturalLiteralExpCS16548); if (state.failed) return current;
 
             }
 
@@ -19829,7 +21024,7 @@
 
 
     // $ANTLR start "ruleUnlimitedNaturalLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6719:1: ruleUnlimitedNaturalLiteralExpCS returns [EObject current=null] : ( () otherlv_1= '*' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6953:1: ruleUnlimitedNaturalLiteralExpCS returns [EObject current=null] : ( () otherlv_1= '*' ) ;
     public final EObject ruleUnlimitedNaturalLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19838,14 +21033,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6722:28: ( ( () otherlv_1= '*' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6723:1: ( () otherlv_1= '*' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6956:28: ( ( () otherlv_1= '*' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6957:1: ( () otherlv_1= '*' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6723:1: ( () otherlv_1= '*' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6723:2: () otherlv_1= '*'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6957:1: ( () otherlv_1= '*' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6957:2: () otherlv_1= '*'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6723:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6724:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6957:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6958:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -19862,7 +21057,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,84,FollowSets000.FOLLOW_84_in_ruleUnlimitedNaturalLiteralExpCS15191); if (state.failed) return current;
+            otherlv_1=(Token)match(input,84,FollowSets000.FOLLOW_84_in_ruleUnlimitedNaturalLiteralExpCS16597); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getUnlimitedNaturalLiteralExpCSAccess().getAsteriskKeyword_1());
@@ -19891,7 +21086,7 @@
 
 
     // $ANTLR start "entryRuleInvalidLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6744:1: entryRuleInvalidLiteralExpCS returns [EObject current=null] : iv_ruleInvalidLiteralExpCS= ruleInvalidLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6978:1: entryRuleInvalidLiteralExpCS returns [EObject current=null] : iv_ruleInvalidLiteralExpCS= ruleInvalidLiteralExpCS EOF ;
     public final EObject entryRuleInvalidLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19899,13 +21094,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6745:2: (iv_ruleInvalidLiteralExpCS= ruleInvalidLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6746:2: iv_ruleInvalidLiteralExpCS= ruleInvalidLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6979:2: (iv_ruleInvalidLiteralExpCS= ruleInvalidLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6980:2: iv_ruleInvalidLiteralExpCS= ruleInvalidLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getInvalidLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleInvalidLiteralExpCS_in_entryRuleInvalidLiteralExpCS15227);
+            pushFollow(FollowSets000.FOLLOW_ruleInvalidLiteralExpCS_in_entryRuleInvalidLiteralExpCS16633);
             iv_ruleInvalidLiteralExpCS=ruleInvalidLiteralExpCS();
 
             state._fsp--;
@@ -19913,7 +21108,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleInvalidLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleInvalidLiteralExpCS15237); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleInvalidLiteralExpCS16643); if (state.failed) return current;
 
             }
 
@@ -19931,7 +21126,7 @@
 
 
     // $ANTLR start "ruleInvalidLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6753:1: ruleInvalidLiteralExpCS returns [EObject current=null] : ( () otherlv_1= 'invalid' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6987:1: ruleInvalidLiteralExpCS returns [EObject current=null] : ( () otherlv_1= 'invalid' ) ;
     public final EObject ruleInvalidLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -19940,14 +21135,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6756:28: ( ( () otherlv_1= 'invalid' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6757:1: ( () otherlv_1= 'invalid' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6990:28: ( ( () otherlv_1= 'invalid' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6991:1: ( () otherlv_1= 'invalid' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6757:1: ( () otherlv_1= 'invalid' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6757:2: () otherlv_1= 'invalid'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6991:1: ( () otherlv_1= 'invalid' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6991:2: () otherlv_1= 'invalid'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6757:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6758:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6991:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6992:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -19964,7 +21159,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,118,FollowSets000.FOLLOW_118_in_ruleInvalidLiteralExpCS15286); if (state.failed) return current;
+            otherlv_1=(Token)match(input,118,FollowSets000.FOLLOW_118_in_ruleInvalidLiteralExpCS16692); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getInvalidLiteralExpCSAccess().getInvalidKeyword_1());
@@ -19993,7 +21188,7 @@
 
 
     // $ANTLR start "entryRuleNullLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6778:1: entryRuleNullLiteralExpCS returns [EObject current=null] : iv_ruleNullLiteralExpCS= ruleNullLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7012:1: entryRuleNullLiteralExpCS returns [EObject current=null] : iv_ruleNullLiteralExpCS= ruleNullLiteralExpCS EOF ;
     public final EObject entryRuleNullLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -20001,13 +21196,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6779:2: (iv_ruleNullLiteralExpCS= ruleNullLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6780:2: iv_ruleNullLiteralExpCS= ruleNullLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7013:2: (iv_ruleNullLiteralExpCS= ruleNullLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7014:2: iv_ruleNullLiteralExpCS= ruleNullLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNullLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNullLiteralExpCS_in_entryRuleNullLiteralExpCS15322);
+            pushFollow(FollowSets000.FOLLOW_ruleNullLiteralExpCS_in_entryRuleNullLiteralExpCS16728);
             iv_ruleNullLiteralExpCS=ruleNullLiteralExpCS();
 
             state._fsp--;
@@ -20015,7 +21210,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNullLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNullLiteralExpCS15332); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNullLiteralExpCS16738); if (state.failed) return current;
 
             }
 
@@ -20033,7 +21228,7 @@
 
 
     // $ANTLR start "ruleNullLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6787:1: ruleNullLiteralExpCS returns [EObject current=null] : ( () otherlv_1= 'null' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7021:1: ruleNullLiteralExpCS returns [EObject current=null] : ( () otherlv_1= 'null' ) ;
     public final EObject ruleNullLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -20042,14 +21237,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6790:28: ( ( () otherlv_1= 'null' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6791:1: ( () otherlv_1= 'null' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7024:28: ( ( () otherlv_1= 'null' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7025:1: ( () otherlv_1= 'null' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6791:1: ( () otherlv_1= 'null' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6791:2: () otherlv_1= 'null'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7025:1: ( () otherlv_1= 'null' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7025:2: () otherlv_1= 'null'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6791:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6792:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7025:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7026:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -20066,7 +21261,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,119,FollowSets000.FOLLOW_119_in_ruleNullLiteralExpCS15381); if (state.failed) return current;
+            otherlv_1=(Token)match(input,119,FollowSets000.FOLLOW_119_in_ruleNullLiteralExpCS16787); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1());
@@ -20095,7 +21290,7 @@
 
 
     // $ANTLR start "entryRuleTypeLiteralCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6812:1: entryRuleTypeLiteralCS returns [EObject current=null] : iv_ruleTypeLiteralCS= ruleTypeLiteralCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7046:1: entryRuleTypeLiteralCS returns [EObject current=null] : iv_ruleTypeLiteralCS= ruleTypeLiteralCS EOF ;
     public final EObject entryRuleTypeLiteralCS() throws RecognitionException {
         EObject current = null;
 
@@ -20103,13 +21298,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6813:2: (iv_ruleTypeLiteralCS= ruleTypeLiteralCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6814:2: iv_ruleTypeLiteralCS= ruleTypeLiteralCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7047:2: (iv_ruleTypeLiteralCS= ruleTypeLiteralCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7048:2: iv_ruleTypeLiteralCS= ruleTypeLiteralCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypeLiteralCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_entryRuleTypeLiteralCS15417);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_entryRuleTypeLiteralCS16823);
             iv_ruleTypeLiteralCS=ruleTypeLiteralCS();
 
             state._fsp--;
@@ -20117,7 +21312,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypeLiteralCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeLiteralCS15427); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeLiteralCS16833); if (state.failed) return current;
 
             }
 
@@ -20135,7 +21330,7 @@
 
 
     // $ANTLR start "ruleTypeLiteralCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6821:1: ruleTypeLiteralCS returns [EObject current=null] : (this_PrimitiveTypeCS_0= rulePrimitiveTypeCS | this_CollectionTypeCS_1= ruleCollectionTypeCS | this_TupleTypeCS_2= ruleTupleTypeCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7055:1: ruleTypeLiteralCS returns [EObject current=null] : (this_PrimitiveTypeCS_0= rulePrimitiveTypeCS | this_CollectionTypeCS_1= ruleCollectionTypeCS | this_TupleTypeCS_2= ruleTupleTypeCS ) ;
     public final EObject ruleTypeLiteralCS() throws RecognitionException {
         EObject current = null;
 
@@ -20149,11 +21344,11 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6824:28: ( (this_PrimitiveTypeCS_0= rulePrimitiveTypeCS | this_CollectionTypeCS_1= ruleCollectionTypeCS | this_TupleTypeCS_2= ruleTupleTypeCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6825:1: (this_PrimitiveTypeCS_0= rulePrimitiveTypeCS | this_CollectionTypeCS_1= ruleCollectionTypeCS | this_TupleTypeCS_2= ruleTupleTypeCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7058:28: ( (this_PrimitiveTypeCS_0= rulePrimitiveTypeCS | this_CollectionTypeCS_1= ruleCollectionTypeCS | this_TupleTypeCS_2= ruleTupleTypeCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7059:1: (this_PrimitiveTypeCS_0= rulePrimitiveTypeCS | this_CollectionTypeCS_1= ruleCollectionTypeCS | this_TupleTypeCS_2= ruleTupleTypeCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6825:1: (this_PrimitiveTypeCS_0= rulePrimitiveTypeCS | this_CollectionTypeCS_1= ruleCollectionTypeCS | this_TupleTypeCS_2= ruleTupleTypeCS )
-            int alt161=3;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7059:1: (this_PrimitiveTypeCS_0= rulePrimitiveTypeCS | this_CollectionTypeCS_1= ruleCollectionTypeCS | this_TupleTypeCS_2= ruleTupleTypeCS )
+            int alt199=3;
             switch ( input.LA(1) ) {
             case 100:
             case 101:
@@ -20164,7 +21359,7 @@
             case 106:
             case 107:
                 {
-                alt161=1;
+                alt199=1;
                 }
                 break;
             case 108:
@@ -20173,25 +21368,25 @@
             case 111:
             case 112:
                 {
-                alt161=2;
+                alt199=2;
                 }
                 break;
             case 98:
                 {
-                alt161=3;
+                alt199=3;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 161, 0, input);
+                    new NoViableAltException("", 199, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt161) {
+            switch (alt199) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6826:2: this_PrimitiveTypeCS_0= rulePrimitiveTypeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7060:2: this_PrimitiveTypeCS_0= rulePrimitiveTypeCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -20203,7 +21398,7 @@
                               newCompositeNode(grammarAccess.getTypeLiteralCSAccess().getPrimitiveTypeCSParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeCS_in_ruleTypeLiteralCS15477);
+                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeCS_in_ruleTypeLiteralCS16883);
                     this_PrimitiveTypeCS_0=rulePrimitiveTypeCS();
 
                     state._fsp--;
@@ -20218,7 +21413,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6839:2: this_CollectionTypeCS_1= ruleCollectionTypeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7073:2: this_CollectionTypeCS_1= ruleCollectionTypeCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -20230,7 +21425,7 @@
                               newCompositeNode(grammarAccess.getTypeLiteralCSAccess().getCollectionTypeCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_ruleTypeLiteralCS15507);
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionTypeCS_in_ruleTypeLiteralCS16913);
                     this_CollectionTypeCS_1=ruleCollectionTypeCS();
 
                     state._fsp--;
@@ -20245,7 +21440,7 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6852:2: this_TupleTypeCS_2= ruleTupleTypeCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7086:2: this_TupleTypeCS_2= ruleTupleTypeCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -20257,7 +21452,7 @@
                               newCompositeNode(grammarAccess.getTypeLiteralCSAccess().getTupleTypeCSParserRuleCall_2()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTupleTypeCS_in_ruleTypeLiteralCS15537);
+                    pushFollow(FollowSets000.FOLLOW_ruleTupleTypeCS_in_ruleTypeLiteralCS16943);
                     this_TupleTypeCS_2=ruleTupleTypeCS();
 
                     state._fsp--;
@@ -20294,7 +21489,7 @@
 
 
     // $ANTLR start "entryRuleTypeLiteralWithMultiplicityCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6871:1: entryRuleTypeLiteralWithMultiplicityCS returns [EObject current=null] : iv_ruleTypeLiteralWithMultiplicityCS= ruleTypeLiteralWithMultiplicityCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7105:1: entryRuleTypeLiteralWithMultiplicityCS returns [EObject current=null] : iv_ruleTypeLiteralWithMultiplicityCS= ruleTypeLiteralWithMultiplicityCS EOF ;
     public final EObject entryRuleTypeLiteralWithMultiplicityCS() throws RecognitionException {
         EObject current = null;
 
@@ -20302,13 +21497,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6872:2: (iv_ruleTypeLiteralWithMultiplicityCS= ruleTypeLiteralWithMultiplicityCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6873:2: iv_ruleTypeLiteralWithMultiplicityCS= ruleTypeLiteralWithMultiplicityCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7106:2: (iv_ruleTypeLiteralWithMultiplicityCS= ruleTypeLiteralWithMultiplicityCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7107:2: iv_ruleTypeLiteralWithMultiplicityCS= ruleTypeLiteralWithMultiplicityCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypeLiteralWithMultiplicityCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_entryRuleTypeLiteralWithMultiplicityCS15572);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_entryRuleTypeLiteralWithMultiplicityCS16978);
             iv_ruleTypeLiteralWithMultiplicityCS=ruleTypeLiteralWithMultiplicityCS();
 
             state._fsp--;
@@ -20316,7 +21511,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypeLiteralWithMultiplicityCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeLiteralWithMultiplicityCS15582); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeLiteralWithMultiplicityCS16988); if (state.failed) return current;
 
             }
 
@@ -20334,7 +21529,7 @@
 
 
     // $ANTLR start "ruleTypeLiteralWithMultiplicityCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6880:1: ruleTypeLiteralWithMultiplicityCS returns [EObject current=null] : (this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7114:1: ruleTypeLiteralWithMultiplicityCS returns [EObject current=null] : (this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? ) ;
     public final EObject ruleTypeLiteralWithMultiplicityCS() throws RecognitionException {
         EObject current = null;
 
@@ -20346,11 +21541,11 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6883:28: ( (this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6884:1: (this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7117:28: ( (this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7118:1: (this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6884:1: (this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6885:2: this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7118:1: (this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7119:2: this_TypeLiteralCS_0= ruleTypeLiteralCS ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )?
             {
             if ( state.backtracking==0 ) {
                
@@ -20362,7 +21557,7 @@
                       newCompositeNode(grammarAccess.getTypeLiteralWithMultiplicityCSAccess().getTypeLiteralCSParserRuleCall_0()); 
                   
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_ruleTypeLiteralWithMultiplicityCS15632);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_ruleTypeLiteralWithMultiplicityCS17038);
             this_TypeLiteralCS_0=ruleTypeLiteralCS();
 
             state._fsp--;
@@ -20373,26 +21568,26 @@
                       afterParserOrEnumRuleCall();
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6896:1: ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )?
-            int alt162=2;
-            int LA162_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7130:1: ( (lv_ownedMultiplicity_1_0= ruleMultiplicityCS ) )?
+            int alt200=2;
+            int LA200_0 = input.LA(1);
 
-            if ( (LA162_0==122) ) {
-                alt162=1;
+            if ( (LA200_0==122) ) {
+                alt200=1;
             }
-            switch (alt162) {
+            switch (alt200) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6897:1: (lv_ownedMultiplicity_1_0= ruleMultiplicityCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7131:1: (lv_ownedMultiplicity_1_0= ruleMultiplicityCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6897:1: (lv_ownedMultiplicity_1_0= ruleMultiplicityCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6898:3: lv_ownedMultiplicity_1_0= ruleMultiplicityCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7131:1: (lv_ownedMultiplicity_1_0= ruleMultiplicityCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7132:3: lv_ownedMultiplicity_1_0= ruleMultiplicityCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTypeLiteralWithMultiplicityCSAccess().getOwnedMultiplicityMultiplicityCSParserRuleCall_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityCS_in_ruleTypeLiteralWithMultiplicityCS15652);
+                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityCS_in_ruleTypeLiteralWithMultiplicityCS17058);
                     lv_ownedMultiplicity_1_0=ruleMultiplicityCS();
 
                     state._fsp--;
@@ -20442,7 +21637,7 @@
 
 
     // $ANTLR start "entryRuleTypeLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6922:1: entryRuleTypeLiteralExpCS returns [EObject current=null] : iv_ruleTypeLiteralExpCS= ruleTypeLiteralExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7156:1: entryRuleTypeLiteralExpCS returns [EObject current=null] : iv_ruleTypeLiteralExpCS= ruleTypeLiteralExpCS EOF ;
     public final EObject entryRuleTypeLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -20450,13 +21645,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6923:2: (iv_ruleTypeLiteralExpCS= ruleTypeLiteralExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6924:2: iv_ruleTypeLiteralExpCS= ruleTypeLiteralExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7157:2: (iv_ruleTypeLiteralExpCS= ruleTypeLiteralExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7158:2: iv_ruleTypeLiteralExpCS= ruleTypeLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypeLiteralExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralExpCS_in_entryRuleTypeLiteralExpCS15689);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralExpCS_in_entryRuleTypeLiteralExpCS17095);
             iv_ruleTypeLiteralExpCS=ruleTypeLiteralExpCS();
 
             state._fsp--;
@@ -20464,7 +21659,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypeLiteralExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeLiteralExpCS15699); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeLiteralExpCS17105); if (state.failed) return current;
 
             }
 
@@ -20482,7 +21677,7 @@
 
 
     // $ANTLR start "ruleTypeLiteralExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6931:1: ruleTypeLiteralExpCS returns [EObject current=null] : ( (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7165:1: ruleTypeLiteralExpCS returns [EObject current=null] : ( (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS ) ) ;
     public final EObject ruleTypeLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -20492,21 +21687,21 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6934:28: ( ( (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6935:1: ( (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7168:28: ( ( (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7169:1: ( (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6935:1: ( (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6936:1: (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7169:1: ( (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7170:1: (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6936:1: (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6937:3: lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7170:1: (lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7171:3: lv_ownedType_0_0= ruleTypeLiteralWithMultiplicityCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTypeLiteralExpCSAccess().getOwnedTypeTypeLiteralWithMultiplicityCSParserRuleCall_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_ruleTypeLiteralExpCS15744);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_ruleTypeLiteralExpCS17150);
             lv_ownedType_0_0=ruleTypeLiteralWithMultiplicityCS();
 
             state._fsp--;
@@ -20550,7 +21745,7 @@
 
 
     // $ANTLR start "entryRuleTypeNameExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6961:1: entryRuleTypeNameExpCS returns [EObject current=null] : iv_ruleTypeNameExpCS= ruleTypeNameExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7195:1: entryRuleTypeNameExpCS returns [EObject current=null] : iv_ruleTypeNameExpCS= ruleTypeNameExpCS EOF ;
     public final EObject entryRuleTypeNameExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -20558,13 +21753,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6962:2: (iv_ruleTypeNameExpCS= ruleTypeNameExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6963:2: iv_ruleTypeNameExpCS= ruleTypeNameExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7196:2: (iv_ruleTypeNameExpCS= ruleTypeNameExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7197:2: iv_ruleTypeNameExpCS= ruleTypeNameExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypeNameExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeNameExpCS_in_entryRuleTypeNameExpCS15779);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeNameExpCS_in_entryRuleTypeNameExpCS17185);
             iv_ruleTypeNameExpCS=ruleTypeNameExpCS();
 
             state._fsp--;
@@ -20572,7 +21767,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypeNameExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeNameExpCS15789); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeNameExpCS17195); if (state.failed) return current;
 
             }
 
@@ -20590,7 +21785,7 @@
 
 
     // $ANTLR start "ruleTypeNameExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6970:1: ruleTypeNameExpCS returns [EObject current=null] : ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7204:1: ruleTypeNameExpCS returns [EObject current=null] : ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )? ) ;
     public final EObject ruleTypeNameExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -20606,24 +21801,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6973:28: ( ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6974:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7207:28: ( ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7208:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6974:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6974:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7208:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7208:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6974:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6975:1: (lv_ownedPathName_0_0= rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7208:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7209:1: (lv_ownedPathName_0_0= rulePathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6975:1: (lv_ownedPathName_0_0= rulePathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6976:3: lv_ownedPathName_0_0= rulePathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7209:1: (lv_ownedPathName_0_0= rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7210:3: lv_ownedPathName_0_0= rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTypeNameExpCSAccess().getOwnedPathNamePathNameCSParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_ruleTypeNameExpCS15835);
+            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_ruleTypeNameExpCS17241);
             lv_ownedPathName_0_0=rulePathNameCS();
 
             state._fsp--;
@@ -20647,29 +21842,29 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6992:2: ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )?
-            int alt164=2;
-            int LA164_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7226:2: ( ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )? )?
+            int alt202=2;
+            int LA202_0 = input.LA(1);
 
-            if ( (LA164_0==61) ) {
-                alt164=1;
+            if ( (LA202_0==61) ) {
+                alt202=1;
             }
-            switch (alt164) {
+            switch (alt202) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6992:3: ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7226:3: ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) ) (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )?
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6992:3: ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6993:1: (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7226:3: ( (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7227:1: (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6993:1: (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:6994:3: lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7227:1: (lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7228:3: lv_ownedCurlyBracketedClause_1_0= ruleCurlyBracketedClauseCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTypeNameExpCSAccess().getOwnedCurlyBracketedClauseCurlyBracketedClauseCSParserRuleCall_1_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCurlyBracketedClauseCS_in_ruleTypeNameExpCS15857);
+                    pushFollow(FollowSets000.FOLLOW_ruleCurlyBracketedClauseCS_in_ruleTypeNameExpCS17263);
                     lv_ownedCurlyBracketedClause_1_0=ruleCurlyBracketedClauseCS();
 
                     state._fsp--;
@@ -20693,35 +21888,35 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7010:2: (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )?
-                    int alt163=2;
-                    int LA163_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7244:2: (otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}' )?
+                    int alt201=2;
+                    int LA201_0 = input.LA(1);
 
-                    if ( (LA163_0==61) ) {
-                        alt163=1;
+                    if ( (LA201_0==61) ) {
+                        alt201=1;
                     }
-                    switch (alt163) {
+                    switch (alt201) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7010:4: otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}'
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7244:4: otherlv_2= '{' ( (lv_ownedPatternGuard_3_0= ruleExpCS ) ) otherlv_4= '}'
                             {
-                            otherlv_2=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleTypeNameExpCS15870); if (state.failed) return current;
+                            otherlv_2=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleTypeNameExpCS17276); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_2, grammarAccess.getTypeNameExpCSAccess().getLeftCurlyBracketKeyword_1_1_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7014:1: ( (lv_ownedPatternGuard_3_0= ruleExpCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7015:1: (lv_ownedPatternGuard_3_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7248:1: ( (lv_ownedPatternGuard_3_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7249:1: (lv_ownedPatternGuard_3_0= ruleExpCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7015:1: (lv_ownedPatternGuard_3_0= ruleExpCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7016:3: lv_ownedPatternGuard_3_0= ruleExpCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7249:1: (lv_ownedPatternGuard_3_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7250:3: lv_ownedPatternGuard_3_0= ruleExpCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getTypeNameExpCSAccess().getOwnedPatternGuardExpCSParserRuleCall_1_1_1_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleTypeNameExpCS15891);
+                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleTypeNameExpCS17297);
                             lv_ownedPatternGuard_3_0=ruleExpCS();
 
                             state._fsp--;
@@ -20745,7 +21940,7 @@
 
                             }
 
-                            otherlv_4=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleTypeNameExpCS15903); if (state.failed) return current;
+                            otherlv_4=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleTypeNameExpCS17309); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_4, grammarAccess.getTypeNameExpCSAccess().getRightCurlyBracketKeyword_1_1_2());
@@ -20786,7 +21981,7 @@
 
 
     // $ANTLR start "entryRuleTypeExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7044:1: entryRuleTypeExpCS returns [EObject current=null] : iv_ruleTypeExpCS= ruleTypeExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7278:1: entryRuleTypeExpCS returns [EObject current=null] : iv_ruleTypeExpCS= ruleTypeExpCS EOF ;
     public final EObject entryRuleTypeExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -20794,13 +21989,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7045:2: (iv_ruleTypeExpCS= ruleTypeExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7046:2: iv_ruleTypeExpCS= ruleTypeExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7279:2: (iv_ruleTypeExpCS= ruleTypeExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7280:2: iv_ruleTypeExpCS= ruleTypeExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypeExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_entryRuleTypeExpCS15943);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_entryRuleTypeExpCS17349);
             iv_ruleTypeExpCS=ruleTypeExpCS();
 
             state._fsp--;
@@ -20808,7 +22003,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypeExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeExpCS15953); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeExpCS17359); if (state.failed) return current;
 
             }
 
@@ -20826,7 +22021,7 @@
 
 
     // $ANTLR start "ruleTypeExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7053:1: ruleTypeExpCS returns [EObject current=null] : ( (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7287:1: ruleTypeExpCS returns [EObject current=null] : ( (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )? ) ;
     public final EObject ruleTypeExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -20842,18 +22037,18 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7056:28: ( ( (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7057:1: ( (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7290:28: ( ( (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7291:1: ( (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7057:1: ( (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7057:2: (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7291:1: ( (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7291:2: (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS ) ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7057:2: (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS )
-            int alt165=3;
-            alt165 = dfa165.predict(input);
-            switch (alt165) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7291:2: (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS )
+            int alt203=3;
+            alt203 = dfa203.predict(input);
+            switch (alt203) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7058:2: this_TypeNameExpCS_0= ruleTypeNameExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7292:2: this_TypeNameExpCS_0= ruleTypeNameExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -20865,7 +22060,7 @@
                               newCompositeNode(grammarAccess.getTypeExpCSAccess().getTypeNameExpCSParserRuleCall_0_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeNameExpCS_in_ruleTypeExpCS16004);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeNameExpCS_in_ruleTypeExpCS17410);
                     this_TypeNameExpCS_0=ruleTypeNameExpCS();
 
                     state._fsp--;
@@ -20880,7 +22075,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7071:2: this_TypeLiteralCS_1= ruleTypeLiteralCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7305:2: this_TypeLiteralCS_1= ruleTypeLiteralCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -20892,7 +22087,7 @@
                               newCompositeNode(grammarAccess.getTypeExpCSAccess().getTypeLiteralCSParserRuleCall_0_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_ruleTypeExpCS16034);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_ruleTypeExpCS17440);
                     this_TypeLiteralCS_1=ruleTypeLiteralCS();
 
                     state._fsp--;
@@ -20907,7 +22102,7 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7084:2: this_CollectionPatternCS_2= ruleCollectionPatternCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7318:2: this_CollectionPatternCS_2= ruleCollectionPatternCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -20919,7 +22114,7 @@
                               newCompositeNode(grammarAccess.getTypeExpCSAccess().getCollectionPatternCSParserRuleCall_0_2()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCollectionPatternCS_in_ruleTypeExpCS16064);
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionPatternCS_in_ruleTypeExpCS17470);
                     this_CollectionPatternCS_2=ruleCollectionPatternCS();
 
                     state._fsp--;
@@ -20936,26 +22131,26 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7095:2: ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )?
-            int alt166=2;
-            int LA166_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7329:2: ( (lv_ownedMultiplicity_3_0= ruleMultiplicityCS ) )?
+            int alt204=2;
+            int LA204_0 = input.LA(1);
 
-            if ( (LA166_0==122) ) {
-                alt166=1;
+            if ( (LA204_0==122) ) {
+                alt204=1;
             }
-            switch (alt166) {
+            switch (alt204) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7096:1: (lv_ownedMultiplicity_3_0= ruleMultiplicityCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7330:1: (lv_ownedMultiplicity_3_0= ruleMultiplicityCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7096:1: (lv_ownedMultiplicity_3_0= ruleMultiplicityCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7097:3: lv_ownedMultiplicity_3_0= ruleMultiplicityCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7330:1: (lv_ownedMultiplicity_3_0= ruleMultiplicityCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7331:3: lv_ownedMultiplicity_3_0= ruleMultiplicityCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTypeExpCSAccess().getOwnedMultiplicityMultiplicityCSParserRuleCall_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityCS_in_ruleTypeExpCS16085);
+                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityCS_in_ruleTypeExpCS17491);
                     lv_ownedMultiplicity_3_0=ruleMultiplicityCS();
 
                     state._fsp--;
@@ -21005,7 +22200,7 @@
 
 
     // $ANTLR start "entryRuleExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7121:1: entryRuleExpCS returns [EObject current=null] : iv_ruleExpCS= ruleExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7355:1: entryRuleExpCS returns [EObject current=null] : iv_ruleExpCS= ruleExpCS EOF ;
     public final EObject entryRuleExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -21013,13 +22208,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7122:2: (iv_ruleExpCS= ruleExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7123:2: iv_ruleExpCS= ruleExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7356:2: (iv_ruleExpCS= ruleExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7357:2: iv_ruleExpCS= ruleExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_entryRuleExpCS16122);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_entryRuleExpCS17528);
             iv_ruleExpCS=ruleExpCS();
 
             state._fsp--;
@@ -21027,7 +22222,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleExpCS16132); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleExpCS17538); if (state.failed) return current;
 
             }
 
@@ -21045,7 +22240,7 @@
 
 
     // $ANTLR start "ruleExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7130:1: ruleExpCS returns [EObject current=null] : ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7364:1: ruleExpCS returns [EObject current=null] : ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS ) ;
     public final EObject ruleExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -21061,18 +22256,18 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7133:28: ( ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7134:1: ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7367:28: ( ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7368:1: ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7134:1: ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS )
-            int alt168=2;
-            alt168 = dfa168.predict(input);
-            switch (alt168) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7368:1: ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS )
+            int alt206=2;
+            alt206 = dfa206.predict(input);
+            switch (alt206) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7134:2: (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7368:2: (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7134:2: (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7135:2: this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7368:2: (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7369:2: this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )?
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21084,7 +22279,7 @@
                               newCompositeNode(grammarAccess.getExpCSAccess().getPrefixedPrimaryExpCSParserRuleCall_0_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrefixedPrimaryExpCS_in_ruleExpCS16183);
+                    pushFollow(FollowSets000.FOLLOW_rulePrefixedPrimaryExpCS_in_ruleExpCS17589);
                     this_PrefixedPrimaryExpCS_0=rulePrefixedPrimaryExpCS();
 
                     state._fsp--;
@@ -21095,19 +22290,19 @@
                               afterParserOrEnumRuleCall();
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7146:1: ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )?
-                    int alt167=2;
-                    int LA167_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7380:1: ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )?
+                    int alt205=2;
+                    int LA205_0 = input.LA(1);
 
-                    if ( (LA167_0==18||LA167_0==63||(LA167_0>=81 && LA167_0<=82)||(LA167_0>=84 && LA167_0<=97)) ) {
-                        alt167=1;
+                    if ( (LA205_0==18||LA205_0==63||(LA205_0>=81 && LA205_0<=82)||(LA205_0>=84 && LA205_0<=97)) ) {
+                        alt205=1;
                     }
-                    switch (alt167) {
+                    switch (alt205) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7146:2: () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7380:2: () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7146:2: ()
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7147:2: 
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7380:2: ()
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7381:2: 
                             {
                             if ( state.backtracking==0 ) {
                                
@@ -21124,18 +22319,18 @@
 
                             }
 
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7155:2: ( (lv_name_2_0= ruleBinaryOperatorName ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7156:1: (lv_name_2_0= ruleBinaryOperatorName )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7389:2: ( (lv_name_2_0= ruleBinaryOperatorName ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7390:1: (lv_name_2_0= ruleBinaryOperatorName )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7156:1: (lv_name_2_0= ruleBinaryOperatorName )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7157:3: lv_name_2_0= ruleBinaryOperatorName
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7390:1: (lv_name_2_0= ruleBinaryOperatorName )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7391:3: lv_name_2_0= ruleBinaryOperatorName
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getExpCSAccess().getNameBinaryOperatorNameParserRuleCall_0_1_1_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleBinaryOperatorName_in_ruleExpCS16216);
+                            pushFollow(FollowSets000.FOLLOW_ruleBinaryOperatorName_in_ruleExpCS17622);
                             lv_name_2_0=ruleBinaryOperatorName();
 
                             state._fsp--;
@@ -21159,18 +22354,18 @@
 
                             }
 
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7173:2: ( (lv_ownedRight_3_0= ruleExpCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7174:1: (lv_ownedRight_3_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7407:2: ( (lv_ownedRight_3_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7408:1: (lv_ownedRight_3_0= ruleExpCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7174:1: (lv_ownedRight_3_0= ruleExpCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7175:3: lv_ownedRight_3_0= ruleExpCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7408:1: (lv_ownedRight_3_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7409:3: lv_ownedRight_3_0= ruleExpCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getExpCSAccess().getOwnedRightExpCSParserRuleCall_0_1_2_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleExpCS16237);
+                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleExpCS17643);
                             lv_ownedRight_3_0=ruleExpCS();
 
                             state._fsp--;
@@ -21207,7 +22402,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7193:2: this_PrefixedLetExpCS_4= rulePrefixedLetExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7427:2: this_PrefixedLetExpCS_4= rulePrefixedLetExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21219,7 +22414,7 @@
                               newCompositeNode(grammarAccess.getExpCSAccess().getPrefixedLetExpCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrefixedLetExpCS_in_ruleExpCS16271);
+                    pushFollow(FollowSets000.FOLLOW_rulePrefixedLetExpCS_in_ruleExpCS17677);
                     this_PrefixedLetExpCS_4=rulePrefixedLetExpCS();
 
                     state._fsp--;
@@ -21256,7 +22451,7 @@
 
 
     // $ANTLR start "entryRulePrefixedLetExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7212:1: entryRulePrefixedLetExpCS returns [EObject current=null] : iv_rulePrefixedLetExpCS= rulePrefixedLetExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7446:1: entryRulePrefixedLetExpCS returns [EObject current=null] : iv_rulePrefixedLetExpCS= rulePrefixedLetExpCS EOF ;
     public final EObject entryRulePrefixedLetExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -21264,13 +22459,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7213:2: (iv_rulePrefixedLetExpCS= rulePrefixedLetExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7214:2: iv_rulePrefixedLetExpCS= rulePrefixedLetExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7447:2: (iv_rulePrefixedLetExpCS= rulePrefixedLetExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7448:2: iv_rulePrefixedLetExpCS= rulePrefixedLetExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPrefixedLetExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_rulePrefixedLetExpCS_in_entryRulePrefixedLetExpCS16306);
+            pushFollow(FollowSets000.FOLLOW_rulePrefixedLetExpCS_in_entryRulePrefixedLetExpCS17712);
             iv_rulePrefixedLetExpCS=rulePrefixedLetExpCS();
 
             state._fsp--;
@@ -21278,7 +22473,7 @@
             if ( state.backtracking==0 ) {
                current =iv_rulePrefixedLetExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrefixedLetExpCS16316); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrefixedLetExpCS17722); if (state.failed) return current;
 
             }
 
@@ -21296,7 +22491,7 @@
 
 
     // $ANTLR start "rulePrefixedLetExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7221:1: rulePrefixedLetExpCS returns [EObject current=null] : ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) ) | this_LetExpCS_3= ruleLetExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7455:1: rulePrefixedLetExpCS returns [EObject current=null] : ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) ) | this_LetExpCS_3= ruleLetExpCS ) ;
     public final EObject rulePrefixedLetExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -21310,35 +22505,35 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7224:28: ( ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) ) | this_LetExpCS_3= ruleLetExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7225:1: ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) ) | this_LetExpCS_3= ruleLetExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7458:28: ( ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) ) | this_LetExpCS_3= ruleLetExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7459:1: ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) ) | this_LetExpCS_3= ruleLetExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7225:1: ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) ) | this_LetExpCS_3= ruleLetExpCS )
-            int alt169=2;
-            int LA169_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7459:1: ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) ) | this_LetExpCS_3= ruleLetExpCS )
+            int alt207=2;
+            int LA207_0 = input.LA(1);
 
-            if ( (LA169_0==18||LA169_0==83) ) {
-                alt169=1;
+            if ( (LA207_0==18||LA207_0==83) ) {
+                alt207=1;
             }
-            else if ( (LA169_0==131) ) {
-                alt169=2;
+            else if ( (LA207_0==131) ) {
+                alt207=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 169, 0, input);
+                    new NoViableAltException("", 207, 0, input);
 
                 throw nvae;
             }
-            switch (alt169) {
+            switch (alt207) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7225:2: ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7459:2: ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7225:2: ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7225:3: () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7459:2: ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7459:3: () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7225:3: ()
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7226:2: 
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7459:3: ()
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7460:2: 
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21355,18 +22550,18 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7234:2: ( (lv_name_1_0= ruleUnaryOperatorName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7235:1: (lv_name_1_0= ruleUnaryOperatorName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7468:2: ( (lv_name_1_0= ruleUnaryOperatorName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7469:1: (lv_name_1_0= ruleUnaryOperatorName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7235:1: (lv_name_1_0= ruleUnaryOperatorName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7236:3: lv_name_1_0= ruleUnaryOperatorName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7469:1: (lv_name_1_0= ruleUnaryOperatorName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7470:3: lv_name_1_0= ruleUnaryOperatorName
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getPrefixedLetExpCSAccess().getNameUnaryOperatorNameParserRuleCall_0_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnaryOperatorName_in_rulePrefixedLetExpCS16375);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnaryOperatorName_in_rulePrefixedLetExpCS17781);
                     lv_name_1_0=ruleUnaryOperatorName();
 
                     state._fsp--;
@@ -21390,18 +22585,18 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7252:2: ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7253:1: (lv_ownedRight_2_0= rulePrefixedLetExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7486:2: ( (lv_ownedRight_2_0= rulePrefixedLetExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7487:1: (lv_ownedRight_2_0= rulePrefixedLetExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7253:1: (lv_ownedRight_2_0= rulePrefixedLetExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7254:3: lv_ownedRight_2_0= rulePrefixedLetExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7487:1: (lv_ownedRight_2_0= rulePrefixedLetExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7488:3: lv_ownedRight_2_0= rulePrefixedLetExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getPrefixedLetExpCSAccess().getOwnedRightPrefixedLetExpCSParserRuleCall_0_2_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrefixedLetExpCS_in_rulePrefixedLetExpCS16396);
+                    pushFollow(FollowSets000.FOLLOW_rulePrefixedLetExpCS_in_rulePrefixedLetExpCS17802);
                     lv_ownedRight_2_0=rulePrefixedLetExpCS();
 
                     state._fsp--;
@@ -21432,7 +22627,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7272:2: this_LetExpCS_3= ruleLetExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7506:2: this_LetExpCS_3= ruleLetExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21444,7 +22639,7 @@
                               newCompositeNode(grammarAccess.getPrefixedLetExpCSAccess().getLetExpCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleLetExpCS_in_rulePrefixedLetExpCS16428);
+                    pushFollow(FollowSets000.FOLLOW_ruleLetExpCS_in_rulePrefixedLetExpCS17834);
                     this_LetExpCS_3=ruleLetExpCS();
 
                     state._fsp--;
@@ -21481,7 +22676,7 @@
 
 
     // $ANTLR start "entryRulePrefixedPrimaryExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7291:1: entryRulePrefixedPrimaryExpCS returns [EObject current=null] : iv_rulePrefixedPrimaryExpCS= rulePrefixedPrimaryExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7525:1: entryRulePrefixedPrimaryExpCS returns [EObject current=null] : iv_rulePrefixedPrimaryExpCS= rulePrefixedPrimaryExpCS EOF ;
     public final EObject entryRulePrefixedPrimaryExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -21489,13 +22684,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7292:2: (iv_rulePrefixedPrimaryExpCS= rulePrefixedPrimaryExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7293:2: iv_rulePrefixedPrimaryExpCS= rulePrefixedPrimaryExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7526:2: (iv_rulePrefixedPrimaryExpCS= rulePrefixedPrimaryExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7527:2: iv_rulePrefixedPrimaryExpCS= rulePrefixedPrimaryExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPrefixedPrimaryExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_rulePrefixedPrimaryExpCS_in_entryRulePrefixedPrimaryExpCS16463);
+            pushFollow(FollowSets000.FOLLOW_rulePrefixedPrimaryExpCS_in_entryRulePrefixedPrimaryExpCS17869);
             iv_rulePrefixedPrimaryExpCS=rulePrefixedPrimaryExpCS();
 
             state._fsp--;
@@ -21503,7 +22698,7 @@
             if ( state.backtracking==0 ) {
                current =iv_rulePrefixedPrimaryExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrefixedPrimaryExpCS16473); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrefixedPrimaryExpCS17879); if (state.failed) return current;
 
             }
 
@@ -21521,7 +22716,7 @@
 
 
     // $ANTLR start "rulePrefixedPrimaryExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7300:1: rulePrefixedPrimaryExpCS returns [EObject current=null] : ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) ) | this_PrimaryExpCS_3= rulePrimaryExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7534:1: rulePrefixedPrimaryExpCS returns [EObject current=null] : ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) ) | this_PrimaryExpCS_3= rulePrimaryExpCS ) ;
     public final EObject rulePrefixedPrimaryExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -21535,35 +22730,35 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7303:28: ( ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) ) | this_PrimaryExpCS_3= rulePrimaryExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7304:1: ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) ) | this_PrimaryExpCS_3= rulePrimaryExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7537:28: ( ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) ) | this_PrimaryExpCS_3= rulePrimaryExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7538:1: ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) ) | this_PrimaryExpCS_3= rulePrimaryExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7304:1: ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) ) | this_PrimaryExpCS_3= rulePrimaryExpCS )
-            int alt170=2;
-            int LA170_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7538:1: ( ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) ) | this_PrimaryExpCS_3= rulePrimaryExpCS )
+            int alt208=2;
+            int LA208_0 = input.LA(1);
 
-            if ( (LA170_0==18||LA170_0==83) ) {
-                alt170=1;
+            if ( (LA208_0==18||LA208_0==83) ) {
+                alt208=1;
             }
-            else if ( ((LA170_0>=RULE_INT && LA170_0<=RULE_SINGLE_QUOTED_STRING)||(LA170_0>=RULE_SIMPLE_ID && LA170_0<=RULE_ESCAPED_ID)||LA170_0==17||(LA170_0>=19 && LA170_0<=55)||LA170_0==59||LA170_0==72||(LA170_0>=74 && LA170_0<=75)||LA170_0==80||LA170_0==84||LA170_0==98||(LA170_0>=100 && LA170_0<=112)||(LA170_0>=115 && LA170_0<=119)||LA170_0==126||LA170_0==132) ) {
-                alt170=2;
+            else if ( ((LA208_0>=RULE_INT && LA208_0<=RULE_SINGLE_QUOTED_STRING)||(LA208_0>=RULE_SIMPLE_ID && LA208_0<=RULE_ESCAPED_ID)||LA208_0==17||(LA208_0>=19 && LA208_0<=55)||LA208_0==59||LA208_0==72||(LA208_0>=74 && LA208_0<=75)||LA208_0==80||LA208_0==84||LA208_0==98||(LA208_0>=100 && LA208_0<=112)||(LA208_0>=115 && LA208_0<=119)||LA208_0==126||LA208_0==132) ) {
+                alt208=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 170, 0, input);
+                    new NoViableAltException("", 208, 0, input);
 
                 throw nvae;
             }
-            switch (alt170) {
+            switch (alt208) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7304:2: ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7538:2: ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7304:2: ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7304:3: () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7538:2: ( () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7538:3: () ( (lv_name_1_0= ruleUnaryOperatorName ) ) ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7304:3: ()
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7305:2: 
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7538:3: ()
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7539:2: 
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21580,18 +22775,18 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7313:2: ( (lv_name_1_0= ruleUnaryOperatorName ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7314:1: (lv_name_1_0= ruleUnaryOperatorName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7547:2: ( (lv_name_1_0= ruleUnaryOperatorName ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7548:1: (lv_name_1_0= ruleUnaryOperatorName )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7314:1: (lv_name_1_0= ruleUnaryOperatorName )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7315:3: lv_name_1_0= ruleUnaryOperatorName
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7548:1: (lv_name_1_0= ruleUnaryOperatorName )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7549:3: lv_name_1_0= ruleUnaryOperatorName
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getPrefixedPrimaryExpCSAccess().getNameUnaryOperatorNameParserRuleCall_0_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUnaryOperatorName_in_rulePrefixedPrimaryExpCS16532);
+                    pushFollow(FollowSets000.FOLLOW_ruleUnaryOperatorName_in_rulePrefixedPrimaryExpCS17938);
                     lv_name_1_0=ruleUnaryOperatorName();
 
                     state._fsp--;
@@ -21615,18 +22810,18 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7331:2: ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7332:1: (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7565:2: ( (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7566:1: (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7332:1: (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7333:3: lv_ownedRight_2_0= rulePrefixedPrimaryExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7566:1: (lv_ownedRight_2_0= rulePrefixedPrimaryExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7567:3: lv_ownedRight_2_0= rulePrefixedPrimaryExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getPrefixedPrimaryExpCSAccess().getOwnedRightPrefixedPrimaryExpCSParserRuleCall_0_2_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrefixedPrimaryExpCS_in_rulePrefixedPrimaryExpCS16553);
+                    pushFollow(FollowSets000.FOLLOW_rulePrefixedPrimaryExpCS_in_rulePrefixedPrimaryExpCS17959);
                     lv_ownedRight_2_0=rulePrefixedPrimaryExpCS();
 
                     state._fsp--;
@@ -21657,7 +22852,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7351:2: this_PrimaryExpCS_3= rulePrimaryExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7585:2: this_PrimaryExpCS_3= rulePrimaryExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21669,7 +22864,7 @@
                               newCompositeNode(grammarAccess.getPrefixedPrimaryExpCSAccess().getPrimaryExpCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrimaryExpCS_in_rulePrefixedPrimaryExpCS16585);
+                    pushFollow(FollowSets000.FOLLOW_rulePrimaryExpCS_in_rulePrefixedPrimaryExpCS17991);
                     this_PrimaryExpCS_3=rulePrimaryExpCS();
 
                     state._fsp--;
@@ -21706,7 +22901,7 @@
 
 
     // $ANTLR start "entryRulePrimaryExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7370:1: entryRulePrimaryExpCS returns [EObject current=null] : iv_rulePrimaryExpCS= rulePrimaryExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7604:1: entryRulePrimaryExpCS returns [EObject current=null] : iv_rulePrimaryExpCS= rulePrimaryExpCS EOF ;
     public final EObject entryRulePrimaryExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -21714,13 +22909,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7371:2: (iv_rulePrimaryExpCS= rulePrimaryExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7372:2: iv_rulePrimaryExpCS= rulePrimaryExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7605:2: (iv_rulePrimaryExpCS= rulePrimaryExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7606:2: iv_rulePrimaryExpCS= rulePrimaryExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPrimaryExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_rulePrimaryExpCS_in_entryRulePrimaryExpCS16620);
+            pushFollow(FollowSets000.FOLLOW_rulePrimaryExpCS_in_entryRulePrimaryExpCS18026);
             iv_rulePrimaryExpCS=rulePrimaryExpCS();
 
             state._fsp--;
@@ -21728,7 +22923,7 @@
             if ( state.backtracking==0 ) {
                current =iv_rulePrimaryExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimaryExpCS16630); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimaryExpCS18036); if (state.failed) return current;
 
             }
 
@@ -21746,7 +22941,7 @@
 
 
     // $ANTLR start "rulePrimaryExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7379:1: rulePrimaryExpCS returns [EObject current=null] : (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7613:1: rulePrimaryExpCS returns [EObject current=null] : (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS ) ;
     public final EObject rulePrimaryExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -21772,15 +22967,15 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7382:28: ( (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7383:1: (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7616:28: ( (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7617:1: (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7383:1: (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS )
-            int alt171=9;
-            alt171 = dfa171.predict(input);
-            switch (alt171) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7617:1: (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS )
+            int alt209=9;
+            alt209 = dfa209.predict(input);
+            switch (alt209) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7384:2: this_NestedExpCS_0= ruleNestedExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7618:2: this_NestedExpCS_0= ruleNestedExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21792,7 +22987,7 @@
                               newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getNestedExpCSParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNestedExpCS_in_rulePrimaryExpCS16680);
+                    pushFollow(FollowSets000.FOLLOW_ruleNestedExpCS_in_rulePrimaryExpCS18086);
                     this_NestedExpCS_0=ruleNestedExpCS();
 
                     state._fsp--;
@@ -21807,7 +23002,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7397:2: this_IfExpCS_1= ruleIfExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7631:2: this_IfExpCS_1= ruleIfExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21819,7 +23014,7 @@
                               newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getIfExpCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleIfExpCS_in_rulePrimaryExpCS16710);
+                    pushFollow(FollowSets000.FOLLOW_ruleIfExpCS_in_rulePrimaryExpCS18116);
                     this_IfExpCS_1=ruleIfExpCS();
 
                     state._fsp--;
@@ -21834,7 +23029,7 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7410:2: this_SelfExpCS_2= ruleSelfExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7644:2: this_SelfExpCS_2= ruleSelfExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21846,7 +23041,7 @@
                               newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_2()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleSelfExpCS_in_rulePrimaryExpCS16740);
+                    pushFollow(FollowSets000.FOLLOW_ruleSelfExpCS_in_rulePrimaryExpCS18146);
                     this_SelfExpCS_2=ruleSelfExpCS();
 
                     state._fsp--;
@@ -21861,7 +23056,7 @@
                     }
                     break;
                 case 4 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7423:2: this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7657:2: this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21873,7 +23068,7 @@
                               newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getPrimitiveLiteralExpCSParserRuleCall_3()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveLiteralExpCS_in_rulePrimaryExpCS16770);
+                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveLiteralExpCS_in_rulePrimaryExpCS18176);
                     this_PrimitiveLiteralExpCS_3=rulePrimitiveLiteralExpCS();
 
                     state._fsp--;
@@ -21888,7 +23083,7 @@
                     }
                     break;
                 case 5 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7436:2: this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7670:2: this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21900,7 +23095,7 @@
                               newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getTupleLiteralExpCSParserRuleCall_4()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralExpCS_in_rulePrimaryExpCS16800);
+                    pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralExpCS_in_rulePrimaryExpCS18206);
                     this_TupleLiteralExpCS_4=ruleTupleLiteralExpCS();
 
                     state._fsp--;
@@ -21915,7 +23110,7 @@
                     }
                     break;
                 case 6 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7449:2: this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7683:2: this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21927,7 +23122,7 @@
                               newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getCollectionLiteralExpCSParserRuleCall_5()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralExpCS_in_rulePrimaryExpCS16830);
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralExpCS_in_rulePrimaryExpCS18236);
                     this_CollectionLiteralExpCS_5=ruleCollectionLiteralExpCS();
 
                     state._fsp--;
@@ -21942,7 +23137,7 @@
                     }
                     break;
                 case 7 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7462:2: this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7696:2: this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21954,7 +23149,7 @@
                               newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getLambdaLiteralExpCSParserRuleCall_6()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleLambdaLiteralExpCS_in_rulePrimaryExpCS16860);
+                    pushFollow(FollowSets000.FOLLOW_ruleLambdaLiteralExpCS_in_rulePrimaryExpCS18266);
                     this_LambdaLiteralExpCS_6=ruleLambdaLiteralExpCS();
 
                     state._fsp--;
@@ -21969,7 +23164,7 @@
                     }
                     break;
                 case 8 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7475:2: this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7709:2: this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -21981,7 +23176,7 @@
                               newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getTypeLiteralExpCSParserRuleCall_7()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralExpCS_in_rulePrimaryExpCS16890);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralExpCS_in_rulePrimaryExpCS18296);
                     this_TypeLiteralExpCS_7=ruleTypeLiteralExpCS();
 
                     state._fsp--;
@@ -21996,7 +23191,7 @@
                     }
                     break;
                 case 9 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7488:2: this_NameExpCS_8= ruleNameExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7722:2: this_NameExpCS_8= ruleNameExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -22008,7 +23203,7 @@
                               newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_8()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNameExpCS_in_rulePrimaryExpCS16920);
+                    pushFollow(FollowSets000.FOLLOW_ruleNameExpCS_in_rulePrimaryExpCS18326);
                     this_NameExpCS_8=ruleNameExpCS();
 
                     state._fsp--;
@@ -22045,7 +23240,7 @@
 
 
     // $ANTLR start "entryRuleNameExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7507:1: entryRuleNameExpCS returns [EObject current=null] : iv_ruleNameExpCS= ruleNameExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7741:1: entryRuleNameExpCS returns [EObject current=null] : iv_ruleNameExpCS= ruleNameExpCS EOF ;
     public final EObject entryRuleNameExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -22053,13 +23248,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7508:2: (iv_ruleNameExpCS= ruleNameExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7509:2: iv_ruleNameExpCS= ruleNameExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7742:2: (iv_ruleNameExpCS= ruleNameExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7743:2: iv_ruleNameExpCS= ruleNameExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNameExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNameExpCS_in_entryRuleNameExpCS16955);
+            pushFollow(FollowSets000.FOLLOW_ruleNameExpCS_in_entryRuleNameExpCS18361);
             iv_ruleNameExpCS=ruleNameExpCS();
 
             state._fsp--;
@@ -22067,7 +23262,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNameExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNameExpCS16965); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNameExpCS18371); if (state.failed) return current;
 
             }
 
@@ -22085,7 +23280,7 @@
 
 
     // $ANTLR start "ruleNameExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7516:1: ruleNameExpCS returns [EObject current=null] : ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7750:1: ruleNameExpCS returns [EObject current=null] : ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )? ) ;
     public final EObject ruleNameExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -22103,24 +23298,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7519:28: ( ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7520:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7753:28: ( ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7754:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7520:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7520:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7754:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7754:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )* ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )? ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )? ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7520:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7521:1: (lv_ownedPathName_0_0= rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7754:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7755:1: (lv_ownedPathName_0_0= rulePathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7521:1: (lv_ownedPathName_0_0= rulePathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7522:3: lv_ownedPathName_0_0= rulePathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7755:1: (lv_ownedPathName_0_0= rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7756:3: lv_ownedPathName_0_0= rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getNameExpCSAccess().getOwnedPathNamePathNameCSParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_ruleNameExpCS17011);
+            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_ruleNameExpCS18417);
             lv_ownedPathName_0_0=rulePathNameCS();
 
             state._fsp--;
@@ -22144,30 +23339,30 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7538:2: ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )*
-            loop172:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7772:2: ( (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS ) )*
+            loop210:
             do {
-                int alt172=2;
-                int LA172_0 = input.LA(1);
+                int alt210=2;
+                int LA210_0 = input.LA(1);
 
-                if ( (LA172_0==122) ) {
-                    alt172=1;
+                if ( (LA210_0==122) ) {
+                    alt210=1;
                 }
 
 
-                switch (alt172) {
+                switch (alt210) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7539:1: (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7773:1: (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7539:1: (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7540:3: lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7773:1: (lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7774:3: lv_ownedSquareBracketedClauses_1_0= ruleSquareBracketedClauseCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
             	      	        newCompositeNode(grammarAccess.getNameExpCSAccess().getOwnedSquareBracketedClausesSquareBracketedClauseCSParserRuleCall_1_0()); 
             	      	    
             	    }
-            	    pushFollow(FollowSets000.FOLLOW_ruleSquareBracketedClauseCS_in_ruleNameExpCS17032);
+            	    pushFollow(FollowSets000.FOLLOW_ruleSquareBracketedClauseCS_in_ruleNameExpCS18438);
             	    lv_ownedSquareBracketedClauses_1_0=ruleSquareBracketedClauseCS();
 
             	    state._fsp--;
@@ -22193,30 +23388,30 @@
             	    break;
 
             	default :
-            	    break loop172;
+            	    break loop210;
                 }
             } while (true);
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7556:3: ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )?
-            int alt173=2;
-            int LA173_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7790:3: ( (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS ) )?
+            int alt211=2;
+            int LA211_0 = input.LA(1);
 
-            if ( (LA173_0==55) ) {
-                alt173=1;
+            if ( (LA211_0==55) ) {
+                alt211=1;
             }
-            switch (alt173) {
+            switch (alt211) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7557:1: (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7791:1: (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7557:1: (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7558:3: lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7791:1: (lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7792:3: lv_ownedRoundBracketedClause_2_0= ruleRoundBracketedClauseCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getNameExpCSAccess().getOwnedRoundBracketedClauseRoundBracketedClauseCSParserRuleCall_2_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleRoundBracketedClauseCS_in_ruleNameExpCS17054);
+                    pushFollow(FollowSets000.FOLLOW_ruleRoundBracketedClauseCS_in_ruleNameExpCS18460);
                     lv_ownedRoundBracketedClause_2_0=ruleRoundBracketedClauseCS();
 
                     state._fsp--;
@@ -22243,26 +23438,26 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7574:3: ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )?
-            int alt174=2;
-            int LA174_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7808:3: ( (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS ) )?
+            int alt212=2;
+            int LA212_0 = input.LA(1);
 
-            if ( (LA174_0==61) ) {
-                alt174=1;
+            if ( (LA212_0==61) ) {
+                alt212=1;
             }
-            switch (alt174) {
+            switch (alt212) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7575:1: (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7809:1: (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7575:1: (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7576:3: lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7809:1: (lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7810:3: lv_ownedCurlyBracketedClause_3_0= ruleCurlyBracketedClauseCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getNameExpCSAccess().getOwnedCurlyBracketedClauseCurlyBracketedClauseCSParserRuleCall_3_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleCurlyBracketedClauseCS_in_ruleNameExpCS17076);
+                    pushFollow(FollowSets000.FOLLOW_ruleCurlyBracketedClauseCS_in_ruleNameExpCS18482);
                     lv_ownedCurlyBracketedClause_3_0=ruleCurlyBracketedClauseCS();
 
                     state._fsp--;
@@ -22289,24 +23484,24 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7592:3: ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )?
-            int alt175=2;
-            int LA175_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7826:3: ( ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre' )?
+            int alt213=2;
+            int LA213_0 = input.LA(1);
 
-            if ( (LA175_0==120) ) {
-                alt175=1;
+            if ( (LA213_0==120) ) {
+                alt213=1;
             }
-            switch (alt175) {
+            switch (alt213) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7592:4: ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7826:4: ( (lv_isPre_4_0= '@' ) ) otherlv_5= 'pre'
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7592:4: ( (lv_isPre_4_0= '@' ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7593:1: (lv_isPre_4_0= '@' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7826:4: ( (lv_isPre_4_0= '@' ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7827:1: (lv_isPre_4_0= '@' )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7593:1: (lv_isPre_4_0= '@' )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7594:3: lv_isPre_4_0= '@'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7827:1: (lv_isPre_4_0= '@' )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7828:3: lv_isPre_4_0= '@'
                     {
-                    lv_isPre_4_0=(Token)match(input,120,FollowSets000.FOLLOW_120_in_ruleNameExpCS17096); if (state.failed) return current;
+                    lv_isPre_4_0=(Token)match(input,120,FollowSets000.FOLLOW_120_in_ruleNameExpCS18502); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               newLeafNode(lv_isPre_4_0, grammarAccess.getNameExpCSAccess().getIsPreCommercialAtKeyword_4_0_0());
@@ -22326,7 +23521,7 @@
 
                     }
 
-                    otherlv_5=(Token)match(input,121,FollowSets000.FOLLOW_121_in_ruleNameExpCS17121); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,121,FollowSets000.FOLLOW_121_in_ruleNameExpCS18527); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_5, grammarAccess.getNameExpCSAccess().getPreKeyword_4_1());
@@ -22361,7 +23556,7 @@
 
 
     // $ANTLR start "entryRuleCurlyBracketedClauseCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7619:1: entryRuleCurlyBracketedClauseCS returns [EObject current=null] : iv_ruleCurlyBracketedClauseCS= ruleCurlyBracketedClauseCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7853:1: entryRuleCurlyBracketedClauseCS returns [EObject current=null] : iv_ruleCurlyBracketedClauseCS= ruleCurlyBracketedClauseCS EOF ;
     public final EObject entryRuleCurlyBracketedClauseCS() throws RecognitionException {
         EObject current = null;
 
@@ -22369,13 +23564,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7620:2: (iv_ruleCurlyBracketedClauseCS= ruleCurlyBracketedClauseCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7621:2: iv_ruleCurlyBracketedClauseCS= ruleCurlyBracketedClauseCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7854:2: (iv_ruleCurlyBracketedClauseCS= ruleCurlyBracketedClauseCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7855:2: iv_ruleCurlyBracketedClauseCS= ruleCurlyBracketedClauseCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getCurlyBracketedClauseCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleCurlyBracketedClauseCS_in_entryRuleCurlyBracketedClauseCS17159);
+            pushFollow(FollowSets000.FOLLOW_ruleCurlyBracketedClauseCS_in_entryRuleCurlyBracketedClauseCS18565);
             iv_ruleCurlyBracketedClauseCS=ruleCurlyBracketedClauseCS();
 
             state._fsp--;
@@ -22383,7 +23578,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleCurlyBracketedClauseCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCurlyBracketedClauseCS17169); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCurlyBracketedClauseCS18575); if (state.failed) return current;
 
             }
 
@@ -22401,7 +23596,7 @@
 
 
     // $ANTLR start "ruleCurlyBracketedClauseCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7628:1: ruleCurlyBracketedClauseCS returns [EObject current=null] : ( () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7862:1: ruleCurlyBracketedClauseCS returns [EObject current=null] : ( () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}' ) ;
     public final EObject ruleCurlyBracketedClauseCS() throws RecognitionException {
         EObject current = null;
 
@@ -22418,14 +23613,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7631:28: ( ( () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7632:1: ( () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7865:28: ( ( () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7866:1: ( () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7632:1: ( () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7632:2: () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7866:1: ( () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7866:2: () otherlv_1= '{' ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) ) otherlv_6= '}'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7632:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7633:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7866:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7867:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -22442,56 +23637,56 @@
 
             }
 
-            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleCurlyBracketedClauseCS17218); if (state.failed) return current;
+            otherlv_1=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleCurlyBracketedClauseCS18624); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getCurlyBracketedClauseCSAccess().getLeftCurlyBracketKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7645:1: ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) )
-            int alt178=2;
-            int LA178_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7879:1: ( ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )? | ( (lv_value_5_0= ruleStringLiteral ) ) )
+            int alt216=2;
+            int LA216_0 = input.LA(1);
 
-            if ( ((LA178_0>=RULE_SIMPLE_ID && LA178_0<=RULE_ESCAPED_ID)||LA178_0==17||(LA178_0>=19 && LA178_0<=54)||LA178_0==59||LA178_0==62||LA178_0==72||(LA178_0>=74 && LA178_0<=75)||LA178_0==80) ) {
-                alt178=1;
+            if ( ((LA216_0>=RULE_SIMPLE_ID && LA216_0<=RULE_ESCAPED_ID)||LA216_0==17||(LA216_0>=19 && LA216_0<=54)||LA216_0==59||LA216_0==62||LA216_0==72||(LA216_0>=74 && LA216_0<=75)||LA216_0==80) ) {
+                alt216=1;
             }
-            else if ( (LA178_0==RULE_SINGLE_QUOTED_STRING) ) {
-                alt178=2;
+            else if ( (LA216_0==RULE_SINGLE_QUOTED_STRING) ) {
+                alt216=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 178, 0, input);
+                    new NoViableAltException("", 216, 0, input);
 
                 throw nvae;
             }
-            switch (alt178) {
+            switch (alt216) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7645:2: ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7879:2: ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )?
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7645:2: ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )?
-                    int alt177=2;
-                    int LA177_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7879:2: ( ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )* )?
+                    int alt215=2;
+                    int LA215_0 = input.LA(1);
 
-                    if ( ((LA177_0>=RULE_SIMPLE_ID && LA177_0<=RULE_ESCAPED_ID)||LA177_0==17||(LA177_0>=19 && LA177_0<=54)||LA177_0==59||LA177_0==72||(LA177_0>=74 && LA177_0<=75)||LA177_0==80) ) {
-                        alt177=1;
+                    if ( ((LA215_0>=RULE_SIMPLE_ID && LA215_0<=RULE_ESCAPED_ID)||LA215_0==17||(LA215_0>=19 && LA215_0<=54)||LA215_0==59||LA215_0==72||(LA215_0>=74 && LA215_0<=75)||LA215_0==80) ) {
+                        alt215=1;
                     }
-                    switch (alt177) {
+                    switch (alt215) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7645:3: ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )*
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7879:3: ( (lv_ownedParts_2_0= ruleConstructorPartCS ) ) (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )*
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7645:3: ( (lv_ownedParts_2_0= ruleConstructorPartCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7646:1: (lv_ownedParts_2_0= ruleConstructorPartCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7879:3: ( (lv_ownedParts_2_0= ruleConstructorPartCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7880:1: (lv_ownedParts_2_0= ruleConstructorPartCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7646:1: (lv_ownedParts_2_0= ruleConstructorPartCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7647:3: lv_ownedParts_2_0= ruleConstructorPartCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7880:1: (lv_ownedParts_2_0= ruleConstructorPartCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7881:3: lv_ownedParts_2_0= ruleConstructorPartCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getCurlyBracketedClauseCSAccess().getOwnedPartsConstructorPartCSParserRuleCall_2_0_0_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleConstructorPartCS_in_ruleCurlyBracketedClauseCS17241);
+                            pushFollow(FollowSets000.FOLLOW_ruleConstructorPartCS_in_ruleCurlyBracketedClauseCS18647);
                             lv_ownedParts_2_0=ruleConstructorPartCS();
 
                             state._fsp--;
@@ -22515,39 +23710,39 @@
 
                             }
 
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7663:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )*
-                            loop176:
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7897:2: (otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) ) )*
+                            loop214:
                             do {
-                                int alt176=2;
-                                int LA176_0 = input.LA(1);
+                                int alt214=2;
+                                int LA214_0 = input.LA(1);
 
-                                if ( (LA176_0==60) ) {
-                                    alt176=1;
+                                if ( (LA214_0==60) ) {
+                                    alt214=1;
                                 }
 
 
-                                switch (alt176) {
+                                switch (alt214) {
                             	case 1 :
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7663:4: otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7897:4: otherlv_3= ',' ( (lv_ownedParts_4_0= ruleConstructorPartCS ) )
                             	    {
-                            	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleCurlyBracketedClauseCS17254); if (state.failed) return current;
+                            	    otherlv_3=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleCurlyBracketedClauseCS18660); if (state.failed) return current;
                             	    if ( state.backtracking==0 ) {
 
                             	          	newLeafNode(otherlv_3, grammarAccess.getCurlyBracketedClauseCSAccess().getCommaKeyword_2_0_1_0());
                             	          
                             	    }
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7667:1: ( (lv_ownedParts_4_0= ruleConstructorPartCS ) )
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7668:1: (lv_ownedParts_4_0= ruleConstructorPartCS )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7901:1: ( (lv_ownedParts_4_0= ruleConstructorPartCS ) )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7902:1: (lv_ownedParts_4_0= ruleConstructorPartCS )
                             	    {
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7668:1: (lv_ownedParts_4_0= ruleConstructorPartCS )
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7669:3: lv_ownedParts_4_0= ruleConstructorPartCS
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7902:1: (lv_ownedParts_4_0= ruleConstructorPartCS )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7903:3: lv_ownedParts_4_0= ruleConstructorPartCS
                             	    {
                             	    if ( state.backtracking==0 ) {
                             	       
                             	      	        newCompositeNode(grammarAccess.getCurlyBracketedClauseCSAccess().getOwnedPartsConstructorPartCSParserRuleCall_2_0_1_1_0()); 
                             	      	    
                             	    }
-                            	    pushFollow(FollowSets000.FOLLOW_ruleConstructorPartCS_in_ruleCurlyBracketedClauseCS17275);
+                            	    pushFollow(FollowSets000.FOLLOW_ruleConstructorPartCS_in_ruleCurlyBracketedClauseCS18681);
                             	    lv_ownedParts_4_0=ruleConstructorPartCS();
 
                             	    state._fsp--;
@@ -22576,7 +23771,7 @@
                             	    break;
 
                             	default :
-                            	    break loop176;
+                            	    break loop214;
                                 }
                             } while (true);
 
@@ -22590,20 +23785,20 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7686:6: ( (lv_value_5_0= ruleStringLiteral ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7920:6: ( (lv_value_5_0= ruleStringLiteral ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7686:6: ( (lv_value_5_0= ruleStringLiteral ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7687:1: (lv_value_5_0= ruleStringLiteral )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7920:6: ( (lv_value_5_0= ruleStringLiteral ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7921:1: (lv_value_5_0= ruleStringLiteral )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7687:1: (lv_value_5_0= ruleStringLiteral )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7688:3: lv_value_5_0= ruleStringLiteral
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7921:1: (lv_value_5_0= ruleStringLiteral )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7922:3: lv_value_5_0= ruleStringLiteral
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getCurlyBracketedClauseCSAccess().getValueStringLiteralParserRuleCall_2_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleStringLiteral_in_ruleCurlyBracketedClauseCS17306);
+                    pushFollow(FollowSets000.FOLLOW_ruleStringLiteral_in_ruleCurlyBracketedClauseCS18712);
                     lv_value_5_0=ruleStringLiteral();
 
                     state._fsp--;
@@ -22633,7 +23828,7 @@
 
             }
 
-            otherlv_6=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleCurlyBracketedClauseCS17319); if (state.failed) return current;
+            otherlv_6=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleCurlyBracketedClauseCS18725); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_6, grammarAccess.getCurlyBracketedClauseCSAccess().getRightCurlyBracketKeyword_3());
@@ -22662,7 +23857,7 @@
 
 
     // $ANTLR start "entryRuleRoundBracketedClauseCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7716:1: entryRuleRoundBracketedClauseCS returns [EObject current=null] : iv_ruleRoundBracketedClauseCS= ruleRoundBracketedClauseCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7950:1: entryRuleRoundBracketedClauseCS returns [EObject current=null] : iv_ruleRoundBracketedClauseCS= ruleRoundBracketedClauseCS EOF ;
     public final EObject entryRuleRoundBracketedClauseCS() throws RecognitionException {
         EObject current = null;
 
@@ -22670,13 +23865,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7717:2: (iv_ruleRoundBracketedClauseCS= ruleRoundBracketedClauseCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7718:2: iv_ruleRoundBracketedClauseCS= ruleRoundBracketedClauseCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7951:2: (iv_ruleRoundBracketedClauseCS= ruleRoundBracketedClauseCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7952:2: iv_ruleRoundBracketedClauseCS= ruleRoundBracketedClauseCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getRoundBracketedClauseCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleRoundBracketedClauseCS_in_entryRuleRoundBracketedClauseCS17355);
+            pushFollow(FollowSets000.FOLLOW_ruleRoundBracketedClauseCS_in_entryRuleRoundBracketedClauseCS18761);
             iv_ruleRoundBracketedClauseCS=ruleRoundBracketedClauseCS();
 
             state._fsp--;
@@ -22684,7 +23879,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleRoundBracketedClauseCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRoundBracketedClauseCS17365); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRoundBracketedClauseCS18771); if (state.failed) return current;
 
             }
 
@@ -22702,7 +23897,7 @@
 
 
     // $ANTLR start "ruleRoundBracketedClauseCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7725:1: ruleRoundBracketedClauseCS returns [EObject current=null] : ( () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7959:1: ruleRoundBracketedClauseCS returns [EObject current=null] : ( () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')' ) ;
     public final EObject ruleRoundBracketedClauseCS() throws RecognitionException {
         EObject current = null;
 
@@ -22724,14 +23919,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7728:28: ( ( () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7729:1: ( () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7962:28: ( ( () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7963:1: ( () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7729:1: ( () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7729:2: () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7963:1: ( () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7963:2: () otherlv_1= '(' ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )? otherlv_8= ')'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7729:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7730:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7963:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7964:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -22748,35 +23943,35 @@
 
             }
 
-            otherlv_1=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleRoundBracketedClauseCS17414); if (state.failed) return current;
+            otherlv_1=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleRoundBracketedClauseCS18820); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getRoundBracketedClauseCSAccess().getLeftParenthesisKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7742:1: ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )?
-            int alt184=2;
-            int LA184_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7976:1: ( ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )* )?
+            int alt222=2;
+            int LA222_0 = input.LA(1);
 
-            if ( ((LA184_0>=RULE_INT && LA184_0<=RULE_SINGLE_QUOTED_STRING)||(LA184_0>=RULE_SIMPLE_ID && LA184_0<=RULE_ESCAPED_ID)||(LA184_0>=17 && LA184_0<=55)||LA184_0==57||LA184_0==59||LA184_0==72||(LA184_0>=74 && LA184_0<=75)||LA184_0==80||(LA184_0>=83 && LA184_0<=84)||LA184_0==98||(LA184_0>=100 && LA184_0<=112)||(LA184_0>=115 && LA184_0<=119)||LA184_0==126||(LA184_0>=131 && LA184_0<=132)) ) {
-                alt184=1;
+            if ( ((LA222_0>=RULE_INT && LA222_0<=RULE_SINGLE_QUOTED_STRING)||(LA222_0>=RULE_SIMPLE_ID && LA222_0<=RULE_ESCAPED_ID)||(LA222_0>=17 && LA222_0<=55)||LA222_0==57||LA222_0==59||LA222_0==72||(LA222_0>=74 && LA222_0<=75)||LA222_0==80||(LA222_0>=83 && LA222_0<=84)||LA222_0==98||(LA222_0>=100 && LA222_0<=112)||(LA222_0>=115 && LA222_0<=119)||LA222_0==126||(LA222_0>=131 && LA222_0<=132)) ) {
+                alt222=1;
             }
-            switch (alt184) {
+            switch (alt222) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7742:2: ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )*
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7976:2: ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) ) ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )* ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )? ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )*
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7742:2: ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7743:1: (lv_ownedArguments_2_0= ruleNavigatingArgCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7976:2: ( (lv_ownedArguments_2_0= ruleNavigatingArgCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7977:1: (lv_ownedArguments_2_0= ruleNavigatingArgCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7743:1: (lv_ownedArguments_2_0= ruleNavigatingArgCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7744:3: lv_ownedArguments_2_0= ruleNavigatingArgCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7977:1: (lv_ownedArguments_2_0= ruleNavigatingArgCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7978:3: lv_ownedArguments_2_0= ruleNavigatingArgCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingArgCSParserRuleCall_2_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgCS_in_ruleRoundBracketedClauseCS17436);
+                    pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgCS_in_ruleRoundBracketedClauseCS18842);
                     lv_ownedArguments_2_0=ruleNavigatingArgCS();
 
                     state._fsp--;
@@ -22800,30 +23995,30 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7760:2: ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )*
-                    loop179:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7994:2: ( (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS ) )*
+                    loop217:
                     do {
-                        int alt179=2;
-                        int LA179_0 = input.LA(1);
+                        int alt217=2;
+                        int LA217_0 = input.LA(1);
 
-                        if ( (LA179_0==60) ) {
-                            alt179=1;
+                        if ( (LA217_0==60) ) {
+                            alt217=1;
                         }
 
 
-                        switch (alt179) {
+                        switch (alt217) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7761:1: (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7995:1: (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7761:1: (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7762:3: lv_ownedArguments_3_0= ruleNavigatingCommaArgCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7995:1: (lv_ownedArguments_3_0= ruleNavigatingCommaArgCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7996:3: lv_ownedArguments_3_0= ruleNavigatingCommaArgCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingCommaArgCSParserRuleCall_2_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS17457);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS18863);
                     	    lv_ownedArguments_3_0=ruleNavigatingCommaArgCS();
 
                     	    state._fsp--;
@@ -22849,33 +24044,33 @@
                     	    break;
 
                     	default :
-                    	    break loop179;
+                    	    break loop217;
                         }
                     } while (true);
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7778:3: ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )?
-                    int alt181=2;
-                    int LA181_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8012:3: ( ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )* )?
+                    int alt219=2;
+                    int LA219_0 = input.LA(1);
 
-                    if ( (LA181_0==58) ) {
-                        alt181=1;
+                    if ( (LA219_0==58) ) {
+                        alt219=1;
                     }
-                    switch (alt181) {
+                    switch (alt219) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7778:4: ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )*
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8012:4: ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) ) ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )*
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7778:4: ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7779:1: (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8012:4: ( (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8013:1: (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7779:1: (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7780:3: lv_ownedArguments_4_0= ruleNavigatingSemiArgCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8013:1: (lv_ownedArguments_4_0= ruleNavigatingSemiArgCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8014:3: lv_ownedArguments_4_0= ruleNavigatingSemiArgCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingSemiArgCSParserRuleCall_2_2_0_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleNavigatingSemiArgCS_in_ruleRoundBracketedClauseCS17480);
+                            pushFollow(FollowSets000.FOLLOW_ruleNavigatingSemiArgCS_in_ruleRoundBracketedClauseCS18886);
                             lv_ownedArguments_4_0=ruleNavigatingSemiArgCS();
 
                             state._fsp--;
@@ -22899,30 +24094,30 @@
 
                             }
 
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7796:2: ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )*
-                            loop180:
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8030:2: ( (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS ) )*
+                            loop218:
                             do {
-                                int alt180=2;
-                                int LA180_0 = input.LA(1);
+                                int alt218=2;
+                                int LA218_0 = input.LA(1);
 
-                                if ( (LA180_0==60) ) {
-                                    alt180=1;
+                                if ( (LA218_0==60) ) {
+                                    alt218=1;
                                 }
 
 
-                                switch (alt180) {
+                                switch (alt218) {
                             	case 1 :
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7797:1: (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8031:1: (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS )
                             	    {
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7797:1: (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS )
-                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7798:3: lv_ownedArguments_5_0= ruleNavigatingCommaArgCS
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8031:1: (lv_ownedArguments_5_0= ruleNavigatingCommaArgCS )
+                            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8032:3: lv_ownedArguments_5_0= ruleNavigatingCommaArgCS
                             	    {
                             	    if ( state.backtracking==0 ) {
                             	       
                             	      	        newCompositeNode(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingCommaArgCSParserRuleCall_2_2_1_0()); 
                             	      	    
                             	    }
-                            	    pushFollow(FollowSets000.FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS17501);
+                            	    pushFollow(FollowSets000.FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS18907);
                             	    lv_ownedArguments_5_0=ruleNavigatingCommaArgCS();
 
                             	    state._fsp--;
@@ -22948,7 +24143,7 @@
                             	    break;
 
                             	default :
-                            	    break loop180;
+                            	    break loop218;
                                 }
                             } while (true);
 
@@ -22958,33 +24153,33 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7814:5: ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )*
-                    loop183:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8048:5: ( ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )* )*
+                    loop221:
                     do {
-                        int alt183=2;
-                        int LA183_0 = input.LA(1);
+                        int alt221=2;
+                        int LA221_0 = input.LA(1);
 
-                        if ( (LA183_0==125) ) {
-                            alt183=1;
+                        if ( (LA221_0==125) ) {
+                            alt221=1;
                         }
 
 
-                        switch (alt183) {
+                        switch (alt221) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7814:6: ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )*
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8048:6: ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) ) ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )*
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7814:6: ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7815:1: (lv_ownedArguments_6_0= ruleNavigatingBarArgCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8048:6: ( (lv_ownedArguments_6_0= ruleNavigatingBarArgCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8049:1: (lv_ownedArguments_6_0= ruleNavigatingBarArgCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7815:1: (lv_ownedArguments_6_0= ruleNavigatingBarArgCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7816:3: lv_ownedArguments_6_0= ruleNavigatingBarArgCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8049:1: (lv_ownedArguments_6_0= ruleNavigatingBarArgCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8050:3: lv_ownedArguments_6_0= ruleNavigatingBarArgCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingBarArgCSParserRuleCall_2_3_0_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleNavigatingBarArgCS_in_ruleRoundBracketedClauseCS17526);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleNavigatingBarArgCS_in_ruleRoundBracketedClauseCS18932);
                     	    lv_ownedArguments_6_0=ruleNavigatingBarArgCS();
 
                     	    state._fsp--;
@@ -23008,30 +24203,30 @@
 
                     	    }
 
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7832:2: ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )*
-                    	    loop182:
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8066:2: ( (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS ) )*
+                    	    loop220:
                     	    do {
-                    	        int alt182=2;
-                    	        int LA182_0 = input.LA(1);
+                    	        int alt220=2;
+                    	        int LA220_0 = input.LA(1);
 
-                    	        if ( (LA182_0==60) ) {
-                    	            alt182=1;
+                    	        if ( (LA220_0==60) ) {
+                    	            alt220=1;
                     	        }
 
 
-                    	        switch (alt182) {
+                    	        switch (alt220) {
                     	    	case 1 :
-                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7833:1: (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS )
+                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8067:1: (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS )
                     	    	    {
-                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7833:1: (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS )
-                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7834:3: lv_ownedArguments_7_0= ruleNavigatingCommaArgCS
+                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8067:1: (lv_ownedArguments_7_0= ruleNavigatingCommaArgCS )
+                    	    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8068:3: lv_ownedArguments_7_0= ruleNavigatingCommaArgCS
                     	    	    {
                     	    	    if ( state.backtracking==0 ) {
                     	    	       
                     	    	      	        newCompositeNode(grammarAccess.getRoundBracketedClauseCSAccess().getOwnedArgumentsNavigatingCommaArgCSParserRuleCall_2_3_1_0()); 
                     	    	      	    
                     	    	    }
-                    	    	    pushFollow(FollowSets000.FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS17547);
+                    	    	    pushFollow(FollowSets000.FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS18953);
                     	    	    lv_ownedArguments_7_0=ruleNavigatingCommaArgCS();
 
                     	    	    state._fsp--;
@@ -23057,7 +24252,7 @@
                     	    	    break;
 
                     	    	default :
-                    	    	    break loop182;
+                    	    	    break loop220;
                     	        }
                     	    } while (true);
 
@@ -23066,7 +24261,7 @@
                     	    break;
 
                     	default :
-                    	    break loop183;
+                    	    break loop221;
                         }
                     } while (true);
 
@@ -23076,7 +24271,7 @@
 
             }
 
-            otherlv_8=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleRoundBracketedClauseCS17564); if (state.failed) return current;
+            otherlv_8=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleRoundBracketedClauseCS18970); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_8, grammarAccess.getRoundBracketedClauseCSAccess().getRightParenthesisKeyword_3());
@@ -23105,7 +24300,7 @@
 
 
     // $ANTLR start "entryRuleSquareBracketedClauseCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7862:1: entryRuleSquareBracketedClauseCS returns [EObject current=null] : iv_ruleSquareBracketedClauseCS= ruleSquareBracketedClauseCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8096:1: entryRuleSquareBracketedClauseCS returns [EObject current=null] : iv_ruleSquareBracketedClauseCS= ruleSquareBracketedClauseCS EOF ;
     public final EObject entryRuleSquareBracketedClauseCS() throws RecognitionException {
         EObject current = null;
 
@@ -23113,13 +24308,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7863:2: (iv_ruleSquareBracketedClauseCS= ruleSquareBracketedClauseCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7864:2: iv_ruleSquareBracketedClauseCS= ruleSquareBracketedClauseCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8097:2: (iv_ruleSquareBracketedClauseCS= ruleSquareBracketedClauseCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8098:2: iv_ruleSquareBracketedClauseCS= ruleSquareBracketedClauseCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSquareBracketedClauseCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleSquareBracketedClauseCS_in_entryRuleSquareBracketedClauseCS17600);
+            pushFollow(FollowSets000.FOLLOW_ruleSquareBracketedClauseCS_in_entryRuleSquareBracketedClauseCS19006);
             iv_ruleSquareBracketedClauseCS=ruleSquareBracketedClauseCS();
 
             state._fsp--;
@@ -23127,7 +24322,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleSquareBracketedClauseCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSquareBracketedClauseCS17610); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSquareBracketedClauseCS19016); if (state.failed) return current;
 
             }
 
@@ -23145,7 +24340,7 @@
 
 
     // $ANTLR start "ruleSquareBracketedClauseCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7871:1: ruleSquareBracketedClauseCS returns [EObject current=null] : (otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8105:1: ruleSquareBracketedClauseCS returns [EObject current=null] : (otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']' ) ;
     public final EObject ruleSquareBracketedClauseCS() throws RecognitionException {
         EObject current = null;
 
@@ -23160,30 +24355,30 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7874:28: ( (otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7875:1: (otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8108:28: ( (otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8109:1: (otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7875:1: (otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7875:3: otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8109:1: (otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8109:3: otherlv_0= '[' ( (lv_ownedTerms_1_0= ruleExpCS ) ) (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )* otherlv_4= ']'
             {
-            otherlv_0=(Token)match(input,122,FollowSets000.FOLLOW_122_in_ruleSquareBracketedClauseCS17647); if (state.failed) return current;
+            otherlv_0=(Token)match(input,122,FollowSets000.FOLLOW_122_in_ruleSquareBracketedClauseCS19053); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getSquareBracketedClauseCSAccess().getLeftSquareBracketKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7879:1: ( (lv_ownedTerms_1_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7880:1: (lv_ownedTerms_1_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8113:1: ( (lv_ownedTerms_1_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8114:1: (lv_ownedTerms_1_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7880:1: (lv_ownedTerms_1_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7881:3: lv_ownedTerms_1_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8114:1: (lv_ownedTerms_1_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8115:3: lv_ownedTerms_1_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getSquareBracketedClauseCSAccess().getOwnedTermsExpCSParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleSquareBracketedClauseCS17668);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleSquareBracketedClauseCS19074);
             lv_ownedTerms_1_0=ruleExpCS();
 
             state._fsp--;
@@ -23207,39 +24402,39 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7897:2: (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )*
-            loop185:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8131:2: (otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) ) )*
+            loop223:
             do {
-                int alt185=2;
-                int LA185_0 = input.LA(1);
+                int alt223=2;
+                int LA223_0 = input.LA(1);
 
-                if ( (LA185_0==60) ) {
-                    alt185=1;
+                if ( (LA223_0==60) ) {
+                    alt223=1;
                 }
 
 
-                switch (alt185) {
+                switch (alt223) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7897:4: otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8131:4: otherlv_2= ',' ( (lv_ownedTerms_3_0= ruleExpCS ) )
             	    {
-            	    otherlv_2=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleSquareBracketedClauseCS17681); if (state.failed) return current;
+            	    otherlv_2=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleSquareBracketedClauseCS19087); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
             	          	newLeafNode(otherlv_2, grammarAccess.getSquareBracketedClauseCSAccess().getCommaKeyword_2_0());
             	          
             	    }
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7901:1: ( (lv_ownedTerms_3_0= ruleExpCS ) )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7902:1: (lv_ownedTerms_3_0= ruleExpCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8135:1: ( (lv_ownedTerms_3_0= ruleExpCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8136:1: (lv_ownedTerms_3_0= ruleExpCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7902:1: (lv_ownedTerms_3_0= ruleExpCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7903:3: lv_ownedTerms_3_0= ruleExpCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8136:1: (lv_ownedTerms_3_0= ruleExpCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8137:3: lv_ownedTerms_3_0= ruleExpCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
             	      	        newCompositeNode(grammarAccess.getSquareBracketedClauseCSAccess().getOwnedTermsExpCSParserRuleCall_2_1_0()); 
             	      	    
             	    }
-            	    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleSquareBracketedClauseCS17702);
+            	    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleSquareBracketedClauseCS19108);
             	    lv_ownedTerms_3_0=ruleExpCS();
 
             	    state._fsp--;
@@ -23268,11 +24463,11 @@
             	    break;
 
             	default :
-            	    break loop185;
+            	    break loop223;
                 }
             } while (true);
 
-            otherlv_4=(Token)match(input,123,FollowSets000.FOLLOW_123_in_ruleSquareBracketedClauseCS17716); if (state.failed) return current;
+            otherlv_4=(Token)match(input,123,FollowSets000.FOLLOW_123_in_ruleSquareBracketedClauseCS19122); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_4, grammarAccess.getSquareBracketedClauseCSAccess().getRightSquareBracketKeyword_3());
@@ -23301,7 +24496,7 @@
 
 
     // $ANTLR start "entryRuleNavigatingArgCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7931:1: entryRuleNavigatingArgCS returns [EObject current=null] : iv_ruleNavigatingArgCS= ruleNavigatingArgCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8165:1: entryRuleNavigatingArgCS returns [EObject current=null] : iv_ruleNavigatingArgCS= ruleNavigatingArgCS EOF ;
     public final EObject entryRuleNavigatingArgCS() throws RecognitionException {
         EObject current = null;
 
@@ -23309,13 +24504,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7932:2: (iv_ruleNavigatingArgCS= ruleNavigatingArgCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7933:2: iv_ruleNavigatingArgCS= ruleNavigatingArgCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8166:2: (iv_ruleNavigatingArgCS= ruleNavigatingArgCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8167:2: iv_ruleNavigatingArgCS= ruleNavigatingArgCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNavigatingArgCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgCS_in_entryRuleNavigatingArgCS17752);
+            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgCS_in_entryRuleNavigatingArgCS19158);
             iv_ruleNavigatingArgCS=ruleNavigatingArgCS();
 
             state._fsp--;
@@ -23323,7 +24518,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNavigatingArgCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingArgCS17762); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingArgCS19168); if (state.failed) return current;
 
             }
 
@@ -23341,7 +24536,7 @@
 
 
     // $ANTLR start "ruleNavigatingArgCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7940:1: ruleNavigatingArgCS returns [EObject current=null] : ( ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? ) | (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8174:1: ruleNavigatingArgCS returns [EObject current=null] : ( ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? ) | (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) ) ) ;
     public final EObject ruleNavigatingArgCS() throws RecognitionException {
         EObject current = null;
 
@@ -23363,45 +24558,45 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7943:28: ( ( ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? ) | (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7944:1: ( ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? ) | (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8177:28: ( ( ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? ) | (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8178:1: ( ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? ) | (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7944:1: ( ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? ) | (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) ) )
-            int alt188=2;
-            int LA188_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8178:1: ( ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? ) | (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) ) )
+            int alt226=2;
+            int LA226_0 = input.LA(1);
 
-            if ( ((LA188_0>=RULE_INT && LA188_0<=RULE_SINGLE_QUOTED_STRING)||(LA188_0>=RULE_SIMPLE_ID && LA188_0<=RULE_ESCAPED_ID)||(LA188_0>=17 && LA188_0<=55)||LA188_0==59||LA188_0==72||(LA188_0>=74 && LA188_0<=75)||LA188_0==80||(LA188_0>=83 && LA188_0<=84)||LA188_0==98||(LA188_0>=100 && LA188_0<=112)||(LA188_0>=115 && LA188_0<=119)||LA188_0==126||(LA188_0>=131 && LA188_0<=132)) ) {
-                alt188=1;
+            if ( ((LA226_0>=RULE_INT && LA226_0<=RULE_SINGLE_QUOTED_STRING)||(LA226_0>=RULE_SIMPLE_ID && LA226_0<=RULE_ESCAPED_ID)||(LA226_0>=17 && LA226_0<=55)||LA226_0==59||LA226_0==72||(LA226_0>=74 && LA226_0<=75)||LA226_0==80||(LA226_0>=83 && LA226_0<=84)||LA226_0==98||(LA226_0>=100 && LA226_0<=112)||(LA226_0>=115 && LA226_0<=119)||LA226_0==126||(LA226_0>=131 && LA226_0<=132)) ) {
+                alt226=1;
             }
-            else if ( (LA188_0==57) ) {
-                alt188=2;
+            else if ( (LA226_0==57) ) {
+                alt226=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 188, 0, input);
+                    new NoViableAltException("", 226, 0, input);
 
                 throw nvae;
             }
-            switch (alt188) {
+            switch (alt226) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7944:2: ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8178:2: ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7944:2: ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7944:3: ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8178:2: ( ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8178:3: ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) ) ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )?
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7944:3: ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7945:1: (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8178:3: ( (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8179:1: (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7945:1: (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7946:3: lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8179:1: (lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8180:3: lv_ownedNameExpression_0_0= ruleNavigatingArgExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getNavigatingArgCSAccess().getOwnedNameExpressionNavigatingArgExpCSParserRuleCall_0_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingArgCS17809);
+                    pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingArgCS19215);
                     lv_ownedNameExpression_0_0=ruleNavigatingArgExpCS();
 
                     state._fsp--;
@@ -23425,41 +24620,41 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7962:2: ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )?
-                    int alt187=3;
-                    int LA187_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8196:2: ( (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? ) | (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) ) )?
+                    int alt225=3;
+                    int LA225_0 = input.LA(1);
 
-                    if ( (LA187_0==57) ) {
-                        alt187=1;
+                    if ( (LA225_0==57) ) {
+                        alt225=1;
                     }
-                    else if ( (LA187_0==124) ) {
-                        alt187=2;
+                    else if ( (LA225_0==124) ) {
+                        alt225=2;
                     }
-                    switch (alt187) {
+                    switch (alt225) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7962:3: (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8196:3: (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7962:3: (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7962:5: otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )?
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8196:3: (otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )? )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8196:5: otherlv_1= ':' ( (lv_ownedType_2_0= ruleTypeExpCS ) ) (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )?
                             {
-                            otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingArgCS17823); if (state.failed) return current;
+                            otherlv_1=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingArgCS19229); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_1, grammarAccess.getNavigatingArgCSAccess().getColonKeyword_0_1_0_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7966:1: ( (lv_ownedType_2_0= ruleTypeExpCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7967:1: (lv_ownedType_2_0= ruleTypeExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8200:1: ( (lv_ownedType_2_0= ruleTypeExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8201:1: (lv_ownedType_2_0= ruleTypeExpCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7967:1: (lv_ownedType_2_0= ruleTypeExpCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7968:3: lv_ownedType_2_0= ruleTypeExpCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8201:1: (lv_ownedType_2_0= ruleTypeExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8202:3: lv_ownedType_2_0= ruleTypeExpCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getNavigatingArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_0_1_0_1_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingArgCS17844);
+                            pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingArgCS19250);
                             lv_ownedType_2_0=ruleTypeExpCS();
 
                             state._fsp--;
@@ -23483,35 +24678,35 @@
 
                             }
 
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7984:2: (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )?
-                            int alt186=2;
-                            int LA186_0 = input.LA(1);
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8218:2: (otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) ) )?
+                            int alt224=2;
+                            int LA224_0 = input.LA(1);
 
-                            if ( (LA186_0==63) ) {
-                                alt186=1;
+                            if ( (LA224_0==63) ) {
+                                alt224=1;
                             }
-                            switch (alt186) {
+                            switch (alt224) {
                                 case 1 :
-                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7984:4: otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) )
+                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8218:4: otherlv_3= '=' ( (lv_ownedInitExpression_4_0= ruleExpCS ) )
                                     {
-                                    otherlv_3=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleNavigatingArgCS17857); if (state.failed) return current;
+                                    otherlv_3=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleNavigatingArgCS19263); if (state.failed) return current;
                                     if ( state.backtracking==0 ) {
 
                                           	newLeafNode(otherlv_3, grammarAccess.getNavigatingArgCSAccess().getEqualsSignKeyword_0_1_0_2_0());
                                           
                                     }
-                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7988:1: ( (lv_ownedInitExpression_4_0= ruleExpCS ) )
-                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7989:1: (lv_ownedInitExpression_4_0= ruleExpCS )
+                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8222:1: ( (lv_ownedInitExpression_4_0= ruleExpCS ) )
+                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8223:1: (lv_ownedInitExpression_4_0= ruleExpCS )
                                     {
-                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7989:1: (lv_ownedInitExpression_4_0= ruleExpCS )
-                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7990:3: lv_ownedInitExpression_4_0= ruleExpCS
+                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8223:1: (lv_ownedInitExpression_4_0= ruleExpCS )
+                                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8224:3: lv_ownedInitExpression_4_0= ruleExpCS
                                     {
                                     if ( state.backtracking==0 ) {
                                        
                                       	        newCompositeNode(grammarAccess.getNavigatingArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_0_1_0_2_1_0()); 
                                       	    
                                     }
-                                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingArgCS17878);
+                                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingArgCS19284);
                                     lv_ownedInitExpression_4_0=ruleExpCS();
 
                                     state._fsp--;
@@ -23548,29 +24743,29 @@
                             }
                             break;
                         case 2 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8007:6: (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8241:6: (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8007:6: (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8007:8: otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8241:6: (otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8241:8: otherlv_5= 'in' ( (lv_ownedInitExpression_6_0= ruleExpCS ) )
                             {
-                            otherlv_5=(Token)match(input,124,FollowSets000.FOLLOW_124_in_ruleNavigatingArgCS17900); if (state.failed) return current;
+                            otherlv_5=(Token)match(input,124,FollowSets000.FOLLOW_124_in_ruleNavigatingArgCS19306); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_5, grammarAccess.getNavigatingArgCSAccess().getInKeyword_0_1_1_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8011:1: ( (lv_ownedInitExpression_6_0= ruleExpCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8012:1: (lv_ownedInitExpression_6_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8245:1: ( (lv_ownedInitExpression_6_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8246:1: (lv_ownedInitExpression_6_0= ruleExpCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8012:1: (lv_ownedInitExpression_6_0= ruleExpCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8013:3: lv_ownedInitExpression_6_0= ruleExpCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8246:1: (lv_ownedInitExpression_6_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8247:3: lv_ownedInitExpression_6_0= ruleExpCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getNavigatingArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_0_1_1_1_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingArgCS17921);
+                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingArgCS19327);
                             lv_ownedInitExpression_6_0=ruleExpCS();
 
                             state._fsp--;
@@ -23610,29 +24805,29 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8030:6: (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8264:6: (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8030:6: (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8030:8: otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8264:6: (otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8264:8: otherlv_7= ':' ( (lv_ownedType_8_0= ruleTypeExpCS ) )
                     {
-                    otherlv_7=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingArgCS17944); if (state.failed) return current;
+                    otherlv_7=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingArgCS19350); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_7, grammarAccess.getNavigatingArgCSAccess().getColonKeyword_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8034:1: ( (lv_ownedType_8_0= ruleTypeExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8035:1: (lv_ownedType_8_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8268:1: ( (lv_ownedType_8_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8269:1: (lv_ownedType_8_0= ruleTypeExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8035:1: (lv_ownedType_8_0= ruleTypeExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8036:3: lv_ownedType_8_0= ruleTypeExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8269:1: (lv_ownedType_8_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8270:3: lv_ownedType_8_0= ruleTypeExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getNavigatingArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingArgCS17965);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingArgCS19371);
                     lv_ownedType_8_0=ruleTypeExpCS();
 
                     state._fsp--;
@@ -23685,7 +24880,7 @@
 
 
     // $ANTLR start "entryRuleNavigatingBarArgCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8060:1: entryRuleNavigatingBarArgCS returns [EObject current=null] : iv_ruleNavigatingBarArgCS= ruleNavigatingBarArgCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8294:1: entryRuleNavigatingBarArgCS returns [EObject current=null] : iv_ruleNavigatingBarArgCS= ruleNavigatingBarArgCS EOF ;
     public final EObject entryRuleNavigatingBarArgCS() throws RecognitionException {
         EObject current = null;
 
@@ -23693,13 +24888,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8061:2: (iv_ruleNavigatingBarArgCS= ruleNavigatingBarArgCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8062:2: iv_ruleNavigatingBarArgCS= ruleNavigatingBarArgCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8295:2: (iv_ruleNavigatingBarArgCS= ruleNavigatingBarArgCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8296:2: iv_ruleNavigatingBarArgCS= ruleNavigatingBarArgCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNavigatingBarArgCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNavigatingBarArgCS_in_entryRuleNavigatingBarArgCS18002);
+            pushFollow(FollowSets000.FOLLOW_ruleNavigatingBarArgCS_in_entryRuleNavigatingBarArgCS19408);
             iv_ruleNavigatingBarArgCS=ruleNavigatingBarArgCS();
 
             state._fsp--;
@@ -23707,7 +24902,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNavigatingBarArgCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingBarArgCS18012); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingBarArgCS19418); if (state.failed) return current;
 
             }
 
@@ -23725,7 +24920,7 @@
 
 
     // $ANTLR start "ruleNavigatingBarArgCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8069:1: ruleNavigatingBarArgCS returns [EObject current=null] : ( ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8303:1: ruleNavigatingBarArgCS returns [EObject current=null] : ( ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? ) ;
     public final EObject ruleNavigatingBarArgCS() throws RecognitionException {
         EObject current = null;
 
@@ -23742,19 +24937,19 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8072:28: ( ( ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8073:1: ( ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8306:28: ( ( ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8307:1: ( ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8073:1: ( ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8073:2: ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8307:1: ( ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8307:2: ( (lv_prefix_0_0= '|' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8073:2: ( (lv_prefix_0_0= '|' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8074:1: (lv_prefix_0_0= '|' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8307:2: ( (lv_prefix_0_0= '|' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8308:1: (lv_prefix_0_0= '|' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8074:1: (lv_prefix_0_0= '|' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8075:3: lv_prefix_0_0= '|'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8308:1: (lv_prefix_0_0= '|' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8309:3: lv_prefix_0_0= '|'
             {
-            lv_prefix_0_0=(Token)match(input,125,FollowSets000.FOLLOW_125_in_ruleNavigatingBarArgCS18055); if (state.failed) return current;
+            lv_prefix_0_0=(Token)match(input,125,FollowSets000.FOLLOW_125_in_ruleNavigatingBarArgCS19461); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                       newLeafNode(lv_prefix_0_0, grammarAccess.getNavigatingBarArgCSAccess().getPrefixVerticalLineKeyword_0_0());
@@ -23774,18 +24969,18 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8088:2: ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8089:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8322:2: ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8323:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8089:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8090:3: lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8323:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8324:3: lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getNavigatingBarArgCSAccess().getOwnedNameExpressionNavigatingArgExpCSParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingBarArgCS18089);
+            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingBarArgCS19495);
             lv_ownedNameExpression_1_0=ruleNavigatingArgExpCS();
 
             state._fsp--;
@@ -23809,35 +25004,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8106:2: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )?
-            int alt190=2;
-            int LA190_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8340:2: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )?
+            int alt228=2;
+            int LA228_0 = input.LA(1);
 
-            if ( (LA190_0==57) ) {
-                alt190=1;
+            if ( (LA228_0==57) ) {
+                alt228=1;
             }
-            switch (alt190) {
+            switch (alt228) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8106:4: otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8340:4: otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
                     {
-                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingBarArgCS18102); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingBarArgCS19508); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_2, grammarAccess.getNavigatingBarArgCSAccess().getColonKeyword_2_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8110:1: ( (lv_ownedType_3_0= ruleTypeExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8111:1: (lv_ownedType_3_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8344:1: ( (lv_ownedType_3_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8345:1: (lv_ownedType_3_0= ruleTypeExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8111:1: (lv_ownedType_3_0= ruleTypeExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8112:3: lv_ownedType_3_0= ruleTypeExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8345:1: (lv_ownedType_3_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8346:3: lv_ownedType_3_0= ruleTypeExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getNavigatingBarArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingBarArgCS18123);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingBarArgCS19529);
                     lv_ownedType_3_0=ruleTypeExpCS();
 
                     state._fsp--;
@@ -23861,35 +25056,35 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8128:2: (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
-                    int alt189=2;
-                    int LA189_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8362:2: (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
+                    int alt227=2;
+                    int LA227_0 = input.LA(1);
 
-                    if ( (LA189_0==63) ) {
-                        alt189=1;
+                    if ( (LA227_0==63) ) {
+                        alt227=1;
                     }
-                    switch (alt189) {
+                    switch (alt227) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8128:4: otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8362:4: otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
                             {
-                            otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleNavigatingBarArgCS18136); if (state.failed) return current;
+                            otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleNavigatingBarArgCS19542); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_4, grammarAccess.getNavigatingBarArgCSAccess().getEqualsSignKeyword_2_2_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8132:1: ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8133:1: (lv_ownedInitExpression_5_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8366:1: ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8367:1: (lv_ownedInitExpression_5_0= ruleExpCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8133:1: (lv_ownedInitExpression_5_0= ruleExpCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8134:3: lv_ownedInitExpression_5_0= ruleExpCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8367:1: (lv_ownedInitExpression_5_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8368:3: lv_ownedInitExpression_5_0= ruleExpCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getNavigatingBarArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_2_1_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingBarArgCS18157);
+                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingBarArgCS19563);
                             lv_ownedInitExpression_5_0=ruleExpCS();
 
                             state._fsp--;
@@ -23948,7 +25143,7 @@
 
 
     // $ANTLR start "entryRuleNavigatingCommaArgCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8158:1: entryRuleNavigatingCommaArgCS returns [EObject current=null] : iv_ruleNavigatingCommaArgCS= ruleNavigatingCommaArgCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8392:1: entryRuleNavigatingCommaArgCS returns [EObject current=null] : iv_ruleNavigatingCommaArgCS= ruleNavigatingCommaArgCS EOF ;
     public final EObject entryRuleNavigatingCommaArgCS() throws RecognitionException {
         EObject current = null;
 
@@ -23956,13 +25151,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8159:2: (iv_ruleNavigatingCommaArgCS= ruleNavigatingCommaArgCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8160:2: iv_ruleNavigatingCommaArgCS= ruleNavigatingCommaArgCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8393:2: (iv_ruleNavigatingCommaArgCS= ruleNavigatingCommaArgCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8394:2: iv_ruleNavigatingCommaArgCS= ruleNavigatingCommaArgCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNavigatingCommaArgCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNavigatingCommaArgCS_in_entryRuleNavigatingCommaArgCS18197);
+            pushFollow(FollowSets000.FOLLOW_ruleNavigatingCommaArgCS_in_entryRuleNavigatingCommaArgCS19603);
             iv_ruleNavigatingCommaArgCS=ruleNavigatingCommaArgCS();
 
             state._fsp--;
@@ -23970,7 +25165,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNavigatingCommaArgCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingCommaArgCS18207); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingCommaArgCS19613); if (state.failed) return current;
 
             }
 
@@ -23988,7 +25183,7 @@
 
 
     // $ANTLR start "ruleNavigatingCommaArgCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8167:1: ruleNavigatingCommaArgCS returns [EObject current=null] : ( ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8401:1: ruleNavigatingCommaArgCS returns [EObject current=null] : ( ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )? ) ;
     public final EObject ruleNavigatingCommaArgCS() throws RecognitionException {
         EObject current = null;
 
@@ -24008,19 +25203,19 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8170:28: ( ( ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8171:1: ( ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8404:28: ( ( ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8405:1: ( ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8171:1: ( ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8171:2: ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8405:1: ( ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8405:2: ( (lv_prefix_0_0= ',' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8171:2: ( (lv_prefix_0_0= ',' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8172:1: (lv_prefix_0_0= ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8405:2: ( (lv_prefix_0_0= ',' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8406:1: (lv_prefix_0_0= ',' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8172:1: (lv_prefix_0_0= ',' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8173:3: lv_prefix_0_0= ','
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8406:1: (lv_prefix_0_0= ',' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8407:3: lv_prefix_0_0= ','
             {
-            lv_prefix_0_0=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleNavigatingCommaArgCS18250); if (state.failed) return current;
+            lv_prefix_0_0=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleNavigatingCommaArgCS19656); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                       newLeafNode(lv_prefix_0_0, grammarAccess.getNavigatingCommaArgCSAccess().getPrefixCommaKeyword_0_0());
@@ -24040,18 +25235,18 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8186:2: ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8187:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8420:2: ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8421:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8187:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8188:3: lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8421:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8422:3: lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedNameExpressionNavigatingArgExpCSParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingCommaArgCS18284);
+            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingCommaArgCS19690);
             lv_ownedNameExpression_1_0=ruleNavigatingArgExpCS();
 
             state._fsp--;
@@ -24075,41 +25270,41 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8204:2: ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )?
-            int alt192=3;
-            int LA192_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8438:2: ( (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? ) | (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) ) )?
+            int alt230=3;
+            int LA230_0 = input.LA(1);
 
-            if ( (LA192_0==57) ) {
-                alt192=1;
+            if ( (LA230_0==57) ) {
+                alt230=1;
             }
-            else if ( (LA192_0==124) ) {
-                alt192=2;
+            else if ( (LA230_0==124) ) {
+                alt230=2;
             }
-            switch (alt192) {
+            switch (alt230) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8204:3: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8438:3: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8204:3: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8204:5: otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8438:3: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8438:5: otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
                     {
-                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingCommaArgCS18298); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingCommaArgCS19704); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_2, grammarAccess.getNavigatingCommaArgCSAccess().getColonKeyword_2_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8208:1: ( (lv_ownedType_3_0= ruleTypeExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8209:1: (lv_ownedType_3_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8442:1: ( (lv_ownedType_3_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8443:1: (lv_ownedType_3_0= ruleTypeExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8209:1: (lv_ownedType_3_0= ruleTypeExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8210:3: lv_ownedType_3_0= ruleTypeExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8443:1: (lv_ownedType_3_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8444:3: lv_ownedType_3_0= ruleTypeExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_0_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingCommaArgCS18319);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingCommaArgCS19725);
                     lv_ownedType_3_0=ruleTypeExpCS();
 
                     state._fsp--;
@@ -24133,35 +25328,35 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8226:2: (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
-                    int alt191=2;
-                    int LA191_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8460:2: (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
+                    int alt229=2;
+                    int LA229_0 = input.LA(1);
 
-                    if ( (LA191_0==63) ) {
-                        alt191=1;
+                    if ( (LA229_0==63) ) {
+                        alt229=1;
                     }
-                    switch (alt191) {
+                    switch (alt229) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8226:4: otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8460:4: otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
                             {
-                            otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleNavigatingCommaArgCS18332); if (state.failed) return current;
+                            otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleNavigatingCommaArgCS19738); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_4, grammarAccess.getNavigatingCommaArgCSAccess().getEqualsSignKeyword_2_0_2_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8230:1: ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8231:1: (lv_ownedInitExpression_5_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8464:1: ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8465:1: (lv_ownedInitExpression_5_0= ruleExpCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8231:1: (lv_ownedInitExpression_5_0= ruleExpCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8232:3: lv_ownedInitExpression_5_0= ruleExpCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8465:1: (lv_ownedInitExpression_5_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8466:3: lv_ownedInitExpression_5_0= ruleExpCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_0_2_1_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingCommaArgCS18353);
+                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingCommaArgCS19759);
                             lv_ownedInitExpression_5_0=ruleExpCS();
 
                             state._fsp--;
@@ -24198,29 +25393,29 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8249:6: (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8483:6: (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8249:6: (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8249:8: otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8483:6: (otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8483:8: otherlv_6= 'in' ( (lv_ownedInitExpression_7_0= ruleExpCS ) )
                     {
-                    otherlv_6=(Token)match(input,124,FollowSets000.FOLLOW_124_in_ruleNavigatingCommaArgCS18375); if (state.failed) return current;
+                    otherlv_6=(Token)match(input,124,FollowSets000.FOLLOW_124_in_ruleNavigatingCommaArgCS19781); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_6, grammarAccess.getNavigatingCommaArgCSAccess().getInKeyword_2_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8253:1: ( (lv_ownedInitExpression_7_0= ruleExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8254:1: (lv_ownedInitExpression_7_0= ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8487:1: ( (lv_ownedInitExpression_7_0= ruleExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8488:1: (lv_ownedInitExpression_7_0= ruleExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8254:1: (lv_ownedInitExpression_7_0= ruleExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8255:3: lv_ownedInitExpression_7_0= ruleExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8488:1: (lv_ownedInitExpression_7_0= ruleExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8489:3: lv_ownedInitExpression_7_0= ruleExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getNavigatingCommaArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingCommaArgCS18396);
+                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingCommaArgCS19802);
                     lv_ownedInitExpression_7_0=ruleExpCS();
 
                     state._fsp--;
@@ -24276,7 +25471,7 @@
 
 
     // $ANTLR start "entryRuleNavigatingSemiArgCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8279:1: entryRuleNavigatingSemiArgCS returns [EObject current=null] : iv_ruleNavigatingSemiArgCS= ruleNavigatingSemiArgCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8513:1: entryRuleNavigatingSemiArgCS returns [EObject current=null] : iv_ruleNavigatingSemiArgCS= ruleNavigatingSemiArgCS EOF ;
     public final EObject entryRuleNavigatingSemiArgCS() throws RecognitionException {
         EObject current = null;
 
@@ -24284,13 +25479,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8280:2: (iv_ruleNavigatingSemiArgCS= ruleNavigatingSemiArgCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8281:2: iv_ruleNavigatingSemiArgCS= ruleNavigatingSemiArgCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8514:2: (iv_ruleNavigatingSemiArgCS= ruleNavigatingSemiArgCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8515:2: iv_ruleNavigatingSemiArgCS= ruleNavigatingSemiArgCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNavigatingSemiArgCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNavigatingSemiArgCS_in_entryRuleNavigatingSemiArgCS18435);
+            pushFollow(FollowSets000.FOLLOW_ruleNavigatingSemiArgCS_in_entryRuleNavigatingSemiArgCS19841);
             iv_ruleNavigatingSemiArgCS=ruleNavigatingSemiArgCS();
 
             state._fsp--;
@@ -24298,7 +25493,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNavigatingSemiArgCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingSemiArgCS18445); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingSemiArgCS19851); if (state.failed) return current;
 
             }
 
@@ -24316,7 +25511,7 @@
 
 
     // $ANTLR start "ruleNavigatingSemiArgCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8288:1: ruleNavigatingSemiArgCS returns [EObject current=null] : ( ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8522:1: ruleNavigatingSemiArgCS returns [EObject current=null] : ( ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? ) ;
     public final EObject ruleNavigatingSemiArgCS() throws RecognitionException {
         EObject current = null;
 
@@ -24333,19 +25528,19 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8291:28: ( ( ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8292:1: ( ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8525:28: ( ( ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8526:1: ( ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8292:1: ( ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8292:2: ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8526:1: ( ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8526:2: ( (lv_prefix_0_0= ';' ) ) ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) ) (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8292:2: ( (lv_prefix_0_0= ';' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8293:1: (lv_prefix_0_0= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8526:2: ( (lv_prefix_0_0= ';' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8527:1: (lv_prefix_0_0= ';' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8293:1: (lv_prefix_0_0= ';' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8294:3: lv_prefix_0_0= ';'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8527:1: (lv_prefix_0_0= ';' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8528:3: lv_prefix_0_0= ';'
             {
-            lv_prefix_0_0=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleNavigatingSemiArgCS18488); if (state.failed) return current;
+            lv_prefix_0_0=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleNavigatingSemiArgCS19894); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                       newLeafNode(lv_prefix_0_0, grammarAccess.getNavigatingSemiArgCSAccess().getPrefixSemicolonKeyword_0_0());
@@ -24365,18 +25560,18 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8307:2: ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8308:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8541:2: ( (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8542:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8308:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8309:3: lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8542:1: (lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8543:3: lv_ownedNameExpression_1_0= ruleNavigatingArgExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getNavigatingSemiArgCSAccess().getOwnedNameExpressionNavigatingArgExpCSParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingSemiArgCS18522);
+            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingSemiArgCS19928);
             lv_ownedNameExpression_1_0=ruleNavigatingArgExpCS();
 
             state._fsp--;
@@ -24400,35 +25595,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8325:2: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )?
-            int alt194=2;
-            int LA194_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8559:2: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )? )?
+            int alt232=2;
+            int LA232_0 = input.LA(1);
 
-            if ( (LA194_0==57) ) {
-                alt194=1;
+            if ( (LA232_0==57) ) {
+                alt232=1;
             }
-            switch (alt194) {
+            switch (alt232) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8325:4: otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8559:4: otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
                     {
-                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingSemiArgCS18535); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleNavigatingSemiArgCS19941); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_2, grammarAccess.getNavigatingSemiArgCSAccess().getColonKeyword_2_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8329:1: ( (lv_ownedType_3_0= ruleTypeExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8330:1: (lv_ownedType_3_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8563:1: ( (lv_ownedType_3_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8564:1: (lv_ownedType_3_0= ruleTypeExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8330:1: (lv_ownedType_3_0= ruleTypeExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8331:3: lv_ownedType_3_0= ruleTypeExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8564:1: (lv_ownedType_3_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8565:3: lv_ownedType_3_0= ruleTypeExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getNavigatingSemiArgCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingSemiArgCS18556);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleNavigatingSemiArgCS19962);
                     lv_ownedType_3_0=ruleTypeExpCS();
 
                     state._fsp--;
@@ -24452,35 +25647,35 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8347:2: (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
-                    int alt193=2;
-                    int LA193_0 = input.LA(1);
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8581:2: (otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )?
+                    int alt231=2;
+                    int LA231_0 = input.LA(1);
 
-                    if ( (LA193_0==63) ) {
-                        alt193=1;
+                    if ( (LA231_0==63) ) {
+                        alt231=1;
                     }
-                    switch (alt193) {
+                    switch (alt231) {
                         case 1 :
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8347:4: otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8581:4: otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
                             {
-                            otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleNavigatingSemiArgCS18569); if (state.failed) return current;
+                            otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleNavigatingSemiArgCS19975); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
                                   	newLeafNode(otherlv_4, grammarAccess.getNavigatingSemiArgCSAccess().getEqualsSignKeyword_2_2_0());
                                   
                             }
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8351:1: ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8352:1: (lv_ownedInitExpression_5_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8585:1: ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8586:1: (lv_ownedInitExpression_5_0= ruleExpCS )
                             {
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8352:1: (lv_ownedInitExpression_5_0= ruleExpCS )
-                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8353:3: lv_ownedInitExpression_5_0= ruleExpCS
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8586:1: (lv_ownedInitExpression_5_0= ruleExpCS )
+                            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8587:3: lv_ownedInitExpression_5_0= ruleExpCS
                             {
                             if ( state.backtracking==0 ) {
                                
                               	        newCompositeNode(grammarAccess.getNavigatingSemiArgCSAccess().getOwnedInitExpressionExpCSParserRuleCall_2_2_1_0()); 
                               	    
                             }
-                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingSemiArgCS18590);
+                            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingSemiArgCS19996);
                             lv_ownedInitExpression_5_0=ruleExpCS();
 
                             state._fsp--;
@@ -24539,7 +25734,7 @@
 
 
     // $ANTLR start "entryRuleNavigatingArgExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8377:1: entryRuleNavigatingArgExpCS returns [EObject current=null] : iv_ruleNavigatingArgExpCS= ruleNavigatingArgExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8611:1: entryRuleNavigatingArgExpCS returns [EObject current=null] : iv_ruleNavigatingArgExpCS= ruleNavigatingArgExpCS EOF ;
     public final EObject entryRuleNavigatingArgExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -24547,13 +25742,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8378:2: (iv_ruleNavigatingArgExpCS= ruleNavigatingArgExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8379:2: iv_ruleNavigatingArgExpCS= ruleNavigatingArgExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8612:2: (iv_ruleNavigatingArgExpCS= ruleNavigatingArgExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8613:2: iv_ruleNavigatingArgExpCS= ruleNavigatingArgExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNavigatingArgExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_entryRuleNavigatingArgExpCS18630);
+            pushFollow(FollowSets000.FOLLOW_ruleNavigatingArgExpCS_in_entryRuleNavigatingArgExpCS20036);
             iv_ruleNavigatingArgExpCS=ruleNavigatingArgExpCS();
 
             state._fsp--;
@@ -24561,7 +25756,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNavigatingArgExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingArgExpCS18640); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNavigatingArgExpCS20046); if (state.failed) return current;
 
             }
 
@@ -24579,7 +25774,7 @@
 
 
     // $ANTLR start "ruleNavigatingArgExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8386:1: ruleNavigatingArgExpCS returns [EObject current=null] : this_ExpCS_0= ruleExpCS ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8620:1: ruleNavigatingArgExpCS returns [EObject current=null] : this_ExpCS_0= ruleExpCS ;
     public final EObject ruleNavigatingArgExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -24589,8 +25784,8 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8389:28: (this_ExpCS_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8391:2: this_ExpCS_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8623:28: (this_ExpCS_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8625:2: this_ExpCS_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
@@ -24602,7 +25797,7 @@
                       newCompositeNode(grammarAccess.getNavigatingArgExpCSAccess().getExpCSParserRuleCall()); 
                   
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingArgExpCS18689);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNavigatingArgExpCS20095);
             this_ExpCS_0=ruleExpCS();
 
             state._fsp--;
@@ -24633,7 +25828,7 @@
 
 
     // $ANTLR start "entryRuleIfExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8410:1: entryRuleIfExpCS returns [EObject current=null] : iv_ruleIfExpCS= ruleIfExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8644:1: entryRuleIfExpCS returns [EObject current=null] : iv_ruleIfExpCS= ruleIfExpCS EOF ;
     public final EObject entryRuleIfExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -24641,13 +25836,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8411:2: (iv_ruleIfExpCS= ruleIfExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8412:2: iv_ruleIfExpCS= ruleIfExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8645:2: (iv_ruleIfExpCS= ruleIfExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8646:2: iv_ruleIfExpCS= ruleIfExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getIfExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleIfExpCS_in_entryRuleIfExpCS18723);
+            pushFollow(FollowSets000.FOLLOW_ruleIfExpCS_in_entryRuleIfExpCS20129);
             iv_ruleIfExpCS=ruleIfExpCS();
 
             state._fsp--;
@@ -24655,7 +25850,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleIfExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleIfExpCS18733); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleIfExpCS20139); if (state.failed) return current;
 
             }
 
@@ -24673,7 +25868,7 @@
 
 
     // $ANTLR start "ruleIfExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8419:1: ruleIfExpCS returns [EObject current=null] : (otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8653:1: ruleIfExpCS returns [EObject current=null] : (otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif' ) ;
     public final EObject ruleIfExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -24695,37 +25890,37 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8422:28: ( (otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8423:1: (otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8656:28: ( (otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8657:1: (otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8423:1: (otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8423:3: otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8657:1: (otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8657:3: otherlv_0= 'if' ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )* otherlv_5= 'else' ( (lv_ownedElseExpression_6_0= ruleExpCS ) ) otherlv_7= 'endif'
             {
-            otherlv_0=(Token)match(input,126,FollowSets000.FOLLOW_126_in_ruleIfExpCS18770); if (state.failed) return current;
+            otherlv_0=(Token)match(input,126,FollowSets000.FOLLOW_126_in_ruleIfExpCS20176); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getIfExpCSAccess().getIfKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8427:1: ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8428:1: ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8661:1: ( ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8662:1: ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8428:1: ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8429:1: (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8662:1: ( (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8663:1: (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8429:1: (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS )
-            int alt195=2;
-            alt195 = dfa195.predict(input);
-            switch (alt195) {
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8663:1: (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS )
+            int alt233=2;
+            alt233 = dfa233.predict(input);
+            switch (alt233) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8430:3: lv_ownedCondition_1_1= ruleExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8664:3: lv_ownedCondition_1_1= ruleExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getIfExpCSAccess().getOwnedConditionExpCSParserRuleCall_1_0_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleIfExpCS18793);
+                    pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleIfExpCS20199);
                     lv_ownedCondition_1_1=ruleExpCS();
 
                     state._fsp--;
@@ -24747,14 +25942,14 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8445:8: lv_ownedCondition_1_2= rulePatternExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8679:8: lv_ownedCondition_1_2= rulePatternExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getIfExpCSAccess().getOwnedConditionPatternExpCSParserRuleCall_1_0_1()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleIfExpCS18812);
+                    pushFollow(FollowSets000.FOLLOW_rulePatternExpCS_in_ruleIfExpCS20218);
                     lv_ownedCondition_1_2=rulePatternExpCS();
 
                     state._fsp--;
@@ -24784,24 +25979,24 @@
 
             }
 
-            otherlv_2=(Token)match(input,127,FollowSets000.FOLLOW_127_in_ruleIfExpCS18827); if (state.failed) return current;
+            otherlv_2=(Token)match(input,127,FollowSets000.FOLLOW_127_in_ruleIfExpCS20233); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_2, grammarAccess.getIfExpCSAccess().getThenKeyword_2());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8467:1: ( (lv_ownedThenExpression_3_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8468:1: (lv_ownedThenExpression_3_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8701:1: ( (lv_ownedThenExpression_3_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8702:1: (lv_ownedThenExpression_3_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8468:1: (lv_ownedThenExpression_3_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8469:3: lv_ownedThenExpression_3_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8702:1: (lv_ownedThenExpression_3_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8703:3: lv_ownedThenExpression_3_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getIfExpCSAccess().getOwnedThenExpressionExpCSParserRuleCall_3_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleIfExpCS18848);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleIfExpCS20254);
             lv_ownedThenExpression_3_0=ruleExpCS();
 
             state._fsp--;
@@ -24825,30 +26020,30 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8485:2: ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )*
-            loop196:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8719:2: ( (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS ) )*
+            loop234:
             do {
-                int alt196=2;
-                int LA196_0 = input.LA(1);
+                int alt234=2;
+                int LA234_0 = input.LA(1);
 
-                if ( (LA196_0==130) ) {
-                    alt196=1;
+                if ( (LA234_0==130) ) {
+                    alt234=1;
                 }
 
 
-                switch (alt196) {
+                switch (alt234) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8486:1: (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8720:1: (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8486:1: (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8487:3: lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8720:1: (lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8721:3: lv_ownedIfThenExpressions_4_0= ruleElseIfThenExpCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
             	      	        newCompositeNode(grammarAccess.getIfExpCSAccess().getOwnedIfThenExpressionsElseIfThenExpCSParserRuleCall_4_0()); 
             	      	    
             	    }
-            	    pushFollow(FollowSets000.FOLLOW_ruleElseIfThenExpCS_in_ruleIfExpCS18869);
+            	    pushFollow(FollowSets000.FOLLOW_ruleElseIfThenExpCS_in_ruleIfExpCS20275);
             	    lv_ownedIfThenExpressions_4_0=ruleElseIfThenExpCS();
 
             	    state._fsp--;
@@ -24874,28 +26069,28 @@
             	    break;
 
             	default :
-            	    break loop196;
+            	    break loop234;
                 }
             } while (true);
 
-            otherlv_5=(Token)match(input,128,FollowSets000.FOLLOW_128_in_ruleIfExpCS18882); if (state.failed) return current;
+            otherlv_5=(Token)match(input,128,FollowSets000.FOLLOW_128_in_ruleIfExpCS20288); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_5, grammarAccess.getIfExpCSAccess().getElseKeyword_5());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8507:1: ( (lv_ownedElseExpression_6_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8508:1: (lv_ownedElseExpression_6_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8741:1: ( (lv_ownedElseExpression_6_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8742:1: (lv_ownedElseExpression_6_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8508:1: (lv_ownedElseExpression_6_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8509:3: lv_ownedElseExpression_6_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8742:1: (lv_ownedElseExpression_6_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8743:3: lv_ownedElseExpression_6_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getIfExpCSAccess().getOwnedElseExpressionExpCSParserRuleCall_6_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleIfExpCS18903);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleIfExpCS20309);
             lv_ownedElseExpression_6_0=ruleExpCS();
 
             state._fsp--;
@@ -24919,7 +26114,7 @@
 
             }
 
-            otherlv_7=(Token)match(input,129,FollowSets000.FOLLOW_129_in_ruleIfExpCS18915); if (state.failed) return current;
+            otherlv_7=(Token)match(input,129,FollowSets000.FOLLOW_129_in_ruleIfExpCS20321); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_7, grammarAccess.getIfExpCSAccess().getEndifKeyword_7());
@@ -24948,7 +26143,7 @@
 
 
     // $ANTLR start "entryRuleElseIfThenExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8537:1: entryRuleElseIfThenExpCS returns [EObject current=null] : iv_ruleElseIfThenExpCS= ruleElseIfThenExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8771:1: entryRuleElseIfThenExpCS returns [EObject current=null] : iv_ruleElseIfThenExpCS= ruleElseIfThenExpCS EOF ;
     public final EObject entryRuleElseIfThenExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -24956,13 +26151,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8538:2: (iv_ruleElseIfThenExpCS= ruleElseIfThenExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8539:2: iv_ruleElseIfThenExpCS= ruleElseIfThenExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8772:2: (iv_ruleElseIfThenExpCS= ruleElseIfThenExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8773:2: iv_ruleElseIfThenExpCS= ruleElseIfThenExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getElseIfThenExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleElseIfThenExpCS_in_entryRuleElseIfThenExpCS18951);
+            pushFollow(FollowSets000.FOLLOW_ruleElseIfThenExpCS_in_entryRuleElseIfThenExpCS20357);
             iv_ruleElseIfThenExpCS=ruleElseIfThenExpCS();
 
             state._fsp--;
@@ -24970,7 +26165,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleElseIfThenExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleElseIfThenExpCS18961); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleElseIfThenExpCS20367); if (state.failed) return current;
 
             }
 
@@ -24988,7 +26183,7 @@
 
 
     // $ANTLR start "ruleElseIfThenExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8546:1: ruleElseIfThenExpCS returns [EObject current=null] : (otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8780:1: ruleElseIfThenExpCS returns [EObject current=null] : (otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ) ;
     public final EObject ruleElseIfThenExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -25002,30 +26197,30 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8549:28: ( (otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8550:1: (otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8783:28: ( (otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8784:1: (otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8550:1: (otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8550:3: otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8784:1: (otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8784:3: otherlv_0= 'elseif' ( (lv_ownedCondition_1_0= ruleExpCS ) ) otherlv_2= 'then' ( (lv_ownedThenExpression_3_0= ruleExpCS ) )
             {
-            otherlv_0=(Token)match(input,130,FollowSets000.FOLLOW_130_in_ruleElseIfThenExpCS18998); if (state.failed) return current;
+            otherlv_0=(Token)match(input,130,FollowSets000.FOLLOW_130_in_ruleElseIfThenExpCS20404); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getElseIfThenExpCSAccess().getElseifKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8554:1: ( (lv_ownedCondition_1_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8555:1: (lv_ownedCondition_1_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8788:1: ( (lv_ownedCondition_1_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8789:1: (lv_ownedCondition_1_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8555:1: (lv_ownedCondition_1_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8556:3: lv_ownedCondition_1_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8789:1: (lv_ownedCondition_1_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8790:3: lv_ownedCondition_1_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getElseIfThenExpCSAccess().getOwnedConditionExpCSParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleElseIfThenExpCS19019);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleElseIfThenExpCS20425);
             lv_ownedCondition_1_0=ruleExpCS();
 
             state._fsp--;
@@ -25049,24 +26244,24 @@
 
             }
 
-            otherlv_2=(Token)match(input,127,FollowSets000.FOLLOW_127_in_ruleElseIfThenExpCS19031); if (state.failed) return current;
+            otherlv_2=(Token)match(input,127,FollowSets000.FOLLOW_127_in_ruleElseIfThenExpCS20437); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_2, grammarAccess.getElseIfThenExpCSAccess().getThenKeyword_2());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8576:1: ( (lv_ownedThenExpression_3_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8577:1: (lv_ownedThenExpression_3_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8810:1: ( (lv_ownedThenExpression_3_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8811:1: (lv_ownedThenExpression_3_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8577:1: (lv_ownedThenExpression_3_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8578:3: lv_ownedThenExpression_3_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8811:1: (lv_ownedThenExpression_3_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8812:3: lv_ownedThenExpression_3_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getElseIfThenExpCSAccess().getOwnedThenExpressionExpCSParserRuleCall_3_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleElseIfThenExpCS19052);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleElseIfThenExpCS20458);
             lv_ownedThenExpression_3_0=ruleExpCS();
 
             state._fsp--;
@@ -25113,7 +26308,7 @@
 
 
     // $ANTLR start "entryRuleLetExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8602:1: entryRuleLetExpCS returns [EObject current=null] : iv_ruleLetExpCS= ruleLetExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8836:1: entryRuleLetExpCS returns [EObject current=null] : iv_ruleLetExpCS= ruleLetExpCS EOF ;
     public final EObject entryRuleLetExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -25121,13 +26316,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8603:2: (iv_ruleLetExpCS= ruleLetExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8604:2: iv_ruleLetExpCS= ruleLetExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8837:2: (iv_ruleLetExpCS= ruleLetExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8838:2: iv_ruleLetExpCS= ruleLetExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getLetExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleLetExpCS_in_entryRuleLetExpCS19088);
+            pushFollow(FollowSets000.FOLLOW_ruleLetExpCS_in_entryRuleLetExpCS20494);
             iv_ruleLetExpCS=ruleLetExpCS();
 
             state._fsp--;
@@ -25135,7 +26330,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleLetExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLetExpCS19098); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLetExpCS20504); if (state.failed) return current;
 
             }
 
@@ -25153,7 +26348,7 @@
 
 
     // $ANTLR start "ruleLetExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8611:1: ruleLetExpCS returns [EObject current=null] : (otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8845:1: ruleLetExpCS returns [EObject current=null] : (otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) ) ) ;
     public final EObject ruleLetExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -25170,30 +26365,30 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8614:28: ( (otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8615:1: (otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8848:28: ( (otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8849:1: (otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8615:1: (otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8615:3: otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8849:1: (otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8849:3: otherlv_0= 'let' ( (lv_ownedVariables_1_0= ruleLetVariableCS ) ) (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )* otherlv_4= 'in' ( (lv_ownedInExpression_5_0= ruleExpCS ) )
             {
-            otherlv_0=(Token)match(input,131,FollowSets000.FOLLOW_131_in_ruleLetExpCS19135); if (state.failed) return current;
+            otherlv_0=(Token)match(input,131,FollowSets000.FOLLOW_131_in_ruleLetExpCS20541); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getLetExpCSAccess().getLetKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8619:1: ( (lv_ownedVariables_1_0= ruleLetVariableCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8620:1: (lv_ownedVariables_1_0= ruleLetVariableCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8853:1: ( (lv_ownedVariables_1_0= ruleLetVariableCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8854:1: (lv_ownedVariables_1_0= ruleLetVariableCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8620:1: (lv_ownedVariables_1_0= ruleLetVariableCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8621:3: lv_ownedVariables_1_0= ruleLetVariableCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8854:1: (lv_ownedVariables_1_0= ruleLetVariableCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8855:3: lv_ownedVariables_1_0= ruleLetVariableCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getLetExpCSAccess().getOwnedVariablesLetVariableCSParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleLetVariableCS_in_ruleLetExpCS19156);
+            pushFollow(FollowSets000.FOLLOW_ruleLetVariableCS_in_ruleLetExpCS20562);
             lv_ownedVariables_1_0=ruleLetVariableCS();
 
             state._fsp--;
@@ -25217,39 +26412,39 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8637:2: (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )*
-            loop197:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8871:2: (otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) ) )*
+            loop235:
             do {
-                int alt197=2;
-                int LA197_0 = input.LA(1);
+                int alt235=2;
+                int LA235_0 = input.LA(1);
 
-                if ( (LA197_0==60) ) {
-                    alt197=1;
+                if ( (LA235_0==60) ) {
+                    alt235=1;
                 }
 
 
-                switch (alt197) {
+                switch (alt235) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8637:4: otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8871:4: otherlv_2= ',' ( (lv_ownedVariables_3_0= ruleLetVariableCS ) )
             	    {
-            	    otherlv_2=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleLetExpCS19169); if (state.failed) return current;
+            	    otherlv_2=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleLetExpCS20575); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
             	          	newLeafNode(otherlv_2, grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0());
             	          
             	    }
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8641:1: ( (lv_ownedVariables_3_0= ruleLetVariableCS ) )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8642:1: (lv_ownedVariables_3_0= ruleLetVariableCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8875:1: ( (lv_ownedVariables_3_0= ruleLetVariableCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8876:1: (lv_ownedVariables_3_0= ruleLetVariableCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8642:1: (lv_ownedVariables_3_0= ruleLetVariableCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8643:3: lv_ownedVariables_3_0= ruleLetVariableCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8876:1: (lv_ownedVariables_3_0= ruleLetVariableCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8877:3: lv_ownedVariables_3_0= ruleLetVariableCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
             	      	        newCompositeNode(grammarAccess.getLetExpCSAccess().getOwnedVariablesLetVariableCSParserRuleCall_2_1_0()); 
             	      	    
             	    }
-            	    pushFollow(FollowSets000.FOLLOW_ruleLetVariableCS_in_ruleLetExpCS19190);
+            	    pushFollow(FollowSets000.FOLLOW_ruleLetVariableCS_in_ruleLetExpCS20596);
             	    lv_ownedVariables_3_0=ruleLetVariableCS();
 
             	    state._fsp--;
@@ -25278,28 +26473,28 @@
             	    break;
 
             	default :
-            	    break loop197;
+            	    break loop235;
                 }
             } while (true);
 
-            otherlv_4=(Token)match(input,124,FollowSets000.FOLLOW_124_in_ruleLetExpCS19204); if (state.failed) return current;
+            otherlv_4=(Token)match(input,124,FollowSets000.FOLLOW_124_in_ruleLetExpCS20610); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_4, grammarAccess.getLetExpCSAccess().getInKeyword_3());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8663:1: ( (lv_ownedInExpression_5_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8664:1: (lv_ownedInExpression_5_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8897:1: ( (lv_ownedInExpression_5_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8898:1: (lv_ownedInExpression_5_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8664:1: (lv_ownedInExpression_5_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8665:3: lv_ownedInExpression_5_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8898:1: (lv_ownedInExpression_5_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8899:3: lv_ownedInExpression_5_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getLetExpCSAccess().getOwnedInExpressionExpCSParserRuleCall_4_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleLetExpCS19225);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleLetExpCS20631);
             lv_ownedInExpression_5_0=ruleExpCS();
 
             state._fsp--;
@@ -25346,7 +26541,7 @@
 
 
     // $ANTLR start "entryRuleLetVariableCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8689:1: entryRuleLetVariableCS returns [EObject current=null] : iv_ruleLetVariableCS= ruleLetVariableCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8923:1: entryRuleLetVariableCS returns [EObject current=null] : iv_ruleLetVariableCS= ruleLetVariableCS EOF ;
     public final EObject entryRuleLetVariableCS() throws RecognitionException {
         EObject current = null;
 
@@ -25354,13 +26549,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8690:2: (iv_ruleLetVariableCS= ruleLetVariableCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8691:2: iv_ruleLetVariableCS= ruleLetVariableCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8924:2: (iv_ruleLetVariableCS= ruleLetVariableCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8925:2: iv_ruleLetVariableCS= ruleLetVariableCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getLetVariableCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleLetVariableCS_in_entryRuleLetVariableCS19261);
+            pushFollow(FollowSets000.FOLLOW_ruleLetVariableCS_in_entryRuleLetVariableCS20667);
             iv_ruleLetVariableCS=ruleLetVariableCS();
 
             state._fsp--;
@@ -25368,7 +26563,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleLetVariableCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLetVariableCS19271); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLetVariableCS20677); if (state.failed) return current;
 
             }
 
@@ -25386,7 +26581,7 @@
 
 
     // $ANTLR start "ruleLetVariableCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8698:1: ruleLetVariableCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8932:1: ruleLetVariableCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) ) ;
     public final EObject ruleLetVariableCS() throws RecognitionException {
         EObject current = null;
 
@@ -25404,24 +26599,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8701:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8702:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8935:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8936:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8702:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8702:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8936:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8936:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )? (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )? otherlv_4= '=' ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8702:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8703:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8936:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8937:1: (lv_name_0_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8703:1: (lv_name_0_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8704:3: lv_name_0_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8937:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8938:3: lv_name_0_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getLetVariableCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleLetVariableCS19317);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleLetVariableCS20723);
             lv_name_0_0=ruleUnrestrictedName();
 
             state._fsp--;
@@ -25445,26 +26640,26 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8720:2: ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )?
-            int alt198=2;
-            int LA198_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8954:2: ( (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS ) )?
+            int alt236=2;
+            int LA236_0 = input.LA(1);
 
-            if ( (LA198_0==55) ) {
-                alt198=1;
+            if ( (LA236_0==55) ) {
+                alt236=1;
             }
-            switch (alt198) {
+            switch (alt236) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8721:1: (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8955:1: (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8721:1: (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8722:3: lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8955:1: (lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8956:3: lv_ownedRoundBracketedClause_1_0= ruleRoundBracketedClauseCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getLetVariableCSAccess().getOwnedRoundBracketedClauseRoundBracketedClauseCSParserRuleCall_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleRoundBracketedClauseCS_in_ruleLetVariableCS19338);
+                    pushFollow(FollowSets000.FOLLOW_ruleRoundBracketedClauseCS_in_ruleLetVariableCS20744);
                     lv_ownedRoundBracketedClause_1_0=ruleRoundBracketedClauseCS();
 
                     state._fsp--;
@@ -25491,35 +26686,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8738:3: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )?
-            int alt199=2;
-            int LA199_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8972:3: (otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) ) )?
+            int alt237=2;
+            int LA237_0 = input.LA(1);
 
-            if ( (LA199_0==57) ) {
-                alt199=1;
+            if ( (LA237_0==57) ) {
+                alt237=1;
             }
-            switch (alt199) {
+            switch (alt237) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8738:5: otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8972:5: otherlv_2= ':' ( (lv_ownedType_3_0= ruleTypeExpCS ) )
                     {
-                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleLetVariableCS19352); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleLetVariableCS20758); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_2, grammarAccess.getLetVariableCSAccess().getColonKeyword_2_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8742:1: ( (lv_ownedType_3_0= ruleTypeExpCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8743:1: (lv_ownedType_3_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8976:1: ( (lv_ownedType_3_0= ruleTypeExpCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8977:1: (lv_ownedType_3_0= ruleTypeExpCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8743:1: (lv_ownedType_3_0= ruleTypeExpCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8744:3: lv_ownedType_3_0= ruleTypeExpCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8977:1: (lv_ownedType_3_0= ruleTypeExpCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8978:3: lv_ownedType_3_0= ruleTypeExpCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getLetVariableCSAccess().getOwnedTypeTypeExpCSParserRuleCall_2_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleLetVariableCS19373);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypeExpCS_in_ruleLetVariableCS20779);
                     lv_ownedType_3_0=ruleTypeExpCS();
 
                     state._fsp--;
@@ -25549,24 +26744,24 @@
 
             }
 
-            otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleLetVariableCS19387); if (state.failed) return current;
+            otherlv_4=(Token)match(input,63,FollowSets000.FOLLOW_63_in_ruleLetVariableCS20793); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_4, grammarAccess.getLetVariableCSAccess().getEqualsSignKeyword_3());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8764:1: ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8765:1: (lv_ownedInitExpression_5_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8998:1: ( (lv_ownedInitExpression_5_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8999:1: (lv_ownedInitExpression_5_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8765:1: (lv_ownedInitExpression_5_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8766:3: lv_ownedInitExpression_5_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8999:1: (lv_ownedInitExpression_5_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9000:3: lv_ownedInitExpression_5_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getLetVariableCSAccess().getOwnedInitExpressionExpCSParserRuleCall_4_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleLetVariableCS19408);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleLetVariableCS20814);
             lv_ownedInitExpression_5_0=ruleExpCS();
 
             state._fsp--;
@@ -25613,7 +26808,7 @@
 
 
     // $ANTLR start "entryRuleNestedExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8790:1: entryRuleNestedExpCS returns [EObject current=null] : iv_ruleNestedExpCS= ruleNestedExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9024:1: entryRuleNestedExpCS returns [EObject current=null] : iv_ruleNestedExpCS= ruleNestedExpCS EOF ;
     public final EObject entryRuleNestedExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -25621,13 +26816,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8791:2: (iv_ruleNestedExpCS= ruleNestedExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8792:2: iv_ruleNestedExpCS= ruleNestedExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9025:2: (iv_ruleNestedExpCS= ruleNestedExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9026:2: iv_ruleNestedExpCS= ruleNestedExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNestedExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNestedExpCS_in_entryRuleNestedExpCS19444);
+            pushFollow(FollowSets000.FOLLOW_ruleNestedExpCS_in_entryRuleNestedExpCS20850);
             iv_ruleNestedExpCS=ruleNestedExpCS();
 
             state._fsp--;
@@ -25635,7 +26830,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNestedExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNestedExpCS19454); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNestedExpCS20860); if (state.failed) return current;
 
             }
 
@@ -25653,7 +26848,7 @@
 
 
     // $ANTLR start "ruleNestedExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8799:1: ruleNestedExpCS returns [EObject current=null] : (otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9033:1: ruleNestedExpCS returns [EObject current=null] : (otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')' ) ;
     public final EObject ruleNestedExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -25665,30 +26860,30 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8802:28: ( (otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8803:1: (otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9036:28: ( (otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9037:1: (otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8803:1: (otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8803:3: otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9037:1: (otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9037:3: otherlv_0= '(' ( (lv_ownedExpression_1_0= ruleExpCS ) ) otherlv_2= ')'
             {
-            otherlv_0=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleNestedExpCS19491); if (state.failed) return current;
+            otherlv_0=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleNestedExpCS20897); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getNestedExpCSAccess().getLeftParenthesisKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8807:1: ( (lv_ownedExpression_1_0= ruleExpCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8808:1: (lv_ownedExpression_1_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9041:1: ( (lv_ownedExpression_1_0= ruleExpCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9042:1: (lv_ownedExpression_1_0= ruleExpCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8808:1: (lv_ownedExpression_1_0= ruleExpCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8809:3: lv_ownedExpression_1_0= ruleExpCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9042:1: (lv_ownedExpression_1_0= ruleExpCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9043:3: lv_ownedExpression_1_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getNestedExpCSAccess().getOwnedExpressionExpCSParserRuleCall_1_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNestedExpCS19512);
+            pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_ruleNestedExpCS20918);
             lv_ownedExpression_1_0=ruleExpCS();
 
             state._fsp--;
@@ -25712,7 +26907,7 @@
 
             }
 
-            otherlv_2=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleNestedExpCS19524); if (state.failed) return current;
+            otherlv_2=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleNestedExpCS20930); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_2, grammarAccess.getNestedExpCSAccess().getRightParenthesisKeyword_2());
@@ -25741,7 +26936,7 @@
 
 
     // $ANTLR start "entryRuleSelfExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8837:1: entryRuleSelfExpCS returns [EObject current=null] : iv_ruleSelfExpCS= ruleSelfExpCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9071:1: entryRuleSelfExpCS returns [EObject current=null] : iv_ruleSelfExpCS= ruleSelfExpCS EOF ;
     public final EObject entryRuleSelfExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -25749,13 +26944,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8838:2: (iv_ruleSelfExpCS= ruleSelfExpCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8839:2: iv_ruleSelfExpCS= ruleSelfExpCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9072:2: (iv_ruleSelfExpCS= ruleSelfExpCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9073:2: iv_ruleSelfExpCS= ruleSelfExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSelfExpCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleSelfExpCS_in_entryRuleSelfExpCS19560);
+            pushFollow(FollowSets000.FOLLOW_ruleSelfExpCS_in_entryRuleSelfExpCS20966);
             iv_ruleSelfExpCS=ruleSelfExpCS();
 
             state._fsp--;
@@ -25763,7 +26958,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleSelfExpCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSelfExpCS19570); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSelfExpCS20976); if (state.failed) return current;
 
             }
 
@@ -25781,7 +26976,7 @@
 
 
     // $ANTLR start "ruleSelfExpCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8846:1: ruleSelfExpCS returns [EObject current=null] : ( () otherlv_1= 'self' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9080:1: ruleSelfExpCS returns [EObject current=null] : ( () otherlv_1= 'self' ) ;
     public final EObject ruleSelfExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -25790,14 +26985,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8849:28: ( ( () otherlv_1= 'self' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8850:1: ( () otherlv_1= 'self' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9083:28: ( ( () otherlv_1= 'self' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9084:1: ( () otherlv_1= 'self' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8850:1: ( () otherlv_1= 'self' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8850:2: () otherlv_1= 'self'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9084:1: ( () otherlv_1= 'self' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9084:2: () otherlv_1= 'self'
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8850:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8851:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9084:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9085:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -25814,7 +27009,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,132,FollowSets000.FOLLOW_132_in_ruleSelfExpCS19619); if (state.failed) return current;
+            otherlv_1=(Token)match(input,132,FollowSets000.FOLLOW_132_in_ruleSelfExpCS21025); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getSelfExpCSAccess().getSelfKeyword_1());
@@ -25843,7 +27038,7 @@
 
 
     // $ANTLR start "entryRuleMultiplicityBoundsCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8871:1: entryRuleMultiplicityBoundsCS returns [EObject current=null] : iv_ruleMultiplicityBoundsCS= ruleMultiplicityBoundsCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9105:1: entryRuleMultiplicityBoundsCS returns [EObject current=null] : iv_ruleMultiplicityBoundsCS= ruleMultiplicityBoundsCS EOF ;
     public final EObject entryRuleMultiplicityBoundsCS() throws RecognitionException {
         EObject current = null;
 
@@ -25851,13 +27046,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8872:2: (iv_ruleMultiplicityBoundsCS= ruleMultiplicityBoundsCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8873:2: iv_ruleMultiplicityBoundsCS= ruleMultiplicityBoundsCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9106:2: (iv_ruleMultiplicityBoundsCS= ruleMultiplicityBoundsCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9107:2: iv_ruleMultiplicityBoundsCS= ruleMultiplicityBoundsCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getMultiplicityBoundsCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleMultiplicityBoundsCS_in_entryRuleMultiplicityBoundsCS19655);
+            pushFollow(FollowSets000.FOLLOW_ruleMultiplicityBoundsCS_in_entryRuleMultiplicityBoundsCS21061);
             iv_ruleMultiplicityBoundsCS=ruleMultiplicityBoundsCS();
 
             state._fsp--;
@@ -25865,7 +27060,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleMultiplicityBoundsCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMultiplicityBoundsCS19665); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMultiplicityBoundsCS21071); if (state.failed) return current;
 
             }
 
@@ -25883,7 +27078,7 @@
 
 
     // $ANTLR start "ruleMultiplicityBoundsCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8880:1: ruleMultiplicityBoundsCS returns [EObject current=null] : ( ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9114:1: ruleMultiplicityBoundsCS returns [EObject current=null] : ( ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )? ) ;
     public final EObject ruleMultiplicityBoundsCS() throws RecognitionException {
         EObject current = null;
 
@@ -25896,24 +27091,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8883:28: ( ( ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8884:1: ( ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9117:28: ( ( ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9118:1: ( ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8884:1: ( ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8884:2: ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9118:1: ( ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9118:2: ( (lv_lowerBound_0_0= ruleLOWER ) ) (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8884:2: ( (lv_lowerBound_0_0= ruleLOWER ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8885:1: (lv_lowerBound_0_0= ruleLOWER )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9118:2: ( (lv_lowerBound_0_0= ruleLOWER ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9119:1: (lv_lowerBound_0_0= ruleLOWER )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8885:1: (lv_lowerBound_0_0= ruleLOWER )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8886:3: lv_lowerBound_0_0= ruleLOWER
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9119:1: (lv_lowerBound_0_0= ruleLOWER )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9120:3: lv_lowerBound_0_0= ruleLOWER
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getMultiplicityBoundsCSAccess().getLowerBoundLOWERParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleLOWER_in_ruleMultiplicityBoundsCS19711);
+            pushFollow(FollowSets000.FOLLOW_ruleLOWER_in_ruleMultiplicityBoundsCS21117);
             lv_lowerBound_0_0=ruleLOWER();
 
             state._fsp--;
@@ -25937,35 +27132,35 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8902:2: (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )?
-            int alt200=2;
-            int LA200_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9136:2: (otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) ) )?
+            int alt238=2;
+            int LA238_0 = input.LA(1);
 
-            if ( (LA200_0==113) ) {
-                alt200=1;
+            if ( (LA238_0==113) ) {
+                alt238=1;
             }
-            switch (alt200) {
+            switch (alt238) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8902:4: otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9136:4: otherlv_1= '..' ( (lv_upperBound_2_0= ruleUPPER ) )
                     {
-                    otherlv_1=(Token)match(input,113,FollowSets000.FOLLOW_113_in_ruleMultiplicityBoundsCS19724); if (state.failed) return current;
+                    otherlv_1=(Token)match(input,113,FollowSets000.FOLLOW_113_in_ruleMultiplicityBoundsCS21130); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_1, grammarAccess.getMultiplicityBoundsCSAccess().getFullStopFullStopKeyword_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8906:1: ( (lv_upperBound_2_0= ruleUPPER ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8907:1: (lv_upperBound_2_0= ruleUPPER )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9140:1: ( (lv_upperBound_2_0= ruleUPPER ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9141:1: (lv_upperBound_2_0= ruleUPPER )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8907:1: (lv_upperBound_2_0= ruleUPPER )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8908:3: lv_upperBound_2_0= ruleUPPER
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9141:1: (lv_upperBound_2_0= ruleUPPER )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9142:3: lv_upperBound_2_0= ruleUPPER
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getMultiplicityBoundsCSAccess().getUpperBoundUPPERParserRuleCall_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleUPPER_in_ruleMultiplicityBoundsCS19745);
+                    pushFollow(FollowSets000.FOLLOW_ruleUPPER_in_ruleMultiplicityBoundsCS21151);
                     lv_upperBound_2_0=ruleUPPER();
 
                     state._fsp--;
@@ -26018,7 +27213,7 @@
 
 
     // $ANTLR start "entryRuleMultiplicityCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8932:1: entryRuleMultiplicityCS returns [EObject current=null] : iv_ruleMultiplicityCS= ruleMultiplicityCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9166:1: entryRuleMultiplicityCS returns [EObject current=null] : iv_ruleMultiplicityCS= ruleMultiplicityCS EOF ;
     public final EObject entryRuleMultiplicityCS() throws RecognitionException {
         EObject current = null;
 
@@ -26026,13 +27221,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8933:2: (iv_ruleMultiplicityCS= ruleMultiplicityCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8934:2: iv_ruleMultiplicityCS= ruleMultiplicityCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9167:2: (iv_ruleMultiplicityCS= ruleMultiplicityCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9168:2: iv_ruleMultiplicityCS= ruleMultiplicityCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getMultiplicityCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleMultiplicityCS_in_entryRuleMultiplicityCS19783);
+            pushFollow(FollowSets000.FOLLOW_ruleMultiplicityCS_in_entryRuleMultiplicityCS21189);
             iv_ruleMultiplicityCS=ruleMultiplicityCS();
 
             state._fsp--;
@@ -26040,7 +27235,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleMultiplicityCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMultiplicityCS19793); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMultiplicityCS21199); if (state.failed) return current;
 
             }
 
@@ -26058,7 +27253,7 @@
 
 
     // $ANTLR start "ruleMultiplicityCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8941:1: ruleMultiplicityCS returns [EObject current=null] : (otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9175:1: ruleMultiplicityCS returns [EObject current=null] : (otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']' ) ;
     public final EObject ruleMultiplicityCS() throws RecognitionException {
         EObject current = null;
 
@@ -26072,38 +27267,38 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8944:28: ( (otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8945:1: (otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9178:28: ( (otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9179:1: (otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8945:1: (otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']' )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8945:3: otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']'
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9179:1: (otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9179:3: otherlv_0= '[' (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS ) otherlv_3= ']'
             {
-            otherlv_0=(Token)match(input,122,FollowSets000.FOLLOW_122_in_ruleMultiplicityCS19830); if (state.failed) return current;
+            otherlv_0=(Token)match(input,122,FollowSets000.FOLLOW_122_in_ruleMultiplicityCS21236); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_0, grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8949:1: (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS )
-            int alt201=2;
-            int LA201_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9183:1: (this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS | this_MultiplicityStringCS_2= ruleMultiplicityStringCS )
+            int alt239=2;
+            int LA239_0 = input.LA(1);
 
-            if ( (LA201_0==RULE_INT) ) {
-                alt201=1;
+            if ( (LA239_0==RULE_INT) ) {
+                alt239=1;
             }
-            else if ( (LA201_0==84||LA201_0==86||LA201_0==133) ) {
-                alt201=2;
+            else if ( (LA239_0==84||LA239_0==86||LA239_0==133) ) {
+                alt239=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 201, 0, input);
+                    new NoViableAltException("", 239, 0, input);
 
                 throw nvae;
             }
-            switch (alt201) {
+            switch (alt239) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8950:2: this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9184:2: this_MultiplicityBoundsCS_1= ruleMultiplicityBoundsCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -26115,7 +27310,7 @@
                               newCompositeNode(grammarAccess.getMultiplicityCSAccess().getMultiplicityBoundsCSParserRuleCall_1_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityBoundsCS_in_ruleMultiplicityCS19856);
+                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityBoundsCS_in_ruleMultiplicityCS21262);
                     this_MultiplicityBoundsCS_1=ruleMultiplicityBoundsCS();
 
                     state._fsp--;
@@ -26130,7 +27325,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8963:2: this_MultiplicityStringCS_2= ruleMultiplicityStringCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9197:2: this_MultiplicityStringCS_2= ruleMultiplicityStringCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -26142,7 +27337,7 @@
                               newCompositeNode(grammarAccess.getMultiplicityCSAccess().getMultiplicityStringCSParserRuleCall_1_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityStringCS_in_ruleMultiplicityCS19886);
+                    pushFollow(FollowSets000.FOLLOW_ruleMultiplicityStringCS_in_ruleMultiplicityCS21292);
                     this_MultiplicityStringCS_2=ruleMultiplicityStringCS();
 
                     state._fsp--;
@@ -26159,7 +27354,7 @@
 
             }
 
-            otherlv_3=(Token)match(input,123,FollowSets000.FOLLOW_123_in_ruleMultiplicityCS19898); if (state.failed) return current;
+            otherlv_3=(Token)match(input,123,FollowSets000.FOLLOW_123_in_ruleMultiplicityCS21304); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_3, grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2());
@@ -26188,7 +27383,7 @@
 
 
     // $ANTLR start "entryRuleMultiplicityStringCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8986:1: entryRuleMultiplicityStringCS returns [EObject current=null] : iv_ruleMultiplicityStringCS= ruleMultiplicityStringCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9220:1: entryRuleMultiplicityStringCS returns [EObject current=null] : iv_ruleMultiplicityStringCS= ruleMultiplicityStringCS EOF ;
     public final EObject entryRuleMultiplicityStringCS() throws RecognitionException {
         EObject current = null;
 
@@ -26196,13 +27391,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8987:2: (iv_ruleMultiplicityStringCS= ruleMultiplicityStringCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8988:2: iv_ruleMultiplicityStringCS= ruleMultiplicityStringCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9221:2: (iv_ruleMultiplicityStringCS= ruleMultiplicityStringCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9222:2: iv_ruleMultiplicityStringCS= ruleMultiplicityStringCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getMultiplicityStringCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleMultiplicityStringCS_in_entryRuleMultiplicityStringCS19934);
+            pushFollow(FollowSets000.FOLLOW_ruleMultiplicityStringCS_in_entryRuleMultiplicityStringCS21340);
             iv_ruleMultiplicityStringCS=ruleMultiplicityStringCS();
 
             state._fsp--;
@@ -26210,7 +27405,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleMultiplicityStringCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMultiplicityStringCS19944); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMultiplicityStringCS21350); if (state.failed) return current;
 
             }
 
@@ -26228,7 +27423,7 @@
 
 
     // $ANTLR start "ruleMultiplicityStringCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8995:1: ruleMultiplicityStringCS returns [EObject current=null] : ( ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9229:1: ruleMultiplicityStringCS returns [EObject current=null] : ( ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) ) ) ;
     public final EObject ruleMultiplicityStringCS() throws RecognitionException {
         EObject current = null;
 
@@ -26239,46 +27434,46 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8998:28: ( ( ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8999:1: ( ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9232:28: ( ( ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9233:1: ( ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:8999:1: ( ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9000:1: ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9233:1: ( ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9234:1: ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9000:1: ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9001:1: (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9234:1: ( (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9235:1: (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9001:1: (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' )
-            int alt202=3;
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9235:1: (lv_stringBounds_0_1= '*' | lv_stringBounds_0_2= '+' | lv_stringBounds_0_3= '?' )
+            int alt240=3;
             switch ( input.LA(1) ) {
             case 84:
                 {
-                alt202=1;
+                alt240=1;
                 }
                 break;
             case 86:
                 {
-                alt202=2;
+                alt240=2;
                 }
                 break;
             case 133:
                 {
-                alt202=3;
+                alt240=3;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 202, 0, input);
+                    new NoViableAltException("", 240, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt202) {
+            switch (alt240) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9002:3: lv_stringBounds_0_1= '*'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9236:3: lv_stringBounds_0_1= '*'
                     {
-                    lv_stringBounds_0_1=(Token)match(input,84,FollowSets000.FOLLOW_84_in_ruleMultiplicityStringCS19988); if (state.failed) return current;
+                    lv_stringBounds_0_1=(Token)match(input,84,FollowSets000.FOLLOW_84_in_ruleMultiplicityStringCS21394); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               newLeafNode(lv_stringBounds_0_1, grammarAccess.getMultiplicityStringCSAccess().getStringBoundsAsteriskKeyword_0_0());
@@ -26296,9 +27491,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9014:8: lv_stringBounds_0_2= '+'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9248:8: lv_stringBounds_0_2= '+'
                     {
-                    lv_stringBounds_0_2=(Token)match(input,86,FollowSets000.FOLLOW_86_in_ruleMultiplicityStringCS20017); if (state.failed) return current;
+                    lv_stringBounds_0_2=(Token)match(input,86,FollowSets000.FOLLOW_86_in_ruleMultiplicityStringCS21423); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               newLeafNode(lv_stringBounds_0_2, grammarAccess.getMultiplicityStringCSAccess().getStringBoundsPlusSignKeyword_0_1());
@@ -26316,9 +27511,9 @@
                     }
                     break;
                 case 3 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9026:8: lv_stringBounds_0_3= '?'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9260:8: lv_stringBounds_0_3= '?'
                     {
-                    lv_stringBounds_0_3=(Token)match(input,133,FollowSets000.FOLLOW_133_in_ruleMultiplicityStringCS20046); if (state.failed) return current;
+                    lv_stringBounds_0_3=(Token)match(input,133,FollowSets000.FOLLOW_133_in_ruleMultiplicityStringCS21452); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               newLeafNode(lv_stringBounds_0_3, grammarAccess.getMultiplicityStringCSAccess().getStringBoundsQuestionMarkKeyword_0_2());
@@ -26364,7 +27559,7 @@
 
 
     // $ANTLR start "entryRulePathNameCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9049:1: entryRulePathNameCS returns [EObject current=null] : iv_rulePathNameCS= rulePathNameCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9283:1: entryRulePathNameCS returns [EObject current=null] : iv_rulePathNameCS= rulePathNameCS EOF ;
     public final EObject entryRulePathNameCS() throws RecognitionException {
         EObject current = null;
 
@@ -26372,13 +27567,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9050:2: (iv_rulePathNameCS= rulePathNameCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9051:2: iv_rulePathNameCS= rulePathNameCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9284:2: (iv_rulePathNameCS= rulePathNameCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9285:2: iv_rulePathNameCS= rulePathNameCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPathNameCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_entryRulePathNameCS20097);
+            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_entryRulePathNameCS21503);
             iv_rulePathNameCS=rulePathNameCS();
 
             state._fsp--;
@@ -26386,7 +27581,7 @@
             if ( state.backtracking==0 ) {
                current =iv_rulePathNameCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePathNameCS20107); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePathNameCS21513); if (state.failed) return current;
 
             }
 
@@ -26404,7 +27599,7 @@
 
 
     // $ANTLR start "rulePathNameCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9058:1: rulePathNameCS returns [EObject current=null] : ( ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9292:1: rulePathNameCS returns [EObject current=null] : ( ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* ) ;
     public final EObject rulePathNameCS() throws RecognitionException {
         EObject current = null;
 
@@ -26417,24 +27612,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9061:28: ( ( ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9062:1: ( ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9295:28: ( ( ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9296:1: ( ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9062:1: ( ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9062:2: ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )*
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9296:1: ( ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )* )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9296:2: ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) ) (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )*
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9062:2: ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9063:1: (lv_ownedPathElements_0_0= ruleFirstPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9296:2: ( (lv_ownedPathElements_0_0= ruleFirstPathElementCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9297:1: (lv_ownedPathElements_0_0= ruleFirstPathElementCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9063:1: (lv_ownedPathElements_0_0= ruleFirstPathElementCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9064:3: lv_ownedPathElements_0_0= ruleFirstPathElementCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9297:1: (lv_ownedPathElements_0_0= ruleFirstPathElementCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9298:3: lv_ownedPathElements_0_0= ruleFirstPathElementCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getPathNameCSAccess().getOwnedPathElementsFirstPathElementCSParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleFirstPathElementCS_in_rulePathNameCS20153);
+            pushFollow(FollowSets000.FOLLOW_ruleFirstPathElementCS_in_rulePathNameCS21559);
             lv_ownedPathElements_0_0=ruleFirstPathElementCS();
 
             state._fsp--;
@@ -26458,39 +27653,39 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9080:2: (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )*
-            loop203:
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9314:2: (otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) ) )*
+            loop241:
             do {
-                int alt203=2;
-                int LA203_0 = input.LA(1);
+                int alt241=2;
+                int LA241_0 = input.LA(1);
 
-                if ( (LA203_0==99) ) {
-                    alt203=1;
+                if ( (LA241_0==99) ) {
+                    alt241=1;
                 }
 
 
-                switch (alt203) {
+                switch (alt241) {
             	case 1 :
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9080:4: otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9314:4: otherlv_1= '::' ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) )
             	    {
-            	    otherlv_1=(Token)match(input,99,FollowSets000.FOLLOW_99_in_rulePathNameCS20166); if (state.failed) return current;
+            	    otherlv_1=(Token)match(input,99,FollowSets000.FOLLOW_99_in_rulePathNameCS21572); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
             	          	newLeafNode(otherlv_1, grammarAccess.getPathNameCSAccess().getColonColonKeyword_1_0());
             	          
             	    }
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9084:1: ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9085:1: (lv_ownedPathElements_2_0= ruleNextPathElementCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9318:1: ( (lv_ownedPathElements_2_0= ruleNextPathElementCS ) )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9319:1: (lv_ownedPathElements_2_0= ruleNextPathElementCS )
             	    {
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9085:1: (lv_ownedPathElements_2_0= ruleNextPathElementCS )
-            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9086:3: lv_ownedPathElements_2_0= ruleNextPathElementCS
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9319:1: (lv_ownedPathElements_2_0= ruleNextPathElementCS )
+            	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9320:3: lv_ownedPathElements_2_0= ruleNextPathElementCS
             	    {
             	    if ( state.backtracking==0 ) {
             	       
             	      	        newCompositeNode(grammarAccess.getPathNameCSAccess().getOwnedPathElementsNextPathElementCSParserRuleCall_1_1_0()); 
             	      	    
             	    }
-            	    pushFollow(FollowSets000.FOLLOW_ruleNextPathElementCS_in_rulePathNameCS20187);
+            	    pushFollow(FollowSets000.FOLLOW_ruleNextPathElementCS_in_rulePathNameCS21593);
             	    lv_ownedPathElements_2_0=ruleNextPathElementCS();
 
             	    state._fsp--;
@@ -26519,7 +27714,7 @@
             	    break;
 
             	default :
-            	    break loop203;
+            	    break loop241;
                 }
             } while (true);
 
@@ -26546,7 +27741,7 @@
 
 
     // $ANTLR start "entryRuleFirstPathElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9110:1: entryRuleFirstPathElementCS returns [EObject current=null] : iv_ruleFirstPathElementCS= ruleFirstPathElementCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9344:1: entryRuleFirstPathElementCS returns [EObject current=null] : iv_ruleFirstPathElementCS= ruleFirstPathElementCS EOF ;
     public final EObject entryRuleFirstPathElementCS() throws RecognitionException {
         EObject current = null;
 
@@ -26554,13 +27749,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9111:2: (iv_ruleFirstPathElementCS= ruleFirstPathElementCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9112:2: iv_ruleFirstPathElementCS= ruleFirstPathElementCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9345:2: (iv_ruleFirstPathElementCS= ruleFirstPathElementCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9346:2: iv_ruleFirstPathElementCS= ruleFirstPathElementCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getFirstPathElementCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleFirstPathElementCS_in_entryRuleFirstPathElementCS20225);
+            pushFollow(FollowSets000.FOLLOW_ruleFirstPathElementCS_in_entryRuleFirstPathElementCS21631);
             iv_ruleFirstPathElementCS=ruleFirstPathElementCS();
 
             state._fsp--;
@@ -26568,7 +27763,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleFirstPathElementCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleFirstPathElementCS20235); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleFirstPathElementCS21641); if (state.failed) return current;
 
             }
 
@@ -26586,21 +27781,21 @@
 
 
     // $ANTLR start "ruleFirstPathElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9119:1: ruleFirstPathElementCS returns [EObject current=null] : ( ( ruleUnrestrictedName ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9353:1: ruleFirstPathElementCS returns [EObject current=null] : ( ( ruleUnrestrictedName ) ) ;
     public final EObject ruleFirstPathElementCS() throws RecognitionException {
         EObject current = null;
 
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9122:28: ( ( ( ruleUnrestrictedName ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9123:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9356:28: ( ( ( ruleUnrestrictedName ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9357:1: ( ( ruleUnrestrictedName ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9123:1: ( ( ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9124:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9357:1: ( ( ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9358:1: ( ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9124:1: ( ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9125:3: ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9358:1: ( ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9359:3: ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
@@ -26619,7 +27814,7 @@
               	        newCompositeNode(grammarAccess.getFirstPathElementCSAccess().getReferredElementNamedElementCrossReference_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleFirstPathElementCS20286);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleFirstPathElementCS21692);
             ruleUnrestrictedName();
 
             state._fsp--;
@@ -26655,7 +27850,7 @@
 
 
     // $ANTLR start "entryRuleNextPathElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9149:1: entryRuleNextPathElementCS returns [EObject current=null] : iv_ruleNextPathElementCS= ruleNextPathElementCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9383:1: entryRuleNextPathElementCS returns [EObject current=null] : iv_ruleNextPathElementCS= ruleNextPathElementCS EOF ;
     public final EObject entryRuleNextPathElementCS() throws RecognitionException {
         EObject current = null;
 
@@ -26663,13 +27858,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9150:2: (iv_ruleNextPathElementCS= ruleNextPathElementCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9151:2: iv_ruleNextPathElementCS= ruleNextPathElementCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9384:2: (iv_ruleNextPathElementCS= ruleNextPathElementCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9385:2: iv_ruleNextPathElementCS= ruleNextPathElementCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNextPathElementCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNextPathElementCS_in_entryRuleNextPathElementCS20321);
+            pushFollow(FollowSets000.FOLLOW_ruleNextPathElementCS_in_entryRuleNextPathElementCS21727);
             iv_ruleNextPathElementCS=ruleNextPathElementCS();
 
             state._fsp--;
@@ -26677,7 +27872,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNextPathElementCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNextPathElementCS20331); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNextPathElementCS21737); if (state.failed) return current;
 
             }
 
@@ -26695,21 +27890,21 @@
 
 
     // $ANTLR start "ruleNextPathElementCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9158:1: ruleNextPathElementCS returns [EObject current=null] : ( ( ruleUnreservedName ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9392:1: ruleNextPathElementCS returns [EObject current=null] : ( ( ruleUnreservedName ) ) ;
     public final EObject ruleNextPathElementCS() throws RecognitionException {
         EObject current = null;
 
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9161:28: ( ( ( ruleUnreservedName ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9162:1: ( ( ruleUnreservedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9395:28: ( ( ( ruleUnreservedName ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9396:1: ( ( ruleUnreservedName ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9162:1: ( ( ruleUnreservedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9163:1: ( ruleUnreservedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9396:1: ( ( ruleUnreservedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9397:1: ( ruleUnreservedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9163:1: ( ruleUnreservedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9164:3: ruleUnreservedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9397:1: ( ruleUnreservedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9398:3: ruleUnreservedName
             {
             if ( state.backtracking==0 ) {
                
@@ -26728,7 +27923,7 @@
               	        newCompositeNode(grammarAccess.getNextPathElementCSAccess().getReferredElementNamedElementCrossReference_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnreservedName_in_ruleNextPathElementCS20382);
+            pushFollow(FollowSets000.FOLLOW_ruleUnreservedName_in_ruleNextPathElementCS21788);
             ruleUnreservedName();
 
             state._fsp--;
@@ -26764,7 +27959,7 @@
 
 
     // $ANTLR start "entryRuleTemplateParameterSubstitutionCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9188:1: entryRuleTemplateParameterSubstitutionCS returns [EObject current=null] : iv_ruleTemplateParameterSubstitutionCS= ruleTemplateParameterSubstitutionCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9422:1: entryRuleTemplateParameterSubstitutionCS returns [EObject current=null] : iv_ruleTemplateParameterSubstitutionCS= ruleTemplateParameterSubstitutionCS EOF ;
     public final EObject entryRuleTemplateParameterSubstitutionCS() throws RecognitionException {
         EObject current = null;
 
@@ -26772,13 +27967,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9189:2: (iv_ruleTemplateParameterSubstitutionCS= ruleTemplateParameterSubstitutionCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9190:2: iv_ruleTemplateParameterSubstitutionCS= ruleTemplateParameterSubstitutionCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9423:2: (iv_ruleTemplateParameterSubstitutionCS= ruleTemplateParameterSubstitutionCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9424:2: iv_ruleTemplateParameterSubstitutionCS= ruleTemplateParameterSubstitutionCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTemplateParameterSubstitutionCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_entryRuleTemplateParameterSubstitutionCS20417);
+            pushFollow(FollowSets000.FOLLOW_ruleTemplateParameterSubstitutionCS_in_entryRuleTemplateParameterSubstitutionCS21823);
             iv_ruleTemplateParameterSubstitutionCS=ruleTemplateParameterSubstitutionCS();
 
             state._fsp--;
@@ -26786,7 +27981,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTemplateParameterSubstitutionCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTemplateParameterSubstitutionCS20427); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTemplateParameterSubstitutionCS21833); if (state.failed) return current;
 
             }
 
@@ -26804,7 +27999,7 @@
 
 
     // $ANTLR start "ruleTemplateParameterSubstitutionCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9197:1: ruleTemplateParameterSubstitutionCS returns [EObject current=null] : ( (lv_ownedActualParameter_0_0= ruleTypeRefCS ) ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9431:1: ruleTemplateParameterSubstitutionCS returns [EObject current=null] : ( (lv_ownedActualParameter_0_0= ruleTypeRefCS ) ) ;
     public final EObject ruleTemplateParameterSubstitutionCS() throws RecognitionException {
         EObject current = null;
 
@@ -26814,21 +28009,21 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9200:28: ( ( (lv_ownedActualParameter_0_0= ruleTypeRefCS ) ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9201:1: ( (lv_ownedActualParameter_0_0= ruleTypeRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9434:28: ( ( (lv_ownedActualParameter_0_0= ruleTypeRefCS ) ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9435:1: ( (lv_ownedActualParameter_0_0= ruleTypeRefCS ) )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9201:1: ( (lv_ownedActualParameter_0_0= ruleTypeRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9202:1: (lv_ownedActualParameter_0_0= ruleTypeRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9435:1: ( (lv_ownedActualParameter_0_0= ruleTypeRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9436:1: (lv_ownedActualParameter_0_0= ruleTypeRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9202:1: (lv_ownedActualParameter_0_0= ruleTypeRefCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9203:3: lv_ownedActualParameter_0_0= ruleTypeRefCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9436:1: (lv_ownedActualParameter_0_0= ruleTypeRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9437:3: lv_ownedActualParameter_0_0= ruleTypeRefCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTemplateParameterSubstitutionCSAccess().getOwnedActualParameterTypeRefCSParserRuleCall_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeRefCS_in_ruleTemplateParameterSubstitutionCS20472);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeRefCS_in_ruleTemplateParameterSubstitutionCS21878);
             lv_ownedActualParameter_0_0=ruleTypeRefCS();
 
             state._fsp--;
@@ -26872,7 +28067,7 @@
 
 
     // $ANTLR start "entryRuleTypeParameterCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9227:1: entryRuleTypeParameterCS returns [EObject current=null] : iv_ruleTypeParameterCS= ruleTypeParameterCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9461:1: entryRuleTypeParameterCS returns [EObject current=null] : iv_ruleTypeParameterCS= ruleTypeParameterCS EOF ;
     public final EObject entryRuleTypeParameterCS() throws RecognitionException {
         EObject current = null;
 
@@ -26880,13 +28075,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9228:2: (iv_ruleTypeParameterCS= ruleTypeParameterCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9229:2: iv_ruleTypeParameterCS= ruleTypeParameterCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9462:2: (iv_ruleTypeParameterCS= ruleTypeParameterCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9463:2: iv_ruleTypeParameterCS= ruleTypeParameterCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypeParameterCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_entryRuleTypeParameterCS20507);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeParameterCS_in_entryRuleTypeParameterCS21913);
             iv_ruleTypeParameterCS=ruleTypeParameterCS();
 
             state._fsp--;
@@ -26894,7 +28089,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypeParameterCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeParameterCS20517); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeParameterCS21923); if (state.failed) return current;
 
             }
 
@@ -26912,7 +28107,7 @@
 
 
     // $ANTLR start "ruleTypeParameterCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9236:1: ruleTypeParameterCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9470:1: ruleTypeParameterCS returns [EObject current=null] : ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )? ) ;
     public final EObject ruleTypeParameterCS() throws RecognitionException {
         EObject current = null;
 
@@ -26931,24 +28126,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9239:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9240:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9473:28: ( ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9474:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9240:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9240:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9474:1: ( ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9474:2: ( (lv_name_0_0= ruleUnrestrictedName ) ) ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9240:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9241:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9474:2: ( (lv_name_0_0= ruleUnrestrictedName ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9475:1: (lv_name_0_0= ruleUnrestrictedName )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9241:1: (lv_name_0_0= ruleUnrestrictedName )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9242:3: lv_name_0_0= ruleUnrestrictedName
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9475:1: (lv_name_0_0= ruleUnrestrictedName )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9476:3: lv_name_0_0= ruleUnrestrictedName
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTypeParameterCSAccess().getNameUnrestrictedNameParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleTypeParameterCS20563);
+            pushFollow(FollowSets000.FOLLOW_ruleUnrestrictedName_in_ruleTypeParameterCS21969);
             lv_name_0_0=ruleUnrestrictedName();
 
             state._fsp--;
@@ -26972,41 +28167,41 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9258:2: ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )?
-            int alt205=3;
-            int LA205_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9492:2: ( (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* ) | (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) ) )?
+            int alt243=3;
+            int LA243_0 = input.LA(1);
 
-            if ( (LA205_0==30) ) {
-                alt205=1;
+            if ( (LA243_0==30) ) {
+                alt243=1;
             }
-            else if ( (LA205_0==48) ) {
-                alt205=2;
+            else if ( (LA243_0==48) ) {
+                alt243=2;
             }
-            switch (alt205) {
+            switch (alt243) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9258:3: (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9492:3: (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9258:3: (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9258:5: otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )*
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9492:3: (otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )* )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9492:5: otherlv_1= 'extends' ( (lv_ownedExtends_2_0= ruleTypedRefCS ) ) (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )*
                     {
-                    otherlv_1=(Token)match(input,30,FollowSets000.FOLLOW_30_in_ruleTypeParameterCS20577); if (state.failed) return current;
+                    otherlv_1=(Token)match(input,30,FollowSets000.FOLLOW_30_in_ruleTypeParameterCS21983); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_1, grammarAccess.getTypeParameterCSAccess().getExtendsKeyword_1_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9262:1: ( (lv_ownedExtends_2_0= ruleTypedRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9263:1: (lv_ownedExtends_2_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9496:1: ( (lv_ownedExtends_2_0= ruleTypedRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9497:1: (lv_ownedExtends_2_0= ruleTypedRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9263:1: (lv_ownedExtends_2_0= ruleTypedRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9264:3: lv_ownedExtends_2_0= ruleTypedRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9497:1: (lv_ownedExtends_2_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9498:3: lv_ownedExtends_2_0= ruleTypedRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTypeParameterCSAccess().getOwnedExtendsTypedRefCSParserRuleCall_1_0_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS20598);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS22004);
                     lv_ownedExtends_2_0=ruleTypedRefCS();
 
                     state._fsp--;
@@ -27030,39 +28225,39 @@
 
                     }
 
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9280:2: (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )*
-                    loop204:
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9514:2: (otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) ) )*
+                    loop242:
                     do {
-                        int alt204=2;
-                        int LA204_0 = input.LA(1);
+                        int alt242=2;
+                        int LA242_0 = input.LA(1);
 
-                        if ( (LA204_0==134) ) {
-                            alt204=1;
+                        if ( (LA242_0==134) ) {
+                            alt242=1;
                         }
 
 
-                        switch (alt204) {
+                        switch (alt242) {
                     	case 1 :
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9280:4: otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9514:4: otherlv_3= '&&' ( (lv_ownedExtends_4_0= ruleTypedRefCS ) )
                     	    {
-                    	    otherlv_3=(Token)match(input,134,FollowSets000.FOLLOW_134_in_ruleTypeParameterCS20611); if (state.failed) return current;
+                    	    otherlv_3=(Token)match(input,134,FollowSets000.FOLLOW_134_in_ruleTypeParameterCS22017); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	          	newLeafNode(otherlv_3, grammarAccess.getTypeParameterCSAccess().getAmpersandAmpersandKeyword_1_0_2_0());
                     	          
                     	    }
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9284:1: ( (lv_ownedExtends_4_0= ruleTypedRefCS ) )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9285:1: (lv_ownedExtends_4_0= ruleTypedRefCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9518:1: ( (lv_ownedExtends_4_0= ruleTypedRefCS ) )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9519:1: (lv_ownedExtends_4_0= ruleTypedRefCS )
                     	    {
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9285:1: (lv_ownedExtends_4_0= ruleTypedRefCS )
-                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9286:3: lv_ownedExtends_4_0= ruleTypedRefCS
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9519:1: (lv_ownedExtends_4_0= ruleTypedRefCS )
+                    	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9520:3: lv_ownedExtends_4_0= ruleTypedRefCS
                     	    {
                     	    if ( state.backtracking==0 ) {
                     	       
                     	      	        newCompositeNode(grammarAccess.getTypeParameterCSAccess().getOwnedExtendsTypedRefCSParserRuleCall_1_0_2_1_0()); 
                     	      	    
                     	    }
-                    	    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS20632);
+                    	    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS22038);
                     	    lv_ownedExtends_4_0=ruleTypedRefCS();
 
                     	    state._fsp--;
@@ -27091,7 +28286,7 @@
                     	    break;
 
                     	default :
-                    	    break loop204;
+                    	    break loop242;
                         }
                     } while (true);
 
@@ -27102,29 +28297,29 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9303:6: (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9537:6: (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9303:6: (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9303:8: otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9537:6: (otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9537:8: otherlv_5= 'super' ( (lv_ownedSuper_6_0= ruleTypedRefCS ) )
                     {
-                    otherlv_5=(Token)match(input,48,FollowSets000.FOLLOW_48_in_ruleTypeParameterCS20654); if (state.failed) return current;
+                    otherlv_5=(Token)match(input,48,FollowSets000.FOLLOW_48_in_ruleTypeParameterCS22060); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_5, grammarAccess.getTypeParameterCSAccess().getSuperKeyword_1_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9307:1: ( (lv_ownedSuper_6_0= ruleTypedRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9308:1: (lv_ownedSuper_6_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9541:1: ( (lv_ownedSuper_6_0= ruleTypedRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9542:1: (lv_ownedSuper_6_0= ruleTypedRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9308:1: (lv_ownedSuper_6_0= ruleTypedRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9309:3: lv_ownedSuper_6_0= ruleTypedRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9542:1: (lv_ownedSuper_6_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9543:3: lv_ownedSuper_6_0= ruleTypedRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTypeParameterCSAccess().getOwnedSuperTypedRefCSParserRuleCall_1_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS20675);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS22081);
                     lv_ownedSuper_6_0=ruleTypedRefCS();
 
                     state._fsp--;
@@ -27180,7 +28375,7 @@
 
 
     // $ANTLR start "entryRuleTypeRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9333:1: entryRuleTypeRefCS returns [EObject current=null] : iv_ruleTypeRefCS= ruleTypeRefCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9567:1: entryRuleTypeRefCS returns [EObject current=null] : iv_ruleTypeRefCS= ruleTypeRefCS EOF ;
     public final EObject entryRuleTypeRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -27188,13 +28383,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9334:2: (iv_ruleTypeRefCS= ruleTypeRefCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9335:2: iv_ruleTypeRefCS= ruleTypeRefCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9568:2: (iv_ruleTypeRefCS= ruleTypeRefCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9569:2: iv_ruleTypeRefCS= ruleTypeRefCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypeRefCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypeRefCS_in_entryRuleTypeRefCS20714);
+            pushFollow(FollowSets000.FOLLOW_ruleTypeRefCS_in_entryRuleTypeRefCS22120);
             iv_ruleTypeRefCS=ruleTypeRefCS();
 
             state._fsp--;
@@ -27202,7 +28397,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypeRefCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeRefCS20724); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypeRefCS22130); if (state.failed) return current;
 
             }
 
@@ -27220,7 +28415,7 @@
 
 
     // $ANTLR start "ruleTypeRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9342:1: ruleTypeRefCS returns [EObject current=null] : (this_TypedRefCS_0= ruleTypedRefCS | this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9576:1: ruleTypeRefCS returns [EObject current=null] : (this_TypedRefCS_0= ruleTypedRefCS | this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS ) ;
     public final EObject ruleTypeRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -27232,29 +28427,29 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9345:28: ( (this_TypedRefCS_0= ruleTypedRefCS | this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9346:1: (this_TypedRefCS_0= ruleTypedRefCS | this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9579:28: ( (this_TypedRefCS_0= ruleTypedRefCS | this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9580:1: (this_TypedRefCS_0= ruleTypedRefCS | this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9346:1: (this_TypedRefCS_0= ruleTypedRefCS | this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS )
-            int alt206=2;
-            int LA206_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9580:1: (this_TypedRefCS_0= ruleTypedRefCS | this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS )
+            int alt244=2;
+            int LA244_0 = input.LA(1);
 
-            if ( ((LA206_0>=RULE_SIMPLE_ID && LA206_0<=RULE_ESCAPED_ID)||LA206_0==17||(LA206_0>=19 && LA206_0<=54)||LA206_0==59||LA206_0==72||(LA206_0>=74 && LA206_0<=75)||LA206_0==80||LA206_0==98||(LA206_0>=100 && LA206_0<=112)) ) {
-                alt206=1;
+            if ( ((LA244_0>=RULE_SIMPLE_ID && LA244_0<=RULE_ESCAPED_ID)||LA244_0==17||(LA244_0>=19 && LA244_0<=54)||LA244_0==59||LA244_0==72||(LA244_0>=74 && LA244_0<=75)||LA244_0==80||LA244_0==98||(LA244_0>=100 && LA244_0<=112)) ) {
+                alt244=1;
             }
-            else if ( (LA206_0==133) ) {
-                alt206=2;
+            else if ( (LA244_0==133) ) {
+                alt244=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 206, 0, input);
+                    new NoViableAltException("", 244, 0, input);
 
                 throw nvae;
             }
-            switch (alt206) {
+            switch (alt244) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9347:2: this_TypedRefCS_0= ruleTypedRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9581:2: this_TypedRefCS_0= ruleTypedRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -27266,7 +28461,7 @@
                               newCompositeNode(grammarAccess.getTypeRefCSAccess().getTypedRefCSParserRuleCall_0()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypeRefCS20774);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleTypeRefCS22180);
                     this_TypedRefCS_0=ruleTypedRefCS();
 
                     state._fsp--;
@@ -27281,7 +28476,7 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9360:2: this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9594:2: this_WildcardTypeRefCS_1= ruleWildcardTypeRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
@@ -27293,7 +28488,7 @@
                               newCompositeNode(grammarAccess.getTypeRefCSAccess().getWildcardTypeRefCSParserRuleCall_1()); 
                           
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleWildcardTypeRefCS_in_ruleTypeRefCS20804);
+                    pushFollow(FollowSets000.FOLLOW_ruleWildcardTypeRefCS_in_ruleTypeRefCS22210);
                     this_WildcardTypeRefCS_1=ruleWildcardTypeRefCS();
 
                     state._fsp--;
@@ -27330,7 +28525,7 @@
 
 
     // $ANTLR start "entryRuleTypedTypeRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9379:1: entryRuleTypedTypeRefCS returns [EObject current=null] : iv_ruleTypedTypeRefCS= ruleTypedTypeRefCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9613:1: entryRuleTypedTypeRefCS returns [EObject current=null] : iv_ruleTypedTypeRefCS= ruleTypedTypeRefCS EOF ;
     public final EObject entryRuleTypedTypeRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -27338,13 +28533,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9380:2: (iv_ruleTypedTypeRefCS= ruleTypedTypeRefCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9381:2: iv_ruleTypedTypeRefCS= ruleTypedTypeRefCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9614:2: (iv_ruleTypedTypeRefCS= ruleTypedTypeRefCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9615:2: iv_ruleTypedTypeRefCS= ruleTypedTypeRefCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTypedTypeRefCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleTypedTypeRefCS_in_entryRuleTypedTypeRefCS20839);
+            pushFollow(FollowSets000.FOLLOW_ruleTypedTypeRefCS_in_entryRuleTypedTypeRefCS22245);
             iv_ruleTypedTypeRefCS=ruleTypedTypeRefCS();
 
             state._fsp--;
@@ -27352,7 +28547,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleTypedTypeRefCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypedTypeRefCS20849); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTypedTypeRefCS22255); if (state.failed) return current;
 
             }
 
@@ -27370,7 +28565,7 @@
 
 
     // $ANTLR start "ruleTypedTypeRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9388:1: ruleTypedTypeRefCS returns [EObject current=null] : ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9622:1: ruleTypedTypeRefCS returns [EObject current=null] : ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )? ) ;
     public final EObject ruleTypedTypeRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -27382,24 +28577,24 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9391:28: ( ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9392:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9625:28: ( ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9626:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9392:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9392:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9626:1: ( ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9626:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) ) ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9392:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9393:1: (lv_ownedPathName_0_0= rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9626:2: ( (lv_ownedPathName_0_0= rulePathNameCS ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9627:1: (lv_ownedPathName_0_0= rulePathNameCS )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9393:1: (lv_ownedPathName_0_0= rulePathNameCS )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9394:3: lv_ownedPathName_0_0= rulePathNameCS
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9627:1: (lv_ownedPathName_0_0= rulePathNameCS )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9628:3: lv_ownedPathName_0_0= rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                
               	        newCompositeNode(grammarAccess.getTypedTypeRefCSAccess().getOwnedPathNamePathNameCSParserRuleCall_0_0()); 
               	    
             }
-            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_ruleTypedTypeRefCS20895);
+            pushFollow(FollowSets000.FOLLOW_rulePathNameCS_in_ruleTypedTypeRefCS22301);
             lv_ownedPathName_0_0=rulePathNameCS();
 
             state._fsp--;
@@ -27423,26 +28618,26 @@
 
             }
 
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9410:2: ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )?
-            int alt207=2;
-            int LA207_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9644:2: ( (lv_ownedBinding_1_0= ruleTemplateBindingCS ) )?
+            int alt245=2;
+            int LA245_0 = input.LA(1);
 
-            if ( (LA207_0==55||LA207_0==81) ) {
-                alt207=1;
+            if ( (LA245_0==55||LA245_0==81) ) {
+                alt245=1;
             }
-            switch (alt207) {
+            switch (alt245) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9411:1: (lv_ownedBinding_1_0= ruleTemplateBindingCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9645:1: (lv_ownedBinding_1_0= ruleTemplateBindingCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9411:1: (lv_ownedBinding_1_0= ruleTemplateBindingCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9412:3: lv_ownedBinding_1_0= ruleTemplateBindingCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9645:1: (lv_ownedBinding_1_0= ruleTemplateBindingCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9646:3: lv_ownedBinding_1_0= ruleTemplateBindingCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getTypedTypeRefCSAccess().getOwnedBindingTemplateBindingCSParserRuleCall_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTemplateBindingCS_in_ruleTypedTypeRefCS20916);
+                    pushFollow(FollowSets000.FOLLOW_ruleTemplateBindingCS_in_ruleTypedTypeRefCS22322);
                     lv_ownedBinding_1_0=ruleTemplateBindingCS();
 
                     state._fsp--;
@@ -27492,7 +28687,7 @@
 
 
     // $ANTLR start "entryRuleWildcardTypeRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9436:1: entryRuleWildcardTypeRefCS returns [EObject current=null] : iv_ruleWildcardTypeRefCS= ruleWildcardTypeRefCS EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9670:1: entryRuleWildcardTypeRefCS returns [EObject current=null] : iv_ruleWildcardTypeRefCS= ruleWildcardTypeRefCS EOF ;
     public final EObject entryRuleWildcardTypeRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -27500,13 +28695,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9437:2: (iv_ruleWildcardTypeRefCS= ruleWildcardTypeRefCS EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9438:2: iv_ruleWildcardTypeRefCS= ruleWildcardTypeRefCS EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9671:2: (iv_ruleWildcardTypeRefCS= ruleWildcardTypeRefCS EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9672:2: iv_ruleWildcardTypeRefCS= ruleWildcardTypeRefCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getWildcardTypeRefCSRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleWildcardTypeRefCS_in_entryRuleWildcardTypeRefCS20953);
+            pushFollow(FollowSets000.FOLLOW_ruleWildcardTypeRefCS_in_entryRuleWildcardTypeRefCS22359);
             iv_ruleWildcardTypeRefCS=ruleWildcardTypeRefCS();
 
             state._fsp--;
@@ -27514,7 +28709,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleWildcardTypeRefCS; 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleWildcardTypeRefCS20963); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleWildcardTypeRefCS22369); if (state.failed) return current;
 
             }
 
@@ -27532,7 +28727,7 @@
 
 
     // $ANTLR start "ruleWildcardTypeRefCS"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9445:1: ruleWildcardTypeRefCS returns [EObject current=null] : ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )? ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9679:1: ruleWildcardTypeRefCS returns [EObject current=null] : ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )? ) ;
     public final EObject ruleWildcardTypeRefCS() throws RecognitionException {
         EObject current = null;
 
@@ -27547,14 +28742,14 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9448:28: ( ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )? ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9449:1: ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9682:28: ( ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )? ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9683:1: ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )? )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9449:1: ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )? )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9449:2: () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )?
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9683:1: ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )? )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9683:2: () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )?
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9449:2: ()
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9450:2: 
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9683:2: ()
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9684:2: 
             {
             if ( state.backtracking==0 ) {
                
@@ -27571,47 +28766,47 @@
 
             }
 
-            otherlv_1=(Token)match(input,133,FollowSets000.FOLLOW_133_in_ruleWildcardTypeRefCS21012); if (state.failed) return current;
+            otherlv_1=(Token)match(input,133,FollowSets000.FOLLOW_133_in_ruleWildcardTypeRefCS22418); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
                   	newLeafNode(otherlv_1, grammarAccess.getWildcardTypeRefCSAccess().getQuestionMarkKeyword_1());
                   
             }
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9462:1: ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )?
-            int alt208=3;
-            int LA208_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9696:1: ( (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) ) | (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) ) )?
+            int alt246=3;
+            int LA246_0 = input.LA(1);
 
-            if ( (LA208_0==30) ) {
-                alt208=1;
+            if ( (LA246_0==30) ) {
+                alt246=1;
             }
-            else if ( (LA208_0==48) ) {
-                alt208=2;
+            else if ( (LA246_0==48) ) {
+                alt246=2;
             }
-            switch (alt208) {
+            switch (alt246) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9462:2: (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9696:2: (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9462:2: (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9462:4: otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9696:2: (otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9696:4: otherlv_2= 'extends' ( (lv_ownedExtends_3_0= ruleTypedRefCS ) )
                     {
-                    otherlv_2=(Token)match(input,30,FollowSets000.FOLLOW_30_in_ruleWildcardTypeRefCS21026); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,30,FollowSets000.FOLLOW_30_in_ruleWildcardTypeRefCS22432); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_2, grammarAccess.getWildcardTypeRefCSAccess().getExtendsKeyword_2_0_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9466:1: ( (lv_ownedExtends_3_0= ruleTypedRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9467:1: (lv_ownedExtends_3_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9700:1: ( (lv_ownedExtends_3_0= ruleTypedRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9701:1: (lv_ownedExtends_3_0= ruleTypedRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9467:1: (lv_ownedExtends_3_0= ruleTypedRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9468:3: lv_ownedExtends_3_0= ruleTypedRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9701:1: (lv_ownedExtends_3_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9702:3: lv_ownedExtends_3_0= ruleTypedRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getWildcardTypeRefCSAccess().getOwnedExtendsTypedRefCSParserRuleCall_2_0_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleWildcardTypeRefCS21047);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleWildcardTypeRefCS22453);
                     lv_ownedExtends_3_0=ruleTypedRefCS();
 
                     state._fsp--;
@@ -27642,29 +28837,29 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9485:6: (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9719:6: (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9485:6: (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9485:8: otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9719:6: (otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9719:8: otherlv_4= 'super' ( (lv_ownedSuper_5_0= ruleTypedRefCS ) )
                     {
-                    otherlv_4=(Token)match(input,48,FollowSets000.FOLLOW_48_in_ruleWildcardTypeRefCS21067); if (state.failed) return current;
+                    otherlv_4=(Token)match(input,48,FollowSets000.FOLLOW_48_in_ruleWildcardTypeRefCS22473); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                           	newLeafNode(otherlv_4, grammarAccess.getWildcardTypeRefCSAccess().getSuperKeyword_2_1_0());
                           
                     }
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9489:1: ( (lv_ownedSuper_5_0= ruleTypedRefCS ) )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9490:1: (lv_ownedSuper_5_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9723:1: ( (lv_ownedSuper_5_0= ruleTypedRefCS ) )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9724:1: (lv_ownedSuper_5_0= ruleTypedRefCS )
                     {
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9490:1: (lv_ownedSuper_5_0= ruleTypedRefCS )
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9491:3: lv_ownedSuper_5_0= ruleTypedRefCS
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9724:1: (lv_ownedSuper_5_0= ruleTypedRefCS )
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9725:3: lv_ownedSuper_5_0= ruleTypedRefCS
                     {
                     if ( state.backtracking==0 ) {
                        
                       	        newCompositeNode(grammarAccess.getWildcardTypeRefCSAccess().getOwnedSuperTypedRefCSParserRuleCall_2_1_1_0()); 
                       	    
                     }
-                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleWildcardTypeRefCS21088);
+                    pushFollow(FollowSets000.FOLLOW_ruleTypedRefCS_in_ruleWildcardTypeRefCS22494);
                     lv_ownedSuper_5_0=ruleTypedRefCS();
 
                     state._fsp--;
@@ -27720,7 +28915,7 @@
 
 
     // $ANTLR start "entryRuleID"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9515:1: entryRuleID returns [String current=null] : iv_ruleID= ruleID EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9749:1: entryRuleID returns [String current=null] : iv_ruleID= ruleID EOF ;
     public final String entryRuleID() throws RecognitionException {
         String current = null;
 
@@ -27728,13 +28923,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9516:2: (iv_ruleID= ruleID EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9517:2: iv_ruleID= ruleID EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9750:2: (iv_ruleID= ruleID EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9751:2: iv_ruleID= ruleID EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getIDRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleID_in_entryRuleID21128);
+            pushFollow(FollowSets000.FOLLOW_ruleID_in_entryRuleID22534);
             iv_ruleID=ruleID();
 
             state._fsp--;
@@ -27742,7 +28937,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleID.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleID21139); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleID22545); if (state.failed) return current;
 
             }
 
@@ -27760,7 +28955,7 @@
 
 
     // $ANTLR start "ruleID"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9524:1: ruleID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_SIMPLE_ID_0= RULE_SIMPLE_ID | this_ESCAPED_ID_1= RULE_ESCAPED_ID ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9758:1: ruleID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_SIMPLE_ID_0= RULE_SIMPLE_ID | this_ESCAPED_ID_1= RULE_ESCAPED_ID ) ;
     public final AntlrDatatypeRuleToken ruleID() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -27770,31 +28965,31 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9527:28: ( (this_SIMPLE_ID_0= RULE_SIMPLE_ID | this_ESCAPED_ID_1= RULE_ESCAPED_ID ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9528:1: (this_SIMPLE_ID_0= RULE_SIMPLE_ID | this_ESCAPED_ID_1= RULE_ESCAPED_ID )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9761:28: ( (this_SIMPLE_ID_0= RULE_SIMPLE_ID | this_ESCAPED_ID_1= RULE_ESCAPED_ID ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9762:1: (this_SIMPLE_ID_0= RULE_SIMPLE_ID | this_ESCAPED_ID_1= RULE_ESCAPED_ID )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9528:1: (this_SIMPLE_ID_0= RULE_SIMPLE_ID | this_ESCAPED_ID_1= RULE_ESCAPED_ID )
-            int alt209=2;
-            int LA209_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9762:1: (this_SIMPLE_ID_0= RULE_SIMPLE_ID | this_ESCAPED_ID_1= RULE_ESCAPED_ID )
+            int alt247=2;
+            int LA247_0 = input.LA(1);
 
-            if ( (LA209_0==RULE_SIMPLE_ID) ) {
-                alt209=1;
+            if ( (LA247_0==RULE_SIMPLE_ID) ) {
+                alt247=1;
             }
-            else if ( (LA209_0==RULE_ESCAPED_ID) ) {
-                alt209=2;
+            else if ( (LA247_0==RULE_ESCAPED_ID) ) {
+                alt247=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 209, 0, input);
+                    new NoViableAltException("", 247, 0, input);
 
                 throw nvae;
             }
-            switch (alt209) {
+            switch (alt247) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9528:6: this_SIMPLE_ID_0= RULE_SIMPLE_ID
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9762:6: this_SIMPLE_ID_0= RULE_SIMPLE_ID
                     {
-                    this_SIMPLE_ID_0=(Token)match(input,RULE_SIMPLE_ID,FollowSets000.FOLLOW_RULE_SIMPLE_ID_in_ruleID21179); if (state.failed) return current;
+                    this_SIMPLE_ID_0=(Token)match(input,RULE_SIMPLE_ID,FollowSets000.FOLLOW_RULE_SIMPLE_ID_in_ruleID22585); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       		current.merge(this_SIMPLE_ID_0);
@@ -27809,9 +29004,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9536:10: this_ESCAPED_ID_1= RULE_ESCAPED_ID
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9770:10: this_ESCAPED_ID_1= RULE_ESCAPED_ID
                     {
-                    this_ESCAPED_ID_1=(Token)match(input,RULE_ESCAPED_ID,FollowSets000.FOLLOW_RULE_ESCAPED_ID_in_ruleID21205); if (state.failed) return current;
+                    this_ESCAPED_ID_1=(Token)match(input,RULE_ESCAPED_ID,FollowSets000.FOLLOW_RULE_ESCAPED_ID_in_ruleID22611); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       		current.merge(this_ESCAPED_ID_1);
@@ -27848,7 +29043,7 @@
 
 
     // $ANTLR start "entryRuleIdentifier"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9551:1: entryRuleIdentifier returns [String current=null] : iv_ruleIdentifier= ruleIdentifier EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9785:1: entryRuleIdentifier returns [String current=null] : iv_ruleIdentifier= ruleIdentifier EOF ;
     public final String entryRuleIdentifier() throws RecognitionException {
         String current = null;
 
@@ -27856,13 +29051,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9552:2: (iv_ruleIdentifier= ruleIdentifier EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9553:2: iv_ruleIdentifier= ruleIdentifier EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9786:2: (iv_ruleIdentifier= ruleIdentifier EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9787:2: iv_ruleIdentifier= ruleIdentifier EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getIdentifierRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleIdentifier_in_entryRuleIdentifier21251);
+            pushFollow(FollowSets000.FOLLOW_ruleIdentifier_in_entryRuleIdentifier22657);
             iv_ruleIdentifier=ruleIdentifier();
 
             state._fsp--;
@@ -27870,7 +29065,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleIdentifier.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleIdentifier21262); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleIdentifier22668); if (state.failed) return current;
 
             }
 
@@ -27888,7 +29083,7 @@
 
 
     // $ANTLR start "ruleIdentifier"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9560:1: ruleIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_ID_0= ruleID ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9794:1: ruleIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_ID_0= ruleID ;
     public final AntlrDatatypeRuleToken ruleIdentifier() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -27898,15 +29093,15 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9563:28: (this_ID_0= ruleID )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9565:5: this_ID_0= ruleID
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9797:28: (this_ID_0= ruleID )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9799:5: this_ID_0= ruleID
             {
             if ( state.backtracking==0 ) {
                
                       newCompositeNode(grammarAccess.getIdentifierAccess().getIDParserRuleCall()); 
                   
             }
-            pushFollow(FollowSets000.FOLLOW_ruleID_in_ruleIdentifier21308);
+            pushFollow(FollowSets000.FOLLOW_ruleID_in_ruleIdentifier22714);
             this_ID_0=ruleID();
 
             state._fsp--;
@@ -27941,7 +29136,7 @@
 
 
     // $ANTLR start "entryRuleLOWER"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9583:1: entryRuleLOWER returns [String current=null] : iv_ruleLOWER= ruleLOWER EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9817:1: entryRuleLOWER returns [String current=null] : iv_ruleLOWER= ruleLOWER EOF ;
     public final String entryRuleLOWER() throws RecognitionException {
         String current = null;
 
@@ -27949,13 +29144,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9584:2: (iv_ruleLOWER= ruleLOWER EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9585:2: iv_ruleLOWER= ruleLOWER EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9818:2: (iv_ruleLOWER= ruleLOWER EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9819:2: iv_ruleLOWER= ruleLOWER EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getLOWERRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleLOWER_in_entryRuleLOWER21353);
+            pushFollow(FollowSets000.FOLLOW_ruleLOWER_in_entryRuleLOWER22759);
             iv_ruleLOWER=ruleLOWER();
 
             state._fsp--;
@@ -27963,7 +29158,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleLOWER.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLOWER21364); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLOWER22770); if (state.failed) return current;
 
             }
 
@@ -27981,7 +29176,7 @@
 
 
     // $ANTLR start "ruleLOWER"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9592:1: ruleLOWER returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_INT_0= RULE_INT ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9826:1: ruleLOWER returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_INT_0= RULE_INT ;
     public final AntlrDatatypeRuleToken ruleLOWER() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -27990,10 +29185,10 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9595:28: (this_INT_0= RULE_INT )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9596:5: this_INT_0= RULE_INT
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9829:28: (this_INT_0= RULE_INT )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9830:5: this_INT_0= RULE_INT
             {
-            this_INT_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleLOWER21403); if (state.failed) return current;
+            this_INT_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleLOWER22809); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               		current.merge(this_INT_0);
@@ -28024,7 +29219,7 @@
 
 
     // $ANTLR start "entryRuleNUMBER_LITERAL"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9611:1: entryRuleNUMBER_LITERAL returns [String current=null] : iv_ruleNUMBER_LITERAL= ruleNUMBER_LITERAL EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9845:1: entryRuleNUMBER_LITERAL returns [String current=null] : iv_ruleNUMBER_LITERAL= ruleNUMBER_LITERAL EOF ;
     public final String entryRuleNUMBER_LITERAL() throws RecognitionException {
         String current = null;
 
@@ -28032,13 +29227,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9612:2: (iv_ruleNUMBER_LITERAL= ruleNUMBER_LITERAL EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9613:2: iv_ruleNUMBER_LITERAL= ruleNUMBER_LITERAL EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9846:2: (iv_ruleNUMBER_LITERAL= ruleNUMBER_LITERAL EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9847:2: iv_ruleNUMBER_LITERAL= ruleNUMBER_LITERAL EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNUMBER_LITERALRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleNUMBER_LITERAL_in_entryRuleNUMBER_LITERAL21448);
+            pushFollow(FollowSets000.FOLLOW_ruleNUMBER_LITERAL_in_entryRuleNUMBER_LITERAL22854);
             iv_ruleNUMBER_LITERAL=ruleNUMBER_LITERAL();
 
             state._fsp--;
@@ -28046,7 +29241,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleNUMBER_LITERAL.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNUMBER_LITERAL21459); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNUMBER_LITERAL22865); if (state.failed) return current;
 
             }
 
@@ -28064,7 +29259,7 @@
 
 
     // $ANTLR start "ruleNUMBER_LITERAL"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9620:1: ruleNUMBER_LITERAL returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_INT_0= RULE_INT ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9854:1: ruleNUMBER_LITERAL returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_INT_0= RULE_INT ;
     public final AntlrDatatypeRuleToken ruleNUMBER_LITERAL() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -28073,10 +29268,10 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9623:28: (this_INT_0= RULE_INT )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9624:5: this_INT_0= RULE_INT
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9857:28: (this_INT_0= RULE_INT )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9858:5: this_INT_0= RULE_INT
             {
-            this_INT_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleNUMBER_LITERAL21498); if (state.failed) return current;
+            this_INT_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleNUMBER_LITERAL22904); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               		current.merge(this_INT_0);
@@ -28107,7 +29302,7 @@
 
 
     // $ANTLR start "entryRuleStringLiteral"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9639:1: entryRuleStringLiteral returns [String current=null] : iv_ruleStringLiteral= ruleStringLiteral EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9873:1: entryRuleStringLiteral returns [String current=null] : iv_ruleStringLiteral= ruleStringLiteral EOF ;
     public final String entryRuleStringLiteral() throws RecognitionException {
         String current = null;
 
@@ -28115,13 +29310,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9640:2: (iv_ruleStringLiteral= ruleStringLiteral EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9641:2: iv_ruleStringLiteral= ruleStringLiteral EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9874:2: (iv_ruleStringLiteral= ruleStringLiteral EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9875:2: iv_ruleStringLiteral= ruleStringLiteral EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getStringLiteralRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleStringLiteral_in_entryRuleStringLiteral21543);
+            pushFollow(FollowSets000.FOLLOW_ruleStringLiteral_in_entryRuleStringLiteral22949);
             iv_ruleStringLiteral=ruleStringLiteral();
 
             state._fsp--;
@@ -28129,7 +29324,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleStringLiteral.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleStringLiteral21554); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleStringLiteral22960); if (state.failed) return current;
 
             }
 
@@ -28147,7 +29342,7 @@
 
 
     // $ANTLR start "ruleStringLiteral"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9648:1: ruleStringLiteral returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9882:1: ruleStringLiteral returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING ;
     public final AntlrDatatypeRuleToken ruleStringLiteral() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -28156,10 +29351,10 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9651:28: (this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9652:5: this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9885:28: (this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9886:5: this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING
             {
-            this_SINGLE_QUOTED_STRING_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleStringLiteral21593); if (state.failed) return current;
+            this_SINGLE_QUOTED_STRING_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleStringLiteral22999); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               		current.merge(this_SINGLE_QUOTED_STRING_0);
@@ -28190,7 +29385,7 @@
 
 
     // $ANTLR start "entryRuleUPPER"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9667:1: entryRuleUPPER returns [String current=null] : iv_ruleUPPER= ruleUPPER EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9901:1: entryRuleUPPER returns [String current=null] : iv_ruleUPPER= ruleUPPER EOF ;
     public final String entryRuleUPPER() throws RecognitionException {
         String current = null;
 
@@ -28198,13 +29393,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9668:2: (iv_ruleUPPER= ruleUPPER EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9669:2: iv_ruleUPPER= ruleUPPER EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9902:2: (iv_ruleUPPER= ruleUPPER EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9903:2: iv_ruleUPPER= ruleUPPER EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getUPPERRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleUPPER_in_entryRuleUPPER21638);
+            pushFollow(FollowSets000.FOLLOW_ruleUPPER_in_entryRuleUPPER23044);
             iv_ruleUPPER=ruleUPPER();
 
             state._fsp--;
@@ -28212,7 +29407,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleUPPER.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUPPER21649); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUPPER23055); if (state.failed) return current;
 
             }
 
@@ -28230,7 +29425,7 @@
 
 
     // $ANTLR start "ruleUPPER"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9676:1: ruleUPPER returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_INT_0= RULE_INT | kw= '*' ) ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9910:1: ruleUPPER returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_INT_0= RULE_INT | kw= '*' ) ;
     public final AntlrDatatypeRuleToken ruleUPPER() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -28240,31 +29435,31 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9679:28: ( (this_INT_0= RULE_INT | kw= '*' ) )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9680:1: (this_INT_0= RULE_INT | kw= '*' )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9913:28: ( (this_INT_0= RULE_INT | kw= '*' ) )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9914:1: (this_INT_0= RULE_INT | kw= '*' )
             {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9680:1: (this_INT_0= RULE_INT | kw= '*' )
-            int alt210=2;
-            int LA210_0 = input.LA(1);
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9914:1: (this_INT_0= RULE_INT | kw= '*' )
+            int alt248=2;
+            int LA248_0 = input.LA(1);
 
-            if ( (LA210_0==RULE_INT) ) {
-                alt210=1;
+            if ( (LA248_0==RULE_INT) ) {
+                alt248=1;
             }
-            else if ( (LA210_0==84) ) {
-                alt210=2;
+            else if ( (LA248_0==84) ) {
+                alt248=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 210, 0, input);
+                    new NoViableAltException("", 248, 0, input);
 
                 throw nvae;
             }
-            switch (alt210) {
+            switch (alt248) {
                 case 1 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9680:6: this_INT_0= RULE_INT
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9914:6: this_INT_0= RULE_INT
                     {
-                    this_INT_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleUPPER21689); if (state.failed) return current;
+                    this_INT_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleUPPER23095); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       		current.merge(this_INT_0);
@@ -28279,9 +29474,9 @@
                     }
                     break;
                 case 2 :
-                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9689:2: kw= '*'
+                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9923:2: kw= '*'
                     {
-                    kw=(Token)match(input,84,FollowSets000.FOLLOW_84_in_ruleUPPER21713); if (state.failed) return current;
+                    kw=(Token)match(input,84,FollowSets000.FOLLOW_84_in_ruleUPPER23119); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                               current.merge(kw);
@@ -28314,7 +29509,7 @@
 
 
     // $ANTLR start "entryRuleURI"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9702:1: entryRuleURI returns [String current=null] : iv_ruleURI= ruleURI EOF ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9936:1: entryRuleURI returns [String current=null] : iv_ruleURI= ruleURI EOF ;
     public final String entryRuleURI() throws RecognitionException {
         String current = null;
 
@@ -28322,13 +29517,13 @@
 
 
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9703:2: (iv_ruleURI= ruleURI EOF )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9704:2: iv_ruleURI= ruleURI EOF
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9937:2: (iv_ruleURI= ruleURI EOF )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9938:2: iv_ruleURI= ruleURI EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getURIRule()); 
             }
-            pushFollow(FollowSets000.FOLLOW_ruleURI_in_entryRuleURI21754);
+            pushFollow(FollowSets000.FOLLOW_ruleURI_in_entryRuleURI23160);
             iv_ruleURI=ruleURI();
 
             state._fsp--;
@@ -28336,7 +29531,7 @@
             if ( state.backtracking==0 ) {
                current =iv_ruleURI.getText(); 
             }
-            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleURI21765); if (state.failed) return current;
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleURI23171); if (state.failed) return current;
 
             }
 
@@ -28354,7 +29549,7 @@
 
 
     // $ANTLR start "ruleURI"
-    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9711:1: ruleURI returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING ;
+    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9945:1: ruleURI returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING ;
     public final AntlrDatatypeRuleToken ruleURI() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -28363,10 +29558,10 @@
          enterRule(); 
             
         try {
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9714:28: (this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING )
-            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9715:5: this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9948:28: (this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING )
+            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:9949:5: this_SINGLE_QUOTED_STRING_0= RULE_SINGLE_QUOTED_STRING
             {
-            this_SINGLE_QUOTED_STRING_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleURI21804); if (state.failed) return current;
+            this_SINGLE_QUOTED_STRING_0=(Token)match(input,RULE_SINGLE_QUOTED_STRING,FollowSets000.FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleURI23210); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               		current.merge(this_SINGLE_QUOTED_STRING_0);
@@ -28395,20 +29590,5619 @@
     }
     // $ANTLR end "ruleURI"
 
-    // $ANTLR start synpred300_InternalOCLinEcore
-    public final void synpred300_InternalOCLinEcore_fragment() throws RecognitionException {   
+    // $ANTLR start synpred63_InternalOCLinEcore
+    public final void synpred63_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isStatic_1_0=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1112:4: ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1112:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1112:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1113:5: {...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred63_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1113:108: ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1114:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1117:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1117:7: {...}? => ( (lv_isStatic_1_0= 'static' ) )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred63_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1117:16: ( (lv_isStatic_1_0= 'static' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1118:1: (lv_isStatic_1_0= 'static' )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1118:1: (lv_isStatic_1_0= 'static' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1119:3: lv_isStatic_1_0= 'static'
+        {
+        lv_isStatic_1_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_synpred63_InternalOCLinEcore2493); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred63_InternalOCLinEcore
+
+    // $ANTLR start synpred64_InternalOCLinEcore
+    public final void synpred64_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isDefinition_2_0=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1139:4: ( ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1139:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1139:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1140:5: {...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred64_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1140:108: ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1141:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_0(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1144:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1144:7: {...}? => ( (lv_isDefinition_2_0= 'definition' ) )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred64_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1144:16: ( (lv_isDefinition_2_0= 'definition' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1145:1: (lv_isDefinition_2_0= 'definition' )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1145:1: (lv_isDefinition_2_0= 'definition' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1146:3: lv_isDefinition_2_0= 'definition'
+        {
+        lv_isDefinition_2_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_synpred64_InternalOCLinEcore2578); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred64_InternalOCLinEcore
+
+    // $ANTLR start synpred70_InternalOCLinEcore
+    public final void synpred70_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token otherlv_10=null;
+        Token lv_isDerived_11_0=null;
+        Token otherlv_12=null;
+        Token otherlv_13=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1248:4: ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1248:4: ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1248:4: ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1249:5: {...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred70_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1249:108: ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1250:6: ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:6: ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:7: {...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred70_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:16: (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:18: otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )?
+        {
+        otherlv_10=(Token)match(input,61,FollowSets000.FOLLOW_61_in_synpred70_InternalOCLinEcore2795); if (state.failed) return ;
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:1: ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )?
+        int alt260=2;
+        int LA260_0 = input.LA(1);
+
+        if ( (LA260_0==28||LA260_0==64) ) {
+            alt260=1;
+        }
+        switch (alt260) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:2: ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )?
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:2: ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' )
+                int alt258=2;
+                int LA258_0 = input.LA(1);
+
+                if ( (LA258_0==28) ) {
+                    alt258=1;
+                }
+                else if ( (LA258_0==64) ) {
+                    alt258=2;
+                }
+                else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 258, 0, input);
+
+                    throw nvae;
+                }
+                switch (alt258) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:3: ( (lv_isDerived_11_0= 'derived' ) )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:3: ( (lv_isDerived_11_0= 'derived' ) )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1258:1: (lv_isDerived_11_0= 'derived' )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1258:1: (lv_isDerived_11_0= 'derived' )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1259:3: lv_isDerived_11_0= 'derived'
+                        {
+                        lv_isDerived_11_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_synpred70_InternalOCLinEcore2815); if (state.failed) return ;
+
+                        }
+
+
+                        }
+
+
+                        }
+                        break;
+                    case 2 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1273:7: otherlv_12= '!derived'
+                        {
+                        otherlv_12=(Token)match(input,64,FollowSets000.FOLLOW_64_in_synpred70_InternalOCLinEcore2846); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1277:2: (otherlv_13= ',' )?
+                int alt259=2;
+                int LA259_0 = input.LA(1);
+
+                if ( (LA259_0==60) ) {
+                    alt259=1;
+                }
+                switch (alt259) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1277:4: otherlv_13= ','
+                        {
+                        otherlv_13=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred70_InternalOCLinEcore2860); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred70_InternalOCLinEcore
+
+    // $ANTLR start synpred73_InternalOCLinEcore
+    public final void synpred73_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isId_14_0=null;
+        Token otherlv_15=null;
+        Token otherlv_16=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1288:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1288:4: ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1288:4: ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1289:5: {...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred73_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1289:108: ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1290:6: ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:6: ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:7: {...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred73_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:16: ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:17: ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:17: ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' )
+        int alt261=2;
+        int LA261_0 = input.LA(1);
+
+        if ( (LA261_0==31) ) {
+            alt261=1;
+        }
+        else if ( (LA261_0==65) ) {
+            alt261=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 261, 0, input);
+
+            throw nvae;
+        }
+        switch (alt261) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:18: ( (lv_isId_14_0= 'id' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:18: ( (lv_isId_14_0= 'id' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1294:1: (lv_isId_14_0= 'id' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1294:1: (lv_isId_14_0= 'id' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1295:3: lv_isId_14_0= 'id'
+                {
+                lv_isId_14_0=(Token)match(input,31,FollowSets000.FOLLOW_31_in_synpred73_InternalOCLinEcore2939); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1309:7: otherlv_15= '!id'
+                {
+                otherlv_15=(Token)match(input,65,FollowSets000.FOLLOW_65_in_synpred73_InternalOCLinEcore2970); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1313:2: (otherlv_16= ',' )?
+        int alt262=2;
+        int LA262_0 = input.LA(1);
+
+        if ( (LA262_0==60) ) {
+            alt262=1;
+        }
+        switch (alt262) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1313:4: otherlv_16= ','
+                {
+                otherlv_16=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred73_InternalOCLinEcore2984); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred73_InternalOCLinEcore
+
+    // $ANTLR start synpred76_InternalOCLinEcore
+    public final void synpred76_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isOrdered_17_0=null;
+        Token otherlv_18=null;
+        Token otherlv_19=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1324:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1324:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1324:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1325:5: {...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred76_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1325:108: ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1326:6: ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:6: ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:7: {...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred76_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:16: ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:17: ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:17: ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' )
+        int alt263=2;
+        int LA263_0 = input.LA(1);
+
+        if ( (LA263_0==38) ) {
+            alt263=1;
+        }
+        else if ( (LA263_0==66) ) {
+            alt263=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 263, 0, input);
+
+            throw nvae;
+        }
+        switch (alt263) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:18: ( (lv_isOrdered_17_0= 'ordered' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:18: ( (lv_isOrdered_17_0= 'ordered' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1330:1: (lv_isOrdered_17_0= 'ordered' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1330:1: (lv_isOrdered_17_0= 'ordered' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1331:3: lv_isOrdered_17_0= 'ordered'
+                {
+                lv_isOrdered_17_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_synpred76_InternalOCLinEcore3061); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1345:7: otherlv_18= '!ordered'
+                {
+                otherlv_18=(Token)match(input,66,FollowSets000.FOLLOW_66_in_synpred76_InternalOCLinEcore3092); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1349:2: (otherlv_19= ',' )?
+        int alt264=2;
+        int LA264_0 = input.LA(1);
+
+        if ( (LA264_0==60) ) {
+            alt264=1;
+        }
+        switch (alt264) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1349:4: otherlv_19= ','
+                {
+                otherlv_19=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred76_InternalOCLinEcore3106); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred76_InternalOCLinEcore
+
+    // $ANTLR start synpred79_InternalOCLinEcore
+    public final void synpred79_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isReadonly_20_0=null;
+        Token otherlv_21=null;
+        Token otherlv_22=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1360:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1360:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1360:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1361:5: {...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred79_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1361:108: ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1362:6: ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:6: ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:7: {...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred79_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:16: ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:17: ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:17: ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' )
+        int alt265=2;
+        int LA265_0 = input.LA(1);
+
+        if ( (LA265_0==44) ) {
+            alt265=1;
+        }
+        else if ( (LA265_0==67) ) {
+            alt265=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 265, 0, input);
+
+            throw nvae;
+        }
+        switch (alt265) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:18: ( (lv_isReadonly_20_0= 'readonly' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:18: ( (lv_isReadonly_20_0= 'readonly' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1366:1: (lv_isReadonly_20_0= 'readonly' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1366:1: (lv_isReadonly_20_0= 'readonly' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1367:3: lv_isReadonly_20_0= 'readonly'
+                {
+                lv_isReadonly_20_0=(Token)match(input,44,FollowSets000.FOLLOW_44_in_synpred79_InternalOCLinEcore3183); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1381:7: otherlv_21= '!readonly'
+                {
+                otherlv_21=(Token)match(input,67,FollowSets000.FOLLOW_67_in_synpred79_InternalOCLinEcore3214); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1385:2: (otherlv_22= ',' )?
+        int alt266=2;
+        int LA266_0 = input.LA(1);
+
+        if ( (LA266_0==60) ) {
+            alt266=1;
+        }
+        switch (alt266) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1385:4: otherlv_22= ','
+                {
+                otherlv_22=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred79_InternalOCLinEcore3228); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred79_InternalOCLinEcore
+
+    // $ANTLR start synpred82_InternalOCLinEcore
+    public final void synpred82_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isTransient_23_0=null;
+        Token otherlv_24=null;
+        Token otherlv_25=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1396:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1396:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1396:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1397:5: {...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred82_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1397:108: ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1398:6: ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:6: ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:7: {...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred82_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:16: ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:17: ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:17: ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' )
+        int alt267=2;
+        int LA267_0 = input.LA(1);
+
+        if ( (LA267_0==50) ) {
+            alt267=1;
+        }
+        else if ( (LA267_0==68) ) {
+            alt267=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 267, 0, input);
+
+            throw nvae;
+        }
+        switch (alt267) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:18: ( (lv_isTransient_23_0= 'transient' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:18: ( (lv_isTransient_23_0= 'transient' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1402:1: (lv_isTransient_23_0= 'transient' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1402:1: (lv_isTransient_23_0= 'transient' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1403:3: lv_isTransient_23_0= 'transient'
+                {
+                lv_isTransient_23_0=(Token)match(input,50,FollowSets000.FOLLOW_50_in_synpred82_InternalOCLinEcore3305); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1417:7: otherlv_24= '!transient'
+                {
+                otherlv_24=(Token)match(input,68,FollowSets000.FOLLOW_68_in_synpred82_InternalOCLinEcore3336); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1421:2: (otherlv_25= ',' )?
+        int alt268=2;
+        int LA268_0 = input.LA(1);
+
+        if ( (LA268_0==60) ) {
+            alt268=1;
+        }
+        switch (alt268) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1421:4: otherlv_25= ','
+                {
+                otherlv_25=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred82_InternalOCLinEcore3350); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred82_InternalOCLinEcore
+
+    // $ANTLR start synpred85_InternalOCLinEcore
+    public final void synpred85_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isNotUnique_26_0=null;
+        Token otherlv_27=null;
+        Token otherlv_28=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1432:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1432:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1432:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1433:5: {...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred85_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1433:108: ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1434:6: ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:6: ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:7: {...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred85_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:16: ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:17: ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:17: ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' )
+        int alt269=2;
+        int LA269_0 = input.LA(1);
+
+        if ( (LA269_0==69) ) {
+            alt269=1;
+        }
+        else if ( (LA269_0==51) ) {
+            alt269=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 269, 0, input);
+
+            throw nvae;
+        }
+        switch (alt269) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:18: ( (lv_isNotUnique_26_0= '!unique' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:18: ( (lv_isNotUnique_26_0= '!unique' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1438:1: (lv_isNotUnique_26_0= '!unique' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1438:1: (lv_isNotUnique_26_0= '!unique' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1439:3: lv_isNotUnique_26_0= '!unique'
+                {
+                lv_isNotUnique_26_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_synpred85_InternalOCLinEcore3427); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1453:7: otherlv_27= 'unique'
+                {
+                otherlv_27=(Token)match(input,51,FollowSets000.FOLLOW_51_in_synpred85_InternalOCLinEcore3458); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1457:2: (otherlv_28= ',' )?
+        int alt270=2;
+        int LA270_0 = input.LA(1);
+
+        if ( (LA270_0==60) ) {
+            alt270=1;
+        }
+        switch (alt270) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1457:4: otherlv_28= ','
+                {
+                otherlv_28=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred85_InternalOCLinEcore3472); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred85_InternalOCLinEcore
+
+    // $ANTLR start synpred88_InternalOCLinEcore
+    public final void synpred88_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isUnsettable_29_0=null;
+        Token otherlv_30=null;
+        Token otherlv_31=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1468:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1468:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1468:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1469:5: {...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred88_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1469:108: ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1470:6: ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:6: ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:7: {...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred88_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:16: ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:17: ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:17: ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' )
+        int alt271=2;
+        int LA271_0 = input.LA(1);
+
+        if ( (LA271_0==52) ) {
+            alt271=1;
+        }
+        else if ( (LA271_0==70) ) {
+            alt271=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 271, 0, input);
+
+            throw nvae;
+        }
+        switch (alt271) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:18: ( (lv_isUnsettable_29_0= 'unsettable' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:18: ( (lv_isUnsettable_29_0= 'unsettable' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1474:1: (lv_isUnsettable_29_0= 'unsettable' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1474:1: (lv_isUnsettable_29_0= 'unsettable' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1475:3: lv_isUnsettable_29_0= 'unsettable'
+                {
+                lv_isUnsettable_29_0=(Token)match(input,52,FollowSets000.FOLLOW_52_in_synpred88_InternalOCLinEcore3549); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1489:7: otherlv_30= '!unsettable'
+                {
+                otherlv_30=(Token)match(input,70,FollowSets000.FOLLOW_70_in_synpred88_InternalOCLinEcore3580); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1493:2: (otherlv_31= ',' )?
+        int alt272=2;
+        int LA272_0 = input.LA(1);
+
+        if ( (LA272_0==60) ) {
+            alt272=1;
+        }
+        switch (alt272) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1493:4: otherlv_31= ','
+                {
+                otherlv_31=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred88_InternalOCLinEcore3594); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred88_InternalOCLinEcore
+
+    // $ANTLR start synpred92_InternalOCLinEcore
+    public final void synpred92_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isVolatile_32_0=null;
+        Token otherlv_33=null;
+        Token otherlv_34=null;
+        Token otherlv_35=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1504:4: ( ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1504:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1504:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1505:5: {...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred92_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1505:108: ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1506:6: ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:6: ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:7: {...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred92_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:16: ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:17: ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}'
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:17: ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )?
+        int alt277=2;
+        int LA277_0 = input.LA(1);
+
+        if ( (LA277_0==53||LA277_0==71) ) {
+            alt277=1;
+        }
+        switch (alt277) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:18: ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )?
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:18: ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' )
+                int alt275=2;
+                int LA275_0 = input.LA(1);
+
+                if ( (LA275_0==53) ) {
+                    alt275=1;
+                }
+                else if ( (LA275_0==71) ) {
+                    alt275=2;
+                }
+                else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 275, 0, input);
+
+                    throw nvae;
+                }
+                switch (alt275) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:19: ( (lv_isVolatile_32_0= 'volatile' ) )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:19: ( (lv_isVolatile_32_0= 'volatile' ) )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1510:1: (lv_isVolatile_32_0= 'volatile' )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1510:1: (lv_isVolatile_32_0= 'volatile' )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1511:3: lv_isVolatile_32_0= 'volatile'
+                        {
+                        lv_isVolatile_32_0=(Token)match(input,53,FollowSets000.FOLLOW_53_in_synpred92_InternalOCLinEcore3672); if (state.failed) return ;
+
+                        }
+
+
+                        }
+
+
+                        }
+                        break;
+                    case 2 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1525:7: otherlv_33= '!volatile'
+                        {
+                        otherlv_33=(Token)match(input,71,FollowSets000.FOLLOW_71_in_synpred92_InternalOCLinEcore3703); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1529:2: (otherlv_34= ',' )?
+                int alt276=2;
+                int LA276_0 = input.LA(1);
+
+                if ( (LA276_0==60) ) {
+                    alt276=1;
+                }
+                switch (alt276) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1529:4: otherlv_34= ','
+                        {
+                        otherlv_34=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred92_InternalOCLinEcore3717); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+
+                }
+                break;
+
+        }
+
+        otherlv_35=(Token)match(input,62,FollowSets000.FOLLOW_62_in_synpred92_InternalOCLinEcore3733); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred92_InternalOCLinEcore
+
+    // $ANTLR start synpred93_InternalOCLinEcore
+    public final void synpred93_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token otherlv_10=null;
+        Token lv_isDerived_11_0=null;
+        Token otherlv_12=null;
+        Token otherlv_13=null;
+        Token lv_isId_14_0=null;
+        Token otherlv_15=null;
+        Token otherlv_16=null;
+        Token lv_isOrdered_17_0=null;
+        Token otherlv_18=null;
+        Token otherlv_19=null;
+        Token lv_isReadonly_20_0=null;
+        Token otherlv_21=null;
+        Token otherlv_22=null;
+        Token lv_isTransient_23_0=null;
+        Token otherlv_24=null;
+        Token otherlv_25=null;
+        Token lv_isNotUnique_26_0=null;
+        Token otherlv_27=null;
+        Token otherlv_28=null;
+        Token lv_isUnsettable_29_0=null;
+        Token otherlv_30=null;
+        Token otherlv_31=null;
+        Token lv_isVolatile_32_0=null;
+        Token otherlv_33=null;
+        Token otherlv_34=null;
+        Token otherlv_35=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1241:1: ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1241:1: ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1241:1: ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1242:2: ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?)
+        {
+        getUnorderedGroupHelper().enter(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5());
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1245:2: ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?)
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1246:3: ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1246:3: ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+
+        int cnt296=0;
+        loop296:
+        do {
+            int alt296=9;
+            alt296 = dfa296.predict(input);
+            switch (alt296) {
+        	case 1 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1248:4: ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1248:4: ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1249:5: {...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1249:108: ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1250:6: ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:6: ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:7: {...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:16: (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1253:18: otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )?
+        	    {
+        	    otherlv_10=(Token)match(input,61,FollowSets000.FOLLOW_61_in_synpred93_InternalOCLinEcore2795); if (state.failed) return ;
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:1: ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )?
+        	    int alt280=2;
+        	    alt280 = dfa280.predict(input);
+        	    switch (alt280) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:2: ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )?
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:2: ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' )
+        	            int alt278=2;
+        	            int LA278_0 = input.LA(1);
+
+        	            if ( (LA278_0==28) ) {
+        	                alt278=1;
+        	            }
+        	            else if ( (LA278_0==64) ) {
+        	                alt278=2;
+        	            }
+        	            else {
+        	                if (state.backtracking>0) {state.failed=true; return ;}
+        	                NoViableAltException nvae =
+        	                    new NoViableAltException("", 278, 0, input);
+
+        	                throw nvae;
+        	            }
+        	            switch (alt278) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:3: ( (lv_isDerived_11_0= 'derived' ) )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1257:3: ( (lv_isDerived_11_0= 'derived' ) )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1258:1: (lv_isDerived_11_0= 'derived' )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1258:1: (lv_isDerived_11_0= 'derived' )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1259:3: lv_isDerived_11_0= 'derived'
+        	                    {
+        	                    lv_isDerived_11_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_synpred93_InternalOCLinEcore2815); if (state.failed) return ;
+
+        	                    }
+
+
+        	                    }
+
+
+        	                    }
+        	                    break;
+        	                case 2 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1273:7: otherlv_12= '!derived'
+        	                    {
+        	                    otherlv_12=(Token)match(input,64,FollowSets000.FOLLOW_64_in_synpred93_InternalOCLinEcore2846); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1277:2: (otherlv_13= ',' )?
+        	            int alt279=2;
+        	            alt279 = dfa279.predict(input);
+        	            switch (alt279) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1277:4: otherlv_13= ','
+        	                    {
+        	                    otherlv_13=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred93_InternalOCLinEcore2860); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 2 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1288:4: ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1288:4: ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1289:5: {...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1289:108: ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1290:6: ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:6: ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:7: {...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:16: ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:17: ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:17: ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' )
+        	    int alt281=2;
+        	    int LA281_0 = input.LA(1);
+
+        	    if ( (LA281_0==31) ) {
+        	        alt281=1;
+        	    }
+        	    else if ( (LA281_0==65) ) {
+        	        alt281=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 281, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt281) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:18: ( (lv_isId_14_0= 'id' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1293:18: ( (lv_isId_14_0= 'id' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1294:1: (lv_isId_14_0= 'id' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1294:1: (lv_isId_14_0= 'id' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1295:3: lv_isId_14_0= 'id'
+        	            {
+        	            lv_isId_14_0=(Token)match(input,31,FollowSets000.FOLLOW_31_in_synpred93_InternalOCLinEcore2939); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1309:7: otherlv_15= '!id'
+        	            {
+        	            otherlv_15=(Token)match(input,65,FollowSets000.FOLLOW_65_in_synpred93_InternalOCLinEcore2970); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1313:2: (otherlv_16= ',' )?
+        	    int alt282=2;
+        	    alt282 = dfa282.predict(input);
+        	    switch (alt282) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1313:4: otherlv_16= ','
+        	            {
+        	            otherlv_16=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred93_InternalOCLinEcore2984); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 3 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1324:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1324:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1325:5: {...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1325:108: ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1326:6: ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:6: ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:7: {...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:16: ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:17: ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:17: ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' )
+        	    int alt283=2;
+        	    int LA283_0 = input.LA(1);
+
+        	    if ( (LA283_0==38) ) {
+        	        alt283=1;
+        	    }
+        	    else if ( (LA283_0==66) ) {
+        	        alt283=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 283, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt283) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:18: ( (lv_isOrdered_17_0= 'ordered' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1329:18: ( (lv_isOrdered_17_0= 'ordered' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1330:1: (lv_isOrdered_17_0= 'ordered' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1330:1: (lv_isOrdered_17_0= 'ordered' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1331:3: lv_isOrdered_17_0= 'ordered'
+        	            {
+        	            lv_isOrdered_17_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_synpred93_InternalOCLinEcore3061); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1345:7: otherlv_18= '!ordered'
+        	            {
+        	            otherlv_18=(Token)match(input,66,FollowSets000.FOLLOW_66_in_synpred93_InternalOCLinEcore3092); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1349:2: (otherlv_19= ',' )?
+        	    int alt284=2;
+        	    alt284 = dfa284.predict(input);
+        	    switch (alt284) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1349:4: otherlv_19= ','
+        	            {
+        	            otherlv_19=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred93_InternalOCLinEcore3106); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 4 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1360:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1360:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1361:5: {...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1361:108: ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1362:6: ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:6: ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:7: {...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:16: ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:17: ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:17: ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' )
+        	    int alt285=2;
+        	    int LA285_0 = input.LA(1);
+
+        	    if ( (LA285_0==44) ) {
+        	        alt285=1;
+        	    }
+        	    else if ( (LA285_0==67) ) {
+        	        alt285=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 285, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt285) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:18: ( (lv_isReadonly_20_0= 'readonly' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1365:18: ( (lv_isReadonly_20_0= 'readonly' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1366:1: (lv_isReadonly_20_0= 'readonly' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1366:1: (lv_isReadonly_20_0= 'readonly' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1367:3: lv_isReadonly_20_0= 'readonly'
+        	            {
+        	            lv_isReadonly_20_0=(Token)match(input,44,FollowSets000.FOLLOW_44_in_synpred93_InternalOCLinEcore3183); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1381:7: otherlv_21= '!readonly'
+        	            {
+        	            otherlv_21=(Token)match(input,67,FollowSets000.FOLLOW_67_in_synpred93_InternalOCLinEcore3214); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1385:2: (otherlv_22= ',' )?
+        	    int alt286=2;
+        	    alt286 = dfa286.predict(input);
+        	    switch (alt286) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1385:4: otherlv_22= ','
+        	            {
+        	            otherlv_22=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred93_InternalOCLinEcore3228); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 5 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1396:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1396:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1397:5: {...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1397:108: ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1398:6: ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:6: ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:7: {...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:16: ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:17: ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:17: ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' )
+        	    int alt287=2;
+        	    int LA287_0 = input.LA(1);
+
+        	    if ( (LA287_0==50) ) {
+        	        alt287=1;
+        	    }
+        	    else if ( (LA287_0==68) ) {
+        	        alt287=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 287, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt287) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:18: ( (lv_isTransient_23_0= 'transient' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1401:18: ( (lv_isTransient_23_0= 'transient' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1402:1: (lv_isTransient_23_0= 'transient' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1402:1: (lv_isTransient_23_0= 'transient' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1403:3: lv_isTransient_23_0= 'transient'
+        	            {
+        	            lv_isTransient_23_0=(Token)match(input,50,FollowSets000.FOLLOW_50_in_synpred93_InternalOCLinEcore3305); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1417:7: otherlv_24= '!transient'
+        	            {
+        	            otherlv_24=(Token)match(input,68,FollowSets000.FOLLOW_68_in_synpred93_InternalOCLinEcore3336); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1421:2: (otherlv_25= ',' )?
+        	    int alt288=2;
+        	    alt288 = dfa288.predict(input);
+        	    switch (alt288) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1421:4: otherlv_25= ','
+        	            {
+        	            otherlv_25=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred93_InternalOCLinEcore3350); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 6 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1432:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1432:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1433:5: {...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1433:108: ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1434:6: ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:6: ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:7: {...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:16: ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:17: ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:17: ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' )
+        	    int alt289=2;
+        	    int LA289_0 = input.LA(1);
+
+        	    if ( (LA289_0==69) ) {
+        	        alt289=1;
+        	    }
+        	    else if ( (LA289_0==51) ) {
+        	        alt289=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 289, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt289) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:18: ( (lv_isNotUnique_26_0= '!unique' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1437:18: ( (lv_isNotUnique_26_0= '!unique' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1438:1: (lv_isNotUnique_26_0= '!unique' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1438:1: (lv_isNotUnique_26_0= '!unique' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1439:3: lv_isNotUnique_26_0= '!unique'
+        	            {
+        	            lv_isNotUnique_26_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_synpred93_InternalOCLinEcore3427); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1453:7: otherlv_27= 'unique'
+        	            {
+        	            otherlv_27=(Token)match(input,51,FollowSets000.FOLLOW_51_in_synpred93_InternalOCLinEcore3458); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1457:2: (otherlv_28= ',' )?
+        	    int alt290=2;
+        	    alt290 = dfa290.predict(input);
+        	    switch (alt290) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1457:4: otherlv_28= ','
+        	            {
+        	            otherlv_28=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred93_InternalOCLinEcore3472); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 7 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1468:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1468:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1469:5: {...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1469:108: ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1470:6: ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:6: ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:7: {...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:16: ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:17: ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:17: ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' )
+        	    int alt291=2;
+        	    int LA291_0 = input.LA(1);
+
+        	    if ( (LA291_0==52) ) {
+        	        alt291=1;
+        	    }
+        	    else if ( (LA291_0==70) ) {
+        	        alt291=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 291, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt291) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:18: ( (lv_isUnsettable_29_0= 'unsettable' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1473:18: ( (lv_isUnsettable_29_0= 'unsettable' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1474:1: (lv_isUnsettable_29_0= 'unsettable' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1474:1: (lv_isUnsettable_29_0= 'unsettable' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1475:3: lv_isUnsettable_29_0= 'unsettable'
+        	            {
+        	            lv_isUnsettable_29_0=(Token)match(input,52,FollowSets000.FOLLOW_52_in_synpred93_InternalOCLinEcore3549); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1489:7: otherlv_30= '!unsettable'
+        	            {
+        	            otherlv_30=(Token)match(input,70,FollowSets000.FOLLOW_70_in_synpred93_InternalOCLinEcore3580); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1493:2: (otherlv_31= ',' )?
+        	    int alt292=2;
+        	    alt292 = dfa292.predict(input);
+        	    switch (alt292) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1493:4: otherlv_31= ','
+        	            {
+        	            otherlv_31=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred93_InternalOCLinEcore3594); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 8 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1504:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1504:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1505:5: {...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1505:108: ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1506:6: ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:6: ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:7: {...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:16: ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:17: ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}'
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:17: ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )?
+        	    int alt295=2;
+        	    int LA295_0 = input.LA(1);
+
+        	    if ( (LA295_0==53||LA295_0==71) ) {
+        	        alt295=1;
+        	    }
+        	    switch (alt295) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:18: ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )?
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:18: ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' )
+        	            int alt293=2;
+        	            int LA293_0 = input.LA(1);
+
+        	            if ( (LA293_0==53) ) {
+        	                alt293=1;
+        	            }
+        	            else if ( (LA293_0==71) ) {
+        	                alt293=2;
+        	            }
+        	            else {
+        	                if (state.backtracking>0) {state.failed=true; return ;}
+        	                NoViableAltException nvae =
+        	                    new NoViableAltException("", 293, 0, input);
+
+        	                throw nvae;
+        	            }
+        	            switch (alt293) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:19: ( (lv_isVolatile_32_0= 'volatile' ) )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1509:19: ( (lv_isVolatile_32_0= 'volatile' ) )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1510:1: (lv_isVolatile_32_0= 'volatile' )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1510:1: (lv_isVolatile_32_0= 'volatile' )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1511:3: lv_isVolatile_32_0= 'volatile'
+        	                    {
+        	                    lv_isVolatile_32_0=(Token)match(input,53,FollowSets000.FOLLOW_53_in_synpred93_InternalOCLinEcore3672); if (state.failed) return ;
+
+        	                    }
+
+
+        	                    }
+
+
+        	                    }
+        	                    break;
+        	                case 2 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1525:7: otherlv_33= '!volatile'
+        	                    {
+        	                    otherlv_33=(Token)match(input,71,FollowSets000.FOLLOW_71_in_synpred93_InternalOCLinEcore3703); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1529:2: (otherlv_34= ',' )?
+        	            int alt294=2;
+        	            int LA294_0 = input.LA(1);
+
+        	            if ( (LA294_0==60) ) {
+        	                alt294=1;
+        	            }
+        	            switch (alt294) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:1529:4: otherlv_34= ','
+        	                    {
+        	                    otherlv_34=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred93_InternalOCLinEcore3717); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    otherlv_35=(Token)match(input,62,FollowSets000.FOLLOW_62_in_synpred93_InternalOCLinEcore3733); if (state.failed) return ;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+
+        	default :
+        	    if ( cnt296 >= 1 ) break loop296;
+        	    if (state.backtracking>0) {state.failed=true; return ;}
+                    EarlyExitException eee =
+                        new EarlyExitException(296, input);
+                    throw eee;
+            }
+            cnt296++;
+        } while (true);
+
+        if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred93_InternalOCLinEcore", "getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5())");
+        }
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred93_InternalOCLinEcore
+
+    // $ANTLR start synpred139_InternalOCLinEcore
+    public final void synpred139_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isStatic_1_0=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2729:4: ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2729:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2729:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2730:5: {...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred139_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2730:108: ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2731:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2734:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2734:7: {...}? => ( (lv_isStatic_1_0= 'static' ) )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred139_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2734:16: ( (lv_isStatic_1_0= 'static' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2735:1: (lv_isStatic_1_0= 'static' )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2735:1: (lv_isStatic_1_0= 'static' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2736:3: lv_isStatic_1_0= 'static'
+        {
+        lv_isStatic_1_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_synpred139_InternalOCLinEcore6368); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred139_InternalOCLinEcore
+
+    // $ANTLR start synpred140_InternalOCLinEcore
+    public final void synpred140_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isDefinition_2_0=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2756:4: ( ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2756:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2756:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2757:5: {...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred140_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2757:108: ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2758:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_0(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2761:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2761:7: {...}? => ( (lv_isDefinition_2_0= 'definition' ) )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred140_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2761:16: ( (lv_isDefinition_2_0= 'definition' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2762:1: (lv_isDefinition_2_0= 'definition' )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2762:1: (lv_isDefinition_2_0= 'definition' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2763:3: lv_isDefinition_2_0= 'definition'
+        {
+        lv_isDefinition_2_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_synpred140_InternalOCLinEcore6453); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred140_InternalOCLinEcore
+
+    // $ANTLR start synpred150_InternalOCLinEcore
+    public final void synpred150_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token otherlv_18=null;
+        Token lv_isDerived_19_0=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2953:4: ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2953:4: ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2953:4: ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2954:5: {...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred150_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2954:108: ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2955:6: ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:6: ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:7: {...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred150_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:16: (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:18: otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )?
+        {
+        otherlv_18=(Token)match(input,61,FollowSets000.FOLLOW_61_in_synpred150_InternalOCLinEcore6811); if (state.failed) return ;
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:1: ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )?
+        int alt319=2;
+        int LA319_0 = input.LA(1);
+
+        if ( (LA319_0==28||LA319_0==64) ) {
+            alt319=1;
+        }
+        switch (alt319) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:2: ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )?
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:2: ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' )
+                int alt317=2;
+                int LA317_0 = input.LA(1);
+
+                if ( (LA317_0==28) ) {
+                    alt317=1;
+                }
+                else if ( (LA317_0==64) ) {
+                    alt317=2;
+                }
+                else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 317, 0, input);
+
+                    throw nvae;
+                }
+                switch (alt317) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:3: ( (lv_isDerived_19_0= 'derived' ) )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:3: ( (lv_isDerived_19_0= 'derived' ) )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2963:1: (lv_isDerived_19_0= 'derived' )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2963:1: (lv_isDerived_19_0= 'derived' )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2964:3: lv_isDerived_19_0= 'derived'
+                        {
+                        lv_isDerived_19_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_synpred150_InternalOCLinEcore6831); if (state.failed) return ;
+
+                        }
+
+
+                        }
+
+
+                        }
+                        break;
+                    case 2 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2978:7: otherlv_20= '!derived'
+                        {
+                        otherlv_20=(Token)match(input,64,FollowSets000.FOLLOW_64_in_synpred150_InternalOCLinEcore6862); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2982:2: (otherlv_21= ',' )?
+                int alt318=2;
+                int LA318_0 = input.LA(1);
+
+                if ( (LA318_0==60) ) {
+                    alt318=1;
+                }
+                switch (alt318) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2982:4: otherlv_21= ','
+                        {
+                        otherlv_21=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred150_InternalOCLinEcore6876); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred150_InternalOCLinEcore
+
+    // $ANTLR start synpred153_InternalOCLinEcore
+    public final void synpred153_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isOrdered_22_0=null;
+        Token otherlv_23=null;
+        Token otherlv_24=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2993:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2993:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2993:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2994:5: {...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred153_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2994:108: ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2995:6: ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:6: ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:7: {...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred153_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:16: ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:17: ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:17: ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' )
+        int alt320=2;
+        int LA320_0 = input.LA(1);
+
+        if ( (LA320_0==38) ) {
+            alt320=1;
+        }
+        else if ( (LA320_0==66) ) {
+            alt320=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 320, 0, input);
+
+            throw nvae;
+        }
+        switch (alt320) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:18: ( (lv_isOrdered_22_0= 'ordered' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:18: ( (lv_isOrdered_22_0= 'ordered' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2999:1: (lv_isOrdered_22_0= 'ordered' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2999:1: (lv_isOrdered_22_0= 'ordered' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3000:3: lv_isOrdered_22_0= 'ordered'
+                {
+                lv_isOrdered_22_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_synpred153_InternalOCLinEcore6955); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3014:7: otherlv_23= '!ordered'
+                {
+                otherlv_23=(Token)match(input,66,FollowSets000.FOLLOW_66_in_synpred153_InternalOCLinEcore6986); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3018:2: (otherlv_24= ',' )?
+        int alt321=2;
+        int LA321_0 = input.LA(1);
+
+        if ( (LA321_0==60) ) {
+            alt321=1;
+        }
+        switch (alt321) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3018:4: otherlv_24= ','
+                {
+                otherlv_24=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred153_InternalOCLinEcore7000); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred153_InternalOCLinEcore
+
+    // $ANTLR start synpred157_InternalOCLinEcore
+    public final void synpred157_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isNotUnique_25_0=null;
+        Token otherlv_26=null;
+        Token otherlv_27=null;
+        Token otherlv_28=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3029:4: ( ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3029:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3029:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3030:5: {...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred157_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3030:108: ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3031:6: ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:6: ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:7: {...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred157_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:16: ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:17: ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}'
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:17: ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )?
+        int alt326=2;
+        int LA326_0 = input.LA(1);
+
+        if ( (LA326_0==51||LA326_0==69) ) {
+            alt326=1;
+        }
+        switch (alt326) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:18: ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )?
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:18: ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' )
+                int alt324=2;
+                int LA324_0 = input.LA(1);
+
+                if ( (LA324_0==69) ) {
+                    alt324=1;
+                }
+                else if ( (LA324_0==51) ) {
+                    alt324=2;
+                }
+                else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 324, 0, input);
+
+                    throw nvae;
+                }
+                switch (alt324) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:19: ( (lv_isNotUnique_25_0= '!unique' ) )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:19: ( (lv_isNotUnique_25_0= '!unique' ) )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3035:1: (lv_isNotUnique_25_0= '!unique' )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3035:1: (lv_isNotUnique_25_0= '!unique' )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3036:3: lv_isNotUnique_25_0= '!unique'
+                        {
+                        lv_isNotUnique_25_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_synpred157_InternalOCLinEcore7078); if (state.failed) return ;
+
+                        }
+
+
+                        }
+
+
+                        }
+                        break;
+                    case 2 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3050:7: otherlv_26= 'unique'
+                        {
+                        otherlv_26=(Token)match(input,51,FollowSets000.FOLLOW_51_in_synpred157_InternalOCLinEcore7109); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3054:2: (otherlv_27= ',' )?
+                int alt325=2;
+                int LA325_0 = input.LA(1);
+
+                if ( (LA325_0==60) ) {
+                    alt325=1;
+                }
+                switch (alt325) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3054:4: otherlv_27= ','
+                        {
+                        otherlv_27=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred157_InternalOCLinEcore7123); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+
+                }
+                break;
+
+        }
+
+        otherlv_28=(Token)match(input,62,FollowSets000.FOLLOW_62_in_synpred157_InternalOCLinEcore7139); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred157_InternalOCLinEcore
+
+    // $ANTLR start synpred158_InternalOCLinEcore
+    public final void synpred158_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token otherlv_18=null;
+        Token lv_isDerived_19_0=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+        Token lv_isOrdered_22_0=null;
+        Token otherlv_23=null;
+        Token otherlv_24=null;
+        Token lv_isNotUnique_25_0=null;
+        Token otherlv_26=null;
+        Token otherlv_27=null;
+        Token otherlv_28=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2946:1: ( ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2946:1: ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2946:1: ( ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2947:2: ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?)
+        {
+        getUnorderedGroupHelper().enter(grammarAccess.getOperationCSAccess().getUnorderedGroup_9());
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2950:2: ( ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?)
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2951:3: ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+ {...}?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2951:3: ( ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) ) )+
+        int cnt335=0;
+        loop335:
+        do {
+            int alt335=4;
+            int LA335_0 = input.LA(1);
+
+            if ( LA335_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {
+                alt335=1;
+            }
+            else if ( LA335_0 ==38 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                alt335=2;
+            }
+            else if ( LA335_0 ==66 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+                alt335=2;
+            }
+            else if ( LA335_0 ==69 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                alt335=3;
+            }
+            else if ( LA335_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                alt335=3;
+            }
+            else if ( LA335_0 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+                alt335=3;
+            }
+
+
+            switch (alt335) {
+        	case 1 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2953:4: ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2953:4: ({...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2954:5: {...}? => ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred158_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2954:108: ( ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2955:6: ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 0);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:6: ({...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:7: {...}? => (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred158_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:16: (otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2958:18: otherlv_18= '{' ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )?
+        	    {
+        	    otherlv_18=(Token)match(input,61,FollowSets000.FOLLOW_61_in_synpred158_InternalOCLinEcore6811); if (state.failed) return ;
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:1: ( ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )? )?
+        	    int alt329=2;
+        	    int LA329_0 = input.LA(1);
+
+        	    if ( (LA329_0==28||LA329_0==64) ) {
+        	        alt329=1;
+        	    }
+        	    switch (alt329) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:2: ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' ) (otherlv_21= ',' )?
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:2: ( ( (lv_isDerived_19_0= 'derived' ) ) | otherlv_20= '!derived' )
+        	            int alt327=2;
+        	            int LA327_0 = input.LA(1);
+
+        	            if ( (LA327_0==28) ) {
+        	                alt327=1;
+        	            }
+        	            else if ( (LA327_0==64) ) {
+        	                alt327=2;
+        	            }
+        	            else {
+        	                if (state.backtracking>0) {state.failed=true; return ;}
+        	                NoViableAltException nvae =
+        	                    new NoViableAltException("", 327, 0, input);
+
+        	                throw nvae;
+        	            }
+        	            switch (alt327) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:3: ( (lv_isDerived_19_0= 'derived' ) )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2962:3: ( (lv_isDerived_19_0= 'derived' ) )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2963:1: (lv_isDerived_19_0= 'derived' )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2963:1: (lv_isDerived_19_0= 'derived' )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2964:3: lv_isDerived_19_0= 'derived'
+        	                    {
+        	                    lv_isDerived_19_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_synpred158_InternalOCLinEcore6831); if (state.failed) return ;
+
+        	                    }
+
+
+        	                    }
+
+
+        	                    }
+        	                    break;
+        	                case 2 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2978:7: otherlv_20= '!derived'
+        	                    {
+        	                    otherlv_20=(Token)match(input,64,FollowSets000.FOLLOW_64_in_synpred158_InternalOCLinEcore6862); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2982:2: (otherlv_21= ',' )?
+        	            int alt328=2;
+        	            int LA328_0 = input.LA(1);
+
+        	            if ( (LA328_0==60) ) {
+        	                alt328=1;
+        	            }
+        	            switch (alt328) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2982:4: otherlv_21= ','
+        	                    {
+        	                    otherlv_21=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred158_InternalOCLinEcore6876); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 2 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2993:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2993:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2994:5: {...}? => ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred158_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2994:108: ( ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2995:6: ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 1);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:6: ({...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:7: {...}? => ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred158_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:16: ( ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:17: ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' ) (otherlv_24= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:17: ( ( (lv_isOrdered_22_0= 'ordered' ) ) | otherlv_23= '!ordered' )
+        	    int alt330=2;
+        	    int LA330_0 = input.LA(1);
+
+        	    if ( (LA330_0==38) ) {
+        	        alt330=1;
+        	    }
+        	    else if ( (LA330_0==66) ) {
+        	        alt330=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 330, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt330) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:18: ( (lv_isOrdered_22_0= 'ordered' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2998:18: ( (lv_isOrdered_22_0= 'ordered' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2999:1: (lv_isOrdered_22_0= 'ordered' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:2999:1: (lv_isOrdered_22_0= 'ordered' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3000:3: lv_isOrdered_22_0= 'ordered'
+        	            {
+        	            lv_isOrdered_22_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_synpred158_InternalOCLinEcore6955); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3014:7: otherlv_23= '!ordered'
+        	            {
+        	            otherlv_23=(Token)match(input,66,FollowSets000.FOLLOW_66_in_synpred158_InternalOCLinEcore6986); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3018:2: (otherlv_24= ',' )?
+        	    int alt331=2;
+        	    int LA331_0 = input.LA(1);
+
+        	    if ( (LA331_0==60) ) {
+        	        alt331=1;
+        	    }
+        	    switch (alt331) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3018:4: otherlv_24= ','
+        	            {
+        	            otherlv_24=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred158_InternalOCLinEcore7000); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 3 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3029:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3029:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3030:5: {...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred158_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3030:108: ( ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3031:6: ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getOperationCSAccess().getUnorderedGroup_9(), 2);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:6: ({...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:7: {...}? => ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred158_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:16: ( ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}' )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:17: ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )? otherlv_28= '}'
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:17: ( ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )? )?
+        	    int alt334=2;
+        	    int LA334_0 = input.LA(1);
+
+        	    if ( (LA334_0==51||LA334_0==69) ) {
+        	        alt334=1;
+        	    }
+        	    switch (alt334) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:18: ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' ) (otherlv_27= ',' )?
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:18: ( ( (lv_isNotUnique_25_0= '!unique' ) ) | otherlv_26= 'unique' )
+        	            int alt332=2;
+        	            int LA332_0 = input.LA(1);
+
+        	            if ( (LA332_0==69) ) {
+        	                alt332=1;
+        	            }
+        	            else if ( (LA332_0==51) ) {
+        	                alt332=2;
+        	            }
+        	            else {
+        	                if (state.backtracking>0) {state.failed=true; return ;}
+        	                NoViableAltException nvae =
+        	                    new NoViableAltException("", 332, 0, input);
+
+        	                throw nvae;
+        	            }
+        	            switch (alt332) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:19: ( (lv_isNotUnique_25_0= '!unique' ) )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3034:19: ( (lv_isNotUnique_25_0= '!unique' ) )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3035:1: (lv_isNotUnique_25_0= '!unique' )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3035:1: (lv_isNotUnique_25_0= '!unique' )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3036:3: lv_isNotUnique_25_0= '!unique'
+        	                    {
+        	                    lv_isNotUnique_25_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_synpred158_InternalOCLinEcore7078); if (state.failed) return ;
+
+        	                    }
+
+
+        	                    }
+
+
+        	                    }
+        	                    break;
+        	                case 2 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3050:7: otherlv_26= 'unique'
+        	                    {
+        	                    otherlv_26=(Token)match(input,51,FollowSets000.FOLLOW_51_in_synpred158_InternalOCLinEcore7109); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3054:2: (otherlv_27= ',' )?
+        	            int alt333=2;
+        	            int LA333_0 = input.LA(1);
+
+        	            if ( (LA333_0==60) ) {
+        	                alt333=1;
+        	            }
+        	            switch (alt333) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3054:4: otherlv_27= ','
+        	                    {
+        	                    otherlv_27=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred158_InternalOCLinEcore7123); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    otherlv_28=(Token)match(input,62,FollowSets000.FOLLOW_62_in_synpred158_InternalOCLinEcore7139); if (state.failed) return ;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+
+        	default :
+        	    if ( cnt335 >= 1 ) break loop335;
+        	    if (state.backtracking>0) {state.failed=true; return ;}
+                    EarlyExitException eee =
+                        new EarlyExitException(335, input);
+                    throw eee;
+            }
+            cnt335++;
+        } while (true);
+
+        if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9()) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred158_InternalOCLinEcore", "getUnorderedGroupHelper().canLeave(grammarAccess.getOperationCSAccess().getUnorderedGroup_9())");
+        }
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred158_InternalOCLinEcore
+
+    // $ANTLR start synpred174_InternalOCLinEcore
+    public final void synpred174_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token otherlv_7=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3457:4: (otherlv_7= ',' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3457:4: otherlv_7= ','
+        {
+        otherlv_7=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred174_InternalOCLinEcore7963); if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred174_InternalOCLinEcore
+
+    // $ANTLR start synpred176_InternalOCLinEcore
+    public final void synpred176_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token otherlv_4=null;
+        Token lv_isOrdered_5_0=null;
+        Token otherlv_6=null;
+        Token otherlv_7=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3428:4: ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3428:4: ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3428:4: ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3429:5: {...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred176_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3429:108: ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3430:6: ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:6: ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:7: {...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred176_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:16: (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:18: otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )?
+        {
+        otherlv_4=(Token)match(input,61,FollowSets000.FOLLOW_61_in_synpred176_InternalOCLinEcore7898); if (state.failed) return ;
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:1: ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )?
+        int alt346=2;
+        int LA346_0 = input.LA(1);
+
+        if ( (LA346_0==38||LA346_0==66) ) {
+            alt346=1;
+        }
+        switch (alt346) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:2: ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )?
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:2: ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' )
+                int alt344=2;
+                int LA344_0 = input.LA(1);
+
+                if ( (LA344_0==38) ) {
+                    alt344=1;
+                }
+                else if ( (LA344_0==66) ) {
+                    alt344=2;
+                }
+                else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 344, 0, input);
+
+                    throw nvae;
+                }
+                switch (alt344) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:3: ( (lv_isOrdered_5_0= 'ordered' ) )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:3: ( (lv_isOrdered_5_0= 'ordered' ) )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:1: (lv_isOrdered_5_0= 'ordered' )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:1: (lv_isOrdered_5_0= 'ordered' )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3439:3: lv_isOrdered_5_0= 'ordered'
+                        {
+                        lv_isOrdered_5_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_synpred176_InternalOCLinEcore7918); if (state.failed) return ;
+
+                        }
+
+
+                        }
+
+
+                        }
+                        break;
+                    case 2 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3453:7: otherlv_6= '!ordered'
+                        {
+                        otherlv_6=(Token)match(input,66,FollowSets000.FOLLOW_66_in_synpred176_InternalOCLinEcore7949); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3457:2: (otherlv_7= ',' )?
+                int alt345=2;
+                int LA345_0 = input.LA(1);
+
+                if ( (LA345_0==60) ) {
+                    alt345=1;
+                }
+                switch (alt345) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3457:4: otherlv_7= ','
+                        {
+                        otherlv_7=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred176_InternalOCLinEcore7963); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred176_InternalOCLinEcore
+
+    // $ANTLR start synpred180_InternalOCLinEcore
+    public final void synpred180_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isNotUnique_8_0=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_11=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3468:4: ( ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3468:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3468:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3469:5: {...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred180_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3469:108: ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3470:6: ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:6: ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:7: {...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred180_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:16: ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:17: ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}'
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:17: ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )?
+        int alt351=2;
+        int LA351_0 = input.LA(1);
+
+        if ( (LA351_0==51||LA351_0==69) ) {
+            alt351=1;
+        }
+        switch (alt351) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:18: ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )?
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:18: ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' )
+                int alt349=2;
+                int LA349_0 = input.LA(1);
+
+                if ( (LA349_0==69) ) {
+                    alt349=1;
+                }
+                else if ( (LA349_0==51) ) {
+                    alt349=2;
+                }
+                else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 349, 0, input);
+
+                    throw nvae;
+                }
+                switch (alt349) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:19: ( (lv_isNotUnique_8_0= '!unique' ) )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:19: ( (lv_isNotUnique_8_0= '!unique' ) )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3474:1: (lv_isNotUnique_8_0= '!unique' )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3474:1: (lv_isNotUnique_8_0= '!unique' )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3475:3: lv_isNotUnique_8_0= '!unique'
+                        {
+                        lv_isNotUnique_8_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_synpred180_InternalOCLinEcore8043); if (state.failed) return ;
+
+                        }
+
+
+                        }
+
+
+                        }
+                        break;
+                    case 2 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3489:7: otherlv_9= 'unique'
+                        {
+                        otherlv_9=(Token)match(input,51,FollowSets000.FOLLOW_51_in_synpred180_InternalOCLinEcore8074); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3493:2: (otherlv_10= ',' )?
+                int alt350=2;
+                int LA350_0 = input.LA(1);
+
+                if ( (LA350_0==60) ) {
+                    alt350=1;
+                }
+                switch (alt350) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3493:4: otherlv_10= ','
+                        {
+                        otherlv_10=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred180_InternalOCLinEcore8088); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+
+                }
+                break;
+
+        }
+
+        otherlv_11=(Token)match(input,62,FollowSets000.FOLLOW_62_in_synpred180_InternalOCLinEcore8104); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred180_InternalOCLinEcore
+
+    // $ANTLR start synpred181_InternalOCLinEcore
+    public final void synpred181_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token otherlv_4=null;
+        Token lv_isOrdered_5_0=null;
+        Token otherlv_6=null;
+        Token otherlv_7=null;
+        Token lv_isNotUnique_8_0=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_11=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3421:1: ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3421:1: ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3421:1: ( ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3422:2: ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?)
+        {
+        getUnorderedGroupHelper().enter(grammarAccess.getParameterCSAccess().getUnorderedGroup_2());
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3425:2: ( ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?)
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3426:3: ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+ {...}?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3426:3: ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+
+        int cnt358=0;
+        loop358:
+        do {
+            int alt358=3;
+            int LA358_0 = input.LA(1);
+
+            if ( LA358_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {
+                alt358=1;
+            }
+            else if ( LA358_0 ==69 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {
+                alt358=2;
+            }
+            else if ( LA358_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {
+                alt358=2;
+            }
+            else if ( LA358_0 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {
+                alt358=2;
+            }
+
+
+            switch (alt358) {
+        	case 1 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3428:4: ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3428:4: ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3429:5: {...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred181_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3429:108: ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3430:6: ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:6: ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:7: {...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred181_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:16: (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3433:18: otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )?
+        	    {
+        	    otherlv_4=(Token)match(input,61,FollowSets000.FOLLOW_61_in_synpred181_InternalOCLinEcore7898); if (state.failed) return ;
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:1: ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )?
+        	    int alt354=2;
+        	    int LA354_0 = input.LA(1);
+
+        	    if ( (LA354_0==38||LA354_0==66) ) {
+        	        alt354=1;
+        	    }
+        	    switch (alt354) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:2: ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )?
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:2: ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' )
+        	            int alt352=2;
+        	            int LA352_0 = input.LA(1);
+
+        	            if ( (LA352_0==38) ) {
+        	                alt352=1;
+        	            }
+        	            else if ( (LA352_0==66) ) {
+        	                alt352=2;
+        	            }
+        	            else {
+        	                if (state.backtracking>0) {state.failed=true; return ;}
+        	                NoViableAltException nvae =
+        	                    new NoViableAltException("", 352, 0, input);
+
+        	                throw nvae;
+        	            }
+        	            switch (alt352) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:3: ( (lv_isOrdered_5_0= 'ordered' ) )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3437:3: ( (lv_isOrdered_5_0= 'ordered' ) )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:1: (lv_isOrdered_5_0= 'ordered' )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3438:1: (lv_isOrdered_5_0= 'ordered' )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3439:3: lv_isOrdered_5_0= 'ordered'
+        	                    {
+        	                    lv_isOrdered_5_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_synpred181_InternalOCLinEcore7918); if (state.failed) return ;
+
+        	                    }
+
+
+        	                    }
+
+
+        	                    }
+        	                    break;
+        	                case 2 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3453:7: otherlv_6= '!ordered'
+        	                    {
+        	                    otherlv_6=(Token)match(input,66,FollowSets000.FOLLOW_66_in_synpred181_InternalOCLinEcore7949); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3457:2: (otherlv_7= ',' )?
+        	            int alt353=2;
+        	            int LA353_0 = input.LA(1);
+
+        	            if ( (LA353_0==60) ) {
+        	                alt353=1;
+        	            }
+        	            switch (alt353) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3457:4: otherlv_7= ','
+        	                    {
+        	                    otherlv_7=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred181_InternalOCLinEcore7963); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 2 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3468:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3468:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3469:5: {...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred181_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3469:108: ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3470:6: ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:6: ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:7: {...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred181_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:16: ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:17: ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}'
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:17: ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )?
+        	    int alt357=2;
+        	    int LA357_0 = input.LA(1);
+
+        	    if ( (LA357_0==51||LA357_0==69) ) {
+        	        alt357=1;
+        	    }
+        	    switch (alt357) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:18: ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )?
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:18: ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' )
+        	            int alt355=2;
+        	            int LA355_0 = input.LA(1);
+
+        	            if ( (LA355_0==69) ) {
+        	                alt355=1;
+        	            }
+        	            else if ( (LA355_0==51) ) {
+        	                alt355=2;
+        	            }
+        	            else {
+        	                if (state.backtracking>0) {state.failed=true; return ;}
+        	                NoViableAltException nvae =
+        	                    new NoViableAltException("", 355, 0, input);
+
+        	                throw nvae;
+        	            }
+        	            switch (alt355) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:19: ( (lv_isNotUnique_8_0= '!unique' ) )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3473:19: ( (lv_isNotUnique_8_0= '!unique' ) )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3474:1: (lv_isNotUnique_8_0= '!unique' )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3474:1: (lv_isNotUnique_8_0= '!unique' )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3475:3: lv_isNotUnique_8_0= '!unique'
+        	                    {
+        	                    lv_isNotUnique_8_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_synpred181_InternalOCLinEcore8043); if (state.failed) return ;
+
+        	                    }
+
+
+        	                    }
+
+
+        	                    }
+        	                    break;
+        	                case 2 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3489:7: otherlv_9= 'unique'
+        	                    {
+        	                    otherlv_9=(Token)match(input,51,FollowSets000.FOLLOW_51_in_synpred181_InternalOCLinEcore8074); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3493:2: (otherlv_10= ',' )?
+        	            int alt356=2;
+        	            int LA356_0 = input.LA(1);
+
+        	            if ( (LA356_0==60) ) {
+        	                alt356=1;
+        	            }
+        	            switch (alt356) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3493:4: otherlv_10= ','
+        	                    {
+        	                    otherlv_10=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred181_InternalOCLinEcore8088); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    otherlv_11=(Token)match(input,62,FollowSets000.FOLLOW_62_in_synpred181_InternalOCLinEcore8104); if (state.failed) return ;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+
+        	default :
+        	    if ( cnt358 >= 1 ) break loop358;
+        	    if (state.backtracking>0) {state.failed=true; return ;}
+                    EarlyExitException eee =
+                        new EarlyExitException(358, input);
+                    throw eee;
+            }
+            cnt358++;
+        } while (true);
+
+        if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2()) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred181_InternalOCLinEcore", "getUnorderedGroupHelper().canLeave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2())");
+        }
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred181_InternalOCLinEcore
+
+    // $ANTLR start synpred184_InternalOCLinEcore
+    public final void synpred184_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isStatic_1_0=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3588:4: ( ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3588:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3588:4: ({...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3589:5: {...}? => ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred184_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3589:108: ( ({...}? => ( (lv_isStatic_1_0= 'static' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3590:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3593:6: ({...}? => ( (lv_isStatic_1_0= 'static' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3593:7: {...}? => ( (lv_isStatic_1_0= 'static' ) )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred184_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3593:16: ( (lv_isStatic_1_0= 'static' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3594:1: (lv_isStatic_1_0= 'static' )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3594:1: (lv_isStatic_1_0= 'static' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3595:3: lv_isStatic_1_0= 'static'
+        {
+        lv_isStatic_1_0=(Token)match(input,47,FollowSets000.FOLLOW_47_in_synpred184_InternalOCLinEcore8349); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred184_InternalOCLinEcore
+
+    // $ANTLR start synpred185_InternalOCLinEcore
+    public final void synpred185_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isDefinition_2_0=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3615:4: ( ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3615:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3615:4: ({...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3616:5: {...}? => ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred185_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3616:108: ( ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3617:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_0(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3620:6: ({...}? => ( (lv_isDefinition_2_0= 'definition' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3620:7: {...}? => ( (lv_isDefinition_2_0= 'definition' ) )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred185_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3620:16: ( (lv_isDefinition_2_0= 'definition' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3621:1: (lv_isDefinition_2_0= 'definition' )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3621:1: (lv_isDefinition_2_0= 'definition' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3622:3: lv_isDefinition_2_0= 'definition'
+        {
+        lv_isDefinition_2_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_synpred185_InternalOCLinEcore8434); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred185_InternalOCLinEcore
+
+    // $ANTLR start synpred192_InternalOCLinEcore
+    public final void synpred192_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token otherlv_12=null;
+        Token lv_isComposes_13_0=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3746:4: ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3746:4: ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3746:4: ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3747:5: {...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred192_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3747:108: ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3748:6: ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:6: ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:7: {...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred192_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:16: (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:18: otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )?
+        {
+        otherlv_12=(Token)match(input,61,FollowSets000.FOLLOW_61_in_synpred192_InternalOCLinEcore8693); if (state.failed) return ;
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:1: ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )?
+        int alt364=2;
+        int LA364_0 = input.LA(1);
+
+        if ( (LA364_0==24||LA364_0==78) ) {
+            alt364=1;
+        }
+        switch (alt364) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:2: ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )?
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:2: ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' )
+                int alt362=2;
+                int LA362_0 = input.LA(1);
+
+                if ( (LA362_0==24) ) {
+                    alt362=1;
+                }
+                else if ( (LA362_0==78) ) {
+                    alt362=2;
+                }
+                else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 362, 0, input);
+
+                    throw nvae;
+                }
+                switch (alt362) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:3: ( (lv_isComposes_13_0= 'composes' ) )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:3: ( (lv_isComposes_13_0= 'composes' ) )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3756:1: (lv_isComposes_13_0= 'composes' )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3756:1: (lv_isComposes_13_0= 'composes' )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3757:3: lv_isComposes_13_0= 'composes'
+                        {
+                        lv_isComposes_13_0=(Token)match(input,24,FollowSets000.FOLLOW_24_in_synpred192_InternalOCLinEcore8713); if (state.failed) return ;
+
+                        }
+
+
+                        }
+
+
+                        }
+                        break;
+                    case 2 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3771:7: otherlv_14= '!composes'
+                        {
+                        otherlv_14=(Token)match(input,78,FollowSets000.FOLLOW_78_in_synpred192_InternalOCLinEcore8744); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3775:2: (otherlv_15= ',' )?
+                int alt363=2;
+                int LA363_0 = input.LA(1);
+
+                if ( (LA363_0==60) ) {
+                    alt363=1;
+                }
+                switch (alt363) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3775:4: otherlv_15= ','
+                        {
+                        otherlv_15=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred192_InternalOCLinEcore8758); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred192_InternalOCLinEcore
+
+    // $ANTLR start synpred195_InternalOCLinEcore
+    public final void synpred195_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isDerived_16_0=null;
+        Token otherlv_17=null;
+        Token otherlv_18=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3786:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3786:4: ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3786:4: ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3787:5: {...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred195_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3787:108: ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3788:6: ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:6: ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:7: {...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred195_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:16: ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:17: ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:17: ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' )
+        int alt365=2;
+        int LA365_0 = input.LA(1);
+
+        if ( (LA365_0==28) ) {
+            alt365=1;
+        }
+        else if ( (LA365_0==64) ) {
+            alt365=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 365, 0, input);
+
+            throw nvae;
+        }
+        switch (alt365) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:18: ( (lv_isDerived_16_0= 'derived' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:18: ( (lv_isDerived_16_0= 'derived' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3792:1: (lv_isDerived_16_0= 'derived' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3792:1: (lv_isDerived_16_0= 'derived' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3793:3: lv_isDerived_16_0= 'derived'
+                {
+                lv_isDerived_16_0=(Token)match(input,28,FollowSets000.FOLLOW_28_in_synpred195_InternalOCLinEcore8837); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3807:7: otherlv_17= '!derived'
+                {
+                otherlv_17=(Token)match(input,64,FollowSets000.FOLLOW_64_in_synpred195_InternalOCLinEcore8868); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3811:2: (otherlv_18= ',' )?
+        int alt366=2;
+        int LA366_0 = input.LA(1);
+
+        if ( (LA366_0==60) ) {
+            alt366=1;
+        }
+        switch (alt366) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3811:4: otherlv_18= ','
+                {
+                otherlv_18=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred195_InternalOCLinEcore8882); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred195_InternalOCLinEcore
+
+    // $ANTLR start synpred198_InternalOCLinEcore
+    public final void synpred198_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isOrdered_19_0=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3822:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3822:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3822:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3823:5: {...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred198_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3823:108: ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3824:6: ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:6: ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:7: {...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred198_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:16: ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:17: ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:17: ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' )
+        int alt367=2;
+        int LA367_0 = input.LA(1);
+
+        if ( (LA367_0==38) ) {
+            alt367=1;
+        }
+        else if ( (LA367_0==66) ) {
+            alt367=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 367, 0, input);
+
+            throw nvae;
+        }
+        switch (alt367) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:18: ( (lv_isOrdered_19_0= 'ordered' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:18: ( (lv_isOrdered_19_0= 'ordered' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3828:1: (lv_isOrdered_19_0= 'ordered' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3828:1: (lv_isOrdered_19_0= 'ordered' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3829:3: lv_isOrdered_19_0= 'ordered'
+                {
+                lv_isOrdered_19_0=(Token)match(input,38,FollowSets000.FOLLOW_38_in_synpred198_InternalOCLinEcore8959); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3843:7: otherlv_20= '!ordered'
+                {
+                otherlv_20=(Token)match(input,66,FollowSets000.FOLLOW_66_in_synpred198_InternalOCLinEcore8990); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3847:2: (otherlv_21= ',' )?
+        int alt368=2;
+        int LA368_0 = input.LA(1);
+
+        if ( (LA368_0==60) ) {
+            alt368=1;
+        }
+        switch (alt368) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3847:4: otherlv_21= ','
+                {
+                otherlv_21=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred198_InternalOCLinEcore9004); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred198_InternalOCLinEcore
+
+    // $ANTLR start synpred201_InternalOCLinEcore
+    public final void synpred201_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isReadonly_22_0=null;
+        Token otherlv_23=null;
+        Token otherlv_24=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3858:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3858:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3858:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3859:5: {...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred201_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3859:108: ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3860:6: ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:6: ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:7: {...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred201_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:16: ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:17: ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:17: ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' )
+        int alt369=2;
+        int LA369_0 = input.LA(1);
+
+        if ( (LA369_0==44) ) {
+            alt369=1;
+        }
+        else if ( (LA369_0==67) ) {
+            alt369=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 369, 0, input);
+
+            throw nvae;
+        }
+        switch (alt369) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:18: ( (lv_isReadonly_22_0= 'readonly' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:18: ( (lv_isReadonly_22_0= 'readonly' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3864:1: (lv_isReadonly_22_0= 'readonly' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3864:1: (lv_isReadonly_22_0= 'readonly' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3865:3: lv_isReadonly_22_0= 'readonly'
+                {
+                lv_isReadonly_22_0=(Token)match(input,44,FollowSets000.FOLLOW_44_in_synpred201_InternalOCLinEcore9081); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3879:7: otherlv_23= '!readonly'
+                {
+                otherlv_23=(Token)match(input,67,FollowSets000.FOLLOW_67_in_synpred201_InternalOCLinEcore9112); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3883:2: (otherlv_24= ',' )?
+        int alt370=2;
+        int LA370_0 = input.LA(1);
+
+        if ( (LA370_0==60) ) {
+            alt370=1;
+        }
+        switch (alt370) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3883:4: otherlv_24= ','
+                {
+                otherlv_24=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred201_InternalOCLinEcore9126); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred201_InternalOCLinEcore
+
+    // $ANTLR start synpred204_InternalOCLinEcore
+    public final void synpred204_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isResolve_25_0=null;
+        Token otherlv_26=null;
+        Token otherlv_27=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3894:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3894:4: ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3894:4: ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3895:5: {...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred204_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3895:108: ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3896:6: ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:6: ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:7: {...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred204_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:16: ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:17: ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:17: ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' )
+        int alt371=2;
+        int LA371_0 = input.LA(1);
+
+        if ( (LA371_0==46) ) {
+            alt371=1;
+        }
+        else if ( (LA371_0==79) ) {
+            alt371=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 371, 0, input);
+
+            throw nvae;
+        }
+        switch (alt371) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:18: ( (lv_isResolve_25_0= 'resolve' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:18: ( (lv_isResolve_25_0= 'resolve' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3900:1: (lv_isResolve_25_0= 'resolve' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3900:1: (lv_isResolve_25_0= 'resolve' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3901:3: lv_isResolve_25_0= 'resolve'
+                {
+                lv_isResolve_25_0=(Token)match(input,46,FollowSets000.FOLLOW_46_in_synpred204_InternalOCLinEcore9203); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3915:7: otherlv_26= '!resolve'
+                {
+                otherlv_26=(Token)match(input,79,FollowSets000.FOLLOW_79_in_synpred204_InternalOCLinEcore9234); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3919:2: (otherlv_27= ',' )?
+        int alt372=2;
+        int LA372_0 = input.LA(1);
+
+        if ( (LA372_0==60) ) {
+            alt372=1;
+        }
+        switch (alt372) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3919:4: otherlv_27= ','
+                {
+                otherlv_27=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred204_InternalOCLinEcore9248); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred204_InternalOCLinEcore
+
+    // $ANTLR start synpred207_InternalOCLinEcore
+    public final void synpred207_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isTransient_28_0=null;
+        Token otherlv_29=null;
+        Token otherlv_30=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3930:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3930:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3930:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3931:5: {...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred207_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3931:108: ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3932:6: ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:6: ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:7: {...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred207_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:16: ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:17: ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:17: ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' )
+        int alt373=2;
+        int LA373_0 = input.LA(1);
+
+        if ( (LA373_0==50) ) {
+            alt373=1;
+        }
+        else if ( (LA373_0==68) ) {
+            alt373=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 373, 0, input);
+
+            throw nvae;
+        }
+        switch (alt373) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:18: ( (lv_isTransient_28_0= 'transient' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:18: ( (lv_isTransient_28_0= 'transient' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3936:1: (lv_isTransient_28_0= 'transient' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3936:1: (lv_isTransient_28_0= 'transient' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3937:3: lv_isTransient_28_0= 'transient'
+                {
+                lv_isTransient_28_0=(Token)match(input,50,FollowSets000.FOLLOW_50_in_synpred207_InternalOCLinEcore9325); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3951:7: otherlv_29= '!transient'
+                {
+                otherlv_29=(Token)match(input,68,FollowSets000.FOLLOW_68_in_synpred207_InternalOCLinEcore9356); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3955:2: (otherlv_30= ',' )?
+        int alt374=2;
+        int LA374_0 = input.LA(1);
+
+        if ( (LA374_0==60) ) {
+            alt374=1;
+        }
+        switch (alt374) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3955:4: otherlv_30= ','
+                {
+                otherlv_30=(Token)match(input,60,FollowSets000.FOLLOW_60_in_synpred207_InternalOCLinEcore9370); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred207_InternalOCLinEcore
+
+    // $ANTLR start synpred210_InternalOCLinEcore
+    public final void synpred210_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isNotUnique_31_0=null;
+        Token otherlv_32=null;
+        Token otherlv_33=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3966:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3966:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3966:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3967:5: {...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred210_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3967:108: ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3968:6: ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:6: ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:7: {...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred210_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:16: ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:17: ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:17: ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' )
+        int alt375=2;
+        int LA375_0 = input.LA(1);
+
+        if ( (LA375_0==69) ) {
+            alt375=1;
+        }
+        else if ( (LA375_0==51) ) {
+            alt375=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 375, 0, input);
+
+            throw nvae;
+        }
+        switch (alt375) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:18: ( (lv_isNotUnique_31_0= '!unique' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:18: ( (lv_isNotUnique_31_0= '!unique' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3972:1: (lv_isNotUnique_31_0= '!unique' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3972:1: (lv_isNotUnique_31_0= '!unique' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3973:3: lv_isNotUnique_31_0= '!unique'
+                {
+                lv_isNotUnique_31_0=(Token)match(input,69,FollowSets000.FOLLOW_69_in_synpred210_InternalOCLinEcore9447); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3987:7: otherlv_32= 'unique'
+                {
+                otherlv_32=(Token)match(input,51,FollowSets000.FOLLOW_51_in_synpred210_InternalOCLinEcore9478); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3991:2: (otherlv_33= ',' )?
+        int alt376=2;
+        int LA376_0 = input.LA(1);
+
+        if ( (LA376_0==60) ) {
+            alt376=1;
+        }
+        switch (alt376) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3991:4: otherlv_33= ','
+                {
+                otherlv_33=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred210_InternalOCLinEcore9492); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred210_InternalOCLinEcore
+
+    // $ANTLR start synpred213_InternalOCLinEcore
+    public final void synpred213_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isUnsettable_34_0=null;
+        Token otherlv_35=null;
+        Token otherlv_36=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4002:4: ( ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4002:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4002:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4003:5: {...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred213_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4003:108: ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4004:6: ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:6: ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:7: {...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred213_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:16: ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:17: ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:17: ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' )
+        int alt377=2;
+        int LA377_0 = input.LA(1);
+
+        if ( (LA377_0==52) ) {
+            alt377=1;
+        }
+        else if ( (LA377_0==70) ) {
+            alt377=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 377, 0, input);
+
+            throw nvae;
+        }
+        switch (alt377) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:18: ( (lv_isUnsettable_34_0= 'unsettable' ) )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:18: ( (lv_isUnsettable_34_0= 'unsettable' ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4008:1: (lv_isUnsettable_34_0= 'unsettable' )
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4008:1: (lv_isUnsettable_34_0= 'unsettable' )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4009:3: lv_isUnsettable_34_0= 'unsettable'
+                {
+                lv_isUnsettable_34_0=(Token)match(input,52,FollowSets001.FOLLOW_52_in_synpred213_InternalOCLinEcore9569); if (state.failed) return ;
+
+                }
+
+
+                }
+
+
+                }
+                break;
+            case 2 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4023:7: otherlv_35= '!unsettable'
+                {
+                otherlv_35=(Token)match(input,70,FollowSets001.FOLLOW_70_in_synpred213_InternalOCLinEcore9600); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4027:2: (otherlv_36= ',' )?
+        int alt378=2;
+        int LA378_0 = input.LA(1);
+
+        if ( (LA378_0==60) ) {
+            alt378=1;
+        }
+        switch (alt378) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4027:4: otherlv_36= ','
+                {
+                otherlv_36=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred213_InternalOCLinEcore9614); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred213_InternalOCLinEcore
+
+    // $ANTLR start synpred217_InternalOCLinEcore
+    public final void synpred217_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token lv_isVolatile_37_0=null;
+        Token otherlv_38=null;
+        Token otherlv_39=null;
+        Token otherlv_40=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4038:4: ( ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4038:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4038:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4039:5: {...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) )
+        {
+        if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred217_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8)");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4039:108: ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4040:6: ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) )
+        {
+        getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:6: ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:7: {...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' )
+        {
+        if ( !((true)) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred217_InternalOCLinEcore", "true");
+        }
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:16: ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:17: ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}'
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:17: ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )?
+        int alt383=2;
+        int LA383_0 = input.LA(1);
+
+        if ( (LA383_0==53||LA383_0==71) ) {
+            alt383=1;
+        }
+        switch (alt383) {
+            case 1 :
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:18: ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )?
+                {
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:18: ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' )
+                int alt381=2;
+                int LA381_0 = input.LA(1);
+
+                if ( (LA381_0==53) ) {
+                    alt381=1;
+                }
+                else if ( (LA381_0==71) ) {
+                    alt381=2;
+                }
+                else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 381, 0, input);
+
+                    throw nvae;
+                }
+                switch (alt381) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:19: ( (lv_isVolatile_37_0= 'volatile' ) )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:19: ( (lv_isVolatile_37_0= 'volatile' ) )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4044:1: (lv_isVolatile_37_0= 'volatile' )
+                        {
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4044:1: (lv_isVolatile_37_0= 'volatile' )
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4045:3: lv_isVolatile_37_0= 'volatile'
+                        {
+                        lv_isVolatile_37_0=(Token)match(input,53,FollowSets001.FOLLOW_53_in_synpred217_InternalOCLinEcore9692); if (state.failed) return ;
+
+                        }
+
+
+                        }
+
+
+                        }
+                        break;
+                    case 2 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4059:7: otherlv_38= '!volatile'
+                        {
+                        otherlv_38=(Token)match(input,71,FollowSets001.FOLLOW_71_in_synpred217_InternalOCLinEcore9723); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4063:2: (otherlv_39= ',' )?
+                int alt382=2;
+                int LA382_0 = input.LA(1);
+
+                if ( (LA382_0==60) ) {
+                    alt382=1;
+                }
+                switch (alt382) {
+                    case 1 :
+                        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4063:4: otherlv_39= ','
+                        {
+                        otherlv_39=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred217_InternalOCLinEcore9737); if (state.failed) return ;
+
+                        }
+                        break;
+
+                }
+
+
+                }
+                break;
+
+        }
+
+        otherlv_40=(Token)match(input,62,FollowSets001.FOLLOW_62_in_synpred217_InternalOCLinEcore9753); if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred217_InternalOCLinEcore
+
+    // $ANTLR start synpred218_InternalOCLinEcore
+    public final void synpred218_InternalOCLinEcore_fragment() throws RecognitionException {   
+        Token otherlv_12=null;
+        Token lv_isComposes_13_0=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        Token lv_isDerived_16_0=null;
+        Token otherlv_17=null;
+        Token otherlv_18=null;
+        Token lv_isOrdered_19_0=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+        Token lv_isReadonly_22_0=null;
+        Token otherlv_23=null;
+        Token otherlv_24=null;
+        Token lv_isResolve_25_0=null;
+        Token otherlv_26=null;
+        Token otherlv_27=null;
+        Token lv_isTransient_28_0=null;
+        Token otherlv_29=null;
+        Token otherlv_30=null;
+        Token lv_isNotUnique_31_0=null;
+        Token otherlv_32=null;
+        Token otherlv_33=null;
+        Token lv_isUnsettable_34_0=null;
+        Token otherlv_35=null;
+        Token otherlv_36=null;
+        Token lv_isVolatile_37_0=null;
+        Token otherlv_38=null;
+        Token otherlv_39=null;
+        Token otherlv_40=null;
+
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3739:1: ( ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3739:1: ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) )
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3739:1: ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3740:2: ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?)
+        {
+        getUnorderedGroupHelper().enter(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6());
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3743:2: ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?)
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3744:3: ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?
+        {
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3744:3: ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+
+        int cnt404=0;
+        loop404:
+        do {
+            int alt404=10;
+            alt404 = dfa404.predict(input);
+            switch (alt404) {
+        	case 1 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3746:4: ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3746:4: ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3747:5: {...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3747:108: ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3748:6: ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:6: ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:7: {...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:16: (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3751:18: otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )?
+        	    {
+        	    otherlv_12=(Token)match(input,61,FollowSets001.FOLLOW_61_in_synpred218_InternalOCLinEcore8693); if (state.failed) return ;
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:1: ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )?
+        	    int alt386=2;
+        	    alt386 = dfa386.predict(input);
+        	    switch (alt386) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:2: ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )?
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:2: ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' )
+        	            int alt384=2;
+        	            int LA384_0 = input.LA(1);
+
+        	            if ( (LA384_0==24) ) {
+        	                alt384=1;
+        	            }
+        	            else if ( (LA384_0==78) ) {
+        	                alt384=2;
+        	            }
+        	            else {
+        	                if (state.backtracking>0) {state.failed=true; return ;}
+        	                NoViableAltException nvae =
+        	                    new NoViableAltException("", 384, 0, input);
+
+        	                throw nvae;
+        	            }
+        	            switch (alt384) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:3: ( (lv_isComposes_13_0= 'composes' ) )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3755:3: ( (lv_isComposes_13_0= 'composes' ) )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3756:1: (lv_isComposes_13_0= 'composes' )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3756:1: (lv_isComposes_13_0= 'composes' )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3757:3: lv_isComposes_13_0= 'composes'
+        	                    {
+        	                    lv_isComposes_13_0=(Token)match(input,24,FollowSets001.FOLLOW_24_in_synpred218_InternalOCLinEcore8713); if (state.failed) return ;
+
+        	                    }
+
+
+        	                    }
+
+
+        	                    }
+        	                    break;
+        	                case 2 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3771:7: otherlv_14= '!composes'
+        	                    {
+        	                    otherlv_14=(Token)match(input,78,FollowSets001.FOLLOW_78_in_synpred218_InternalOCLinEcore8744); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3775:2: (otherlv_15= ',' )?
+        	            int alt385=2;
+        	            alt385 = dfa385.predict(input);
+        	            switch (alt385) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3775:4: otherlv_15= ','
+        	                    {
+        	                    otherlv_15=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred218_InternalOCLinEcore8758); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 2 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3786:4: ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3786:4: ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3787:5: {...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3787:108: ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3788:6: ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:6: ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:7: {...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:16: ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:17: ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:17: ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' )
+        	    int alt387=2;
+        	    int LA387_0 = input.LA(1);
+
+        	    if ( (LA387_0==28) ) {
+        	        alt387=1;
+        	    }
+        	    else if ( (LA387_0==64) ) {
+        	        alt387=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 387, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt387) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:18: ( (lv_isDerived_16_0= 'derived' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3791:18: ( (lv_isDerived_16_0= 'derived' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3792:1: (lv_isDerived_16_0= 'derived' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3792:1: (lv_isDerived_16_0= 'derived' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3793:3: lv_isDerived_16_0= 'derived'
+        	            {
+        	            lv_isDerived_16_0=(Token)match(input,28,FollowSets001.FOLLOW_28_in_synpred218_InternalOCLinEcore8837); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3807:7: otherlv_17= '!derived'
+        	            {
+        	            otherlv_17=(Token)match(input,64,FollowSets001.FOLLOW_64_in_synpred218_InternalOCLinEcore8868); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3811:2: (otherlv_18= ',' )?
+        	    int alt388=2;
+        	    alt388 = dfa388.predict(input);
+        	    switch (alt388) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3811:4: otherlv_18= ','
+        	            {
+        	            otherlv_18=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred218_InternalOCLinEcore8882); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 3 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3822:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3822:4: ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3823:5: {...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3823:108: ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3824:6: ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:6: ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:7: {...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:16: ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:17: ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:17: ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' )
+        	    int alt389=2;
+        	    int LA389_0 = input.LA(1);
+
+        	    if ( (LA389_0==38) ) {
+        	        alt389=1;
+        	    }
+        	    else if ( (LA389_0==66) ) {
+        	        alt389=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 389, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt389) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:18: ( (lv_isOrdered_19_0= 'ordered' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3827:18: ( (lv_isOrdered_19_0= 'ordered' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3828:1: (lv_isOrdered_19_0= 'ordered' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3828:1: (lv_isOrdered_19_0= 'ordered' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3829:3: lv_isOrdered_19_0= 'ordered'
+        	            {
+        	            lv_isOrdered_19_0=(Token)match(input,38,FollowSets001.FOLLOW_38_in_synpred218_InternalOCLinEcore8959); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3843:7: otherlv_20= '!ordered'
+        	            {
+        	            otherlv_20=(Token)match(input,66,FollowSets001.FOLLOW_66_in_synpred218_InternalOCLinEcore8990); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3847:2: (otherlv_21= ',' )?
+        	    int alt390=2;
+        	    alt390 = dfa390.predict(input);
+        	    switch (alt390) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3847:4: otherlv_21= ','
+        	            {
+        	            otherlv_21=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred218_InternalOCLinEcore9004); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 4 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3858:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3858:4: ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3859:5: {...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3859:108: ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3860:6: ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:6: ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:7: {...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:16: ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:17: ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:17: ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' )
+        	    int alt391=2;
+        	    int LA391_0 = input.LA(1);
+
+        	    if ( (LA391_0==44) ) {
+        	        alt391=1;
+        	    }
+        	    else if ( (LA391_0==67) ) {
+        	        alt391=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 391, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt391) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:18: ( (lv_isReadonly_22_0= 'readonly' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3863:18: ( (lv_isReadonly_22_0= 'readonly' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3864:1: (lv_isReadonly_22_0= 'readonly' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3864:1: (lv_isReadonly_22_0= 'readonly' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3865:3: lv_isReadonly_22_0= 'readonly'
+        	            {
+        	            lv_isReadonly_22_0=(Token)match(input,44,FollowSets001.FOLLOW_44_in_synpred218_InternalOCLinEcore9081); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3879:7: otherlv_23= '!readonly'
+        	            {
+        	            otherlv_23=(Token)match(input,67,FollowSets001.FOLLOW_67_in_synpred218_InternalOCLinEcore9112); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3883:2: (otherlv_24= ',' )?
+        	    int alt392=2;
+        	    alt392 = dfa392.predict(input);
+        	    switch (alt392) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3883:4: otherlv_24= ','
+        	            {
+        	            otherlv_24=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred218_InternalOCLinEcore9126); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 5 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3894:4: ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3894:4: ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3895:5: {...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3895:108: ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3896:6: ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:6: ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:7: {...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:16: ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:17: ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:17: ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' )
+        	    int alt393=2;
+        	    int LA393_0 = input.LA(1);
+
+        	    if ( (LA393_0==46) ) {
+        	        alt393=1;
+        	    }
+        	    else if ( (LA393_0==79) ) {
+        	        alt393=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 393, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt393) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:18: ( (lv_isResolve_25_0= 'resolve' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3899:18: ( (lv_isResolve_25_0= 'resolve' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3900:1: (lv_isResolve_25_0= 'resolve' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3900:1: (lv_isResolve_25_0= 'resolve' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3901:3: lv_isResolve_25_0= 'resolve'
+        	            {
+        	            lv_isResolve_25_0=(Token)match(input,46,FollowSets001.FOLLOW_46_in_synpred218_InternalOCLinEcore9203); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3915:7: otherlv_26= '!resolve'
+        	            {
+        	            otherlv_26=(Token)match(input,79,FollowSets001.FOLLOW_79_in_synpred218_InternalOCLinEcore9234); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3919:2: (otherlv_27= ',' )?
+        	    int alt394=2;
+        	    alt394 = dfa394.predict(input);
+        	    switch (alt394) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3919:4: otherlv_27= ','
+        	            {
+        	            otherlv_27=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred218_InternalOCLinEcore9248); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 6 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3930:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3930:4: ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3931:5: {...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3931:108: ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3932:6: ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:6: ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:7: {...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:16: ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:17: ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:17: ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' )
+        	    int alt395=2;
+        	    int LA395_0 = input.LA(1);
+
+        	    if ( (LA395_0==50) ) {
+        	        alt395=1;
+        	    }
+        	    else if ( (LA395_0==68) ) {
+        	        alt395=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 395, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt395) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:18: ( (lv_isTransient_28_0= 'transient' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3935:18: ( (lv_isTransient_28_0= 'transient' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3936:1: (lv_isTransient_28_0= 'transient' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3936:1: (lv_isTransient_28_0= 'transient' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3937:3: lv_isTransient_28_0= 'transient'
+        	            {
+        	            lv_isTransient_28_0=(Token)match(input,50,FollowSets001.FOLLOW_50_in_synpred218_InternalOCLinEcore9325); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3951:7: otherlv_29= '!transient'
+        	            {
+        	            otherlv_29=(Token)match(input,68,FollowSets001.FOLLOW_68_in_synpred218_InternalOCLinEcore9356); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3955:2: (otherlv_30= ',' )?
+        	    int alt396=2;
+        	    alt396 = dfa396.predict(input);
+        	    switch (alt396) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3955:4: otherlv_30= ','
+        	            {
+        	            otherlv_30=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred218_InternalOCLinEcore9370); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 7 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3966:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3966:4: ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3967:5: {...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3967:108: ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3968:6: ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:6: ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:7: {...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:16: ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:17: ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:17: ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' )
+        	    int alt397=2;
+        	    int LA397_0 = input.LA(1);
+
+        	    if ( (LA397_0==69) ) {
+        	        alt397=1;
+        	    }
+        	    else if ( (LA397_0==51) ) {
+        	        alt397=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 397, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt397) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:18: ( (lv_isNotUnique_31_0= '!unique' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3971:18: ( (lv_isNotUnique_31_0= '!unique' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3972:1: (lv_isNotUnique_31_0= '!unique' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3972:1: (lv_isNotUnique_31_0= '!unique' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3973:3: lv_isNotUnique_31_0= '!unique'
+        	            {
+        	            lv_isNotUnique_31_0=(Token)match(input,69,FollowSets001.FOLLOW_69_in_synpred218_InternalOCLinEcore9447); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3987:7: otherlv_32= 'unique'
+        	            {
+        	            otherlv_32=(Token)match(input,51,FollowSets001.FOLLOW_51_in_synpred218_InternalOCLinEcore9478); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3991:2: (otherlv_33= ',' )?
+        	    int alt398=2;
+        	    alt398 = dfa398.predict(input);
+        	    switch (alt398) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:3991:4: otherlv_33= ','
+        	            {
+        	            otherlv_33=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred218_InternalOCLinEcore9492); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 8 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4002:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4002:4: ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4003:5: {...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4003:108: ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4004:6: ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:6: ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:7: {...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:16: ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:17: ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )?
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:17: ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' )
+        	    int alt399=2;
+        	    int LA399_0 = input.LA(1);
+
+        	    if ( (LA399_0==52) ) {
+        	        alt399=1;
+        	    }
+        	    else if ( (LA399_0==70) ) {
+        	        alt399=2;
+        	    }
+        	    else {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        NoViableAltException nvae =
+        	            new NoViableAltException("", 399, 0, input);
+
+        	        throw nvae;
+        	    }
+        	    switch (alt399) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:18: ( (lv_isUnsettable_34_0= 'unsettable' ) )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4007:18: ( (lv_isUnsettable_34_0= 'unsettable' ) )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4008:1: (lv_isUnsettable_34_0= 'unsettable' )
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4008:1: (lv_isUnsettable_34_0= 'unsettable' )
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4009:3: lv_isUnsettable_34_0= 'unsettable'
+        	            {
+        	            lv_isUnsettable_34_0=(Token)match(input,52,FollowSets001.FOLLOW_52_in_synpred218_InternalOCLinEcore9569); if (state.failed) return ;
+
+        	            }
+
+
+        	            }
+
+
+        	            }
+        	            break;
+        	        case 2 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4023:7: otherlv_35= '!unsettable'
+        	            {
+        	            otherlv_35=(Token)match(input,70,FollowSets001.FOLLOW_70_in_synpred218_InternalOCLinEcore9600); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4027:2: (otherlv_36= ',' )?
+        	    int alt400=2;
+        	    alt400 = dfa400.predict(input);
+        	    switch (alt400) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4027:4: otherlv_36= ','
+        	            {
+        	            otherlv_36=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred218_InternalOCLinEcore9614); if (state.failed) return ;
+
+        	            }
+        	            break;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+        	case 9 :
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4038:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) )
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4038:4: ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4039:5: {...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) )
+        	    {
+        	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8)");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4039:108: ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4040:6: ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) )
+        	    {
+        	    getUnorderedGroupHelper().select(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8);
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:6: ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:7: {...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' )
+        	    {
+        	    if ( !((true)) ) {
+        	        if (state.backtracking>0) {state.failed=true; return ;}
+        	        throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "true");
+        	    }
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:16: ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' )
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:17: ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}'
+        	    {
+        	    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:17: ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )?
+        	    int alt403=2;
+        	    int LA403_0 = input.LA(1);
+
+        	    if ( (LA403_0==53||LA403_0==71) ) {
+        	        alt403=1;
+        	    }
+        	    switch (alt403) {
+        	        case 1 :
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:18: ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )?
+        	            {
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:18: ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' )
+        	            int alt401=2;
+        	            int LA401_0 = input.LA(1);
+
+        	            if ( (LA401_0==53) ) {
+        	                alt401=1;
+        	            }
+        	            else if ( (LA401_0==71) ) {
+        	                alt401=2;
+        	            }
+        	            else {
+        	                if (state.backtracking>0) {state.failed=true; return ;}
+        	                NoViableAltException nvae =
+        	                    new NoViableAltException("", 401, 0, input);
+
+        	                throw nvae;
+        	            }
+        	            switch (alt401) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:19: ( (lv_isVolatile_37_0= 'volatile' ) )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4043:19: ( (lv_isVolatile_37_0= 'volatile' ) )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4044:1: (lv_isVolatile_37_0= 'volatile' )
+        	                    {
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4044:1: (lv_isVolatile_37_0= 'volatile' )
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4045:3: lv_isVolatile_37_0= 'volatile'
+        	                    {
+        	                    lv_isVolatile_37_0=(Token)match(input,53,FollowSets001.FOLLOW_53_in_synpred218_InternalOCLinEcore9692); if (state.failed) return ;
+
+        	                    }
+
+
+        	                    }
+
+
+        	                    }
+        	                    break;
+        	                case 2 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4059:7: otherlv_38= '!volatile'
+        	                    {
+        	                    otherlv_38=(Token)match(input,71,FollowSets001.FOLLOW_71_in_synpred218_InternalOCLinEcore9723); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+        	            // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4063:2: (otherlv_39= ',' )?
+        	            int alt402=2;
+        	            int LA402_0 = input.LA(1);
+
+        	            if ( (LA402_0==60) ) {
+        	                alt402=1;
+        	            }
+        	            switch (alt402) {
+        	                case 1 :
+        	                    // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:4063:4: otherlv_39= ','
+        	                    {
+        	                    otherlv_39=(Token)match(input,60,FollowSets001.FOLLOW_60_in_synpred218_InternalOCLinEcore9737); if (state.failed) return ;
+
+        	                    }
+        	                    break;
+
+        	            }
+
+
+        	            }
+        	            break;
+
+        	    }
+
+        	    otherlv_40=(Token)match(input,62,FollowSets001.FOLLOW_62_in_synpred218_InternalOCLinEcore9753); if (state.failed) return ;
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+
+
+        	    }
+        	    break;
+
+        	default :
+        	    if ( cnt404 >= 1 ) break loop404;
+        	    if (state.backtracking>0) {state.failed=true; return ;}
+                    EarlyExitException eee =
+                        new EarlyExitException(404, input);
+                    throw eee;
+            }
+            cnt404++;
+        } while (true);
+
+        if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            throw new FailedPredicateException(input, "synpred218_InternalOCLinEcore", "getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6())");
+        }
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred218_InternalOCLinEcore
+
+    // $ANTLR start synpred320_InternalOCLinEcore
+    public final void synpred320_InternalOCLinEcore_fragment() throws RecognitionException {   
         EObject this_TypeLiteralCS_1 = null;
 
 
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7071:2: (this_TypeLiteralCS_1= ruleTypeLiteralCS )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7071:2: this_TypeLiteralCS_1= ruleTypeLiteralCS
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7305:2: (this_TypeLiteralCS_1= ruleTypeLiteralCS )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7305:2: this_TypeLiteralCS_1= ruleTypeLiteralCS
         {
         if ( state.backtracking==0 ) {
            
           	  /* */ 
           	
         }
-        pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralCS_in_synpred300_InternalOCLinEcore16034);
+        pushFollow(FollowSets001.FOLLOW_ruleTypeLiteralCS_in_synpred320_InternalOCLinEcore17440);
         this_TypeLiteralCS_1=ruleTypeLiteralCS();
 
         state._fsp--;
@@ -28416,10 +35210,10 @@
 
         }
     }
-    // $ANTLR end synpred300_InternalOCLinEcore
+    // $ANTLR end synpred320_InternalOCLinEcore
 
-    // $ANTLR start synpred303_InternalOCLinEcore
-    public final void synpred303_InternalOCLinEcore_fragment() throws RecognitionException {   
+    // $ANTLR start synpred323_InternalOCLinEcore
+    public final void synpred323_InternalOCLinEcore_fragment() throws RecognitionException {   
         EObject this_PrefixedPrimaryExpCS_0 = null;
 
         AntlrDatatypeRuleToken lv_name_2_0 = null;
@@ -28427,35 +35221,35 @@
         EObject lv_ownedRight_3_0 = null;
 
 
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7134:2: ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7134:2: (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7368:2: ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7368:2: (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? )
         {
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7134:2: (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7135:2: this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )?
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7368:2: (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7369:2: this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )?
         {
         if ( state.backtracking==0 ) {
            
           	  /* */ 
           	
         }
-        pushFollow(FollowSets000.FOLLOW_rulePrefixedPrimaryExpCS_in_synpred303_InternalOCLinEcore16183);
+        pushFollow(FollowSets001.FOLLOW_rulePrefixedPrimaryExpCS_in_synpred323_InternalOCLinEcore17589);
         this_PrefixedPrimaryExpCS_0=rulePrefixedPrimaryExpCS();
 
         state._fsp--;
         if (state.failed) return ;
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7146:1: ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )?
-        int alt292=2;
-        int LA292_0 = input.LA(1);
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7380:1: ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )?
+        int alt428=2;
+        int LA428_0 = input.LA(1);
 
-        if ( (LA292_0==18||LA292_0==63||(LA292_0>=81 && LA292_0<=82)||(LA292_0>=84 && LA292_0<=97)) ) {
-            alt292=1;
+        if ( (LA428_0==18||LA428_0==63||(LA428_0>=81 && LA428_0<=82)||(LA428_0>=84 && LA428_0<=97)) ) {
+            alt428=1;
         }
-        switch (alt292) {
+        switch (alt428) {
             case 1 :
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7146:2: () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7380:2: () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) )
                 {
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7146:2: ()
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7147:2: 
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7380:2: ()
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7381:2: 
                 {
                 if ( state.backtracking==0 ) {
                    
@@ -28465,18 +35259,18 @@
 
                 }
 
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7155:2: ( (lv_name_2_0= ruleBinaryOperatorName ) )
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7156:1: (lv_name_2_0= ruleBinaryOperatorName )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7389:2: ( (lv_name_2_0= ruleBinaryOperatorName ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7390:1: (lv_name_2_0= ruleBinaryOperatorName )
                 {
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7156:1: (lv_name_2_0= ruleBinaryOperatorName )
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7157:3: lv_name_2_0= ruleBinaryOperatorName
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7390:1: (lv_name_2_0= ruleBinaryOperatorName )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7391:3: lv_name_2_0= ruleBinaryOperatorName
                 {
                 if ( state.backtracking==0 ) {
                    
                   	        newCompositeNode(grammarAccess.getExpCSAccess().getNameBinaryOperatorNameParserRuleCall_0_1_1_0()); 
                   	    
                 }
-                pushFollow(FollowSets000.FOLLOW_ruleBinaryOperatorName_in_synpred303_InternalOCLinEcore16216);
+                pushFollow(FollowSets001.FOLLOW_ruleBinaryOperatorName_in_synpred323_InternalOCLinEcore17622);
                 lv_name_2_0=ruleBinaryOperatorName();
 
                 state._fsp--;
@@ -28487,18 +35281,18 @@
 
                 }
 
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7173:2: ( (lv_ownedRight_3_0= ruleExpCS ) )
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7174:1: (lv_ownedRight_3_0= ruleExpCS )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7407:2: ( (lv_ownedRight_3_0= ruleExpCS ) )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7408:1: (lv_ownedRight_3_0= ruleExpCS )
                 {
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7174:1: (lv_ownedRight_3_0= ruleExpCS )
-                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7175:3: lv_ownedRight_3_0= ruleExpCS
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7408:1: (lv_ownedRight_3_0= ruleExpCS )
+                // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7409:3: lv_ownedRight_3_0= ruleExpCS
                 {
                 if ( state.backtracking==0 ) {
                    
                   	        newCompositeNode(grammarAccess.getExpCSAccess().getOwnedRightExpCSParserRuleCall_0_1_2_0()); 
                   	    
                 }
-                pushFollow(FollowSets000.FOLLOW_ruleExpCS_in_synpred303_InternalOCLinEcore16237);
+                pushFollow(FollowSets001.FOLLOW_ruleExpCS_in_synpred323_InternalOCLinEcore17643);
                 lv_ownedRight_3_0=ruleExpCS();
 
                 state._fsp--;
@@ -28521,22 +35315,22 @@
 
         }
     }
-    // $ANTLR end synpred303_InternalOCLinEcore
+    // $ANTLR end synpred323_InternalOCLinEcore
 
-    // $ANTLR start synpred310_InternalOCLinEcore
-    public final void synpred310_InternalOCLinEcore_fragment() throws RecognitionException {   
+    // $ANTLR start synpred330_InternalOCLinEcore
+    public final void synpred330_InternalOCLinEcore_fragment() throws RecognitionException {   
         EObject this_TupleLiteralExpCS_4 = null;
 
 
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7436:2: (this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7436:2: this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7670:2: (this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7670:2: this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS
         {
         if ( state.backtracking==0 ) {
            
           	  /* */ 
           	
         }
-        pushFollow(FollowSets000.FOLLOW_ruleTupleLiteralExpCS_in_synpred310_InternalOCLinEcore16800);
+        pushFollow(FollowSets001.FOLLOW_ruleTupleLiteralExpCS_in_synpred330_InternalOCLinEcore18206);
         this_TupleLiteralExpCS_4=ruleTupleLiteralExpCS();
 
         state._fsp--;
@@ -28544,22 +35338,22 @@
 
         }
     }
-    // $ANTLR end synpred310_InternalOCLinEcore
+    // $ANTLR end synpred330_InternalOCLinEcore
 
-    // $ANTLR start synpred311_InternalOCLinEcore
-    public final void synpred311_InternalOCLinEcore_fragment() throws RecognitionException {   
+    // $ANTLR start synpred331_InternalOCLinEcore
+    public final void synpred331_InternalOCLinEcore_fragment() throws RecognitionException {   
         EObject this_CollectionLiteralExpCS_5 = null;
 
 
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7449:2: (this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7449:2: this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7683:2: (this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7683:2: this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS
         {
         if ( state.backtracking==0 ) {
            
           	  /* */ 
           	
         }
-        pushFollow(FollowSets000.FOLLOW_ruleCollectionLiteralExpCS_in_synpred311_InternalOCLinEcore16830);
+        pushFollow(FollowSets001.FOLLOW_ruleCollectionLiteralExpCS_in_synpred331_InternalOCLinEcore18236);
         this_CollectionLiteralExpCS_5=ruleCollectionLiteralExpCS();
 
         state._fsp--;
@@ -28567,22 +35361,22 @@
 
         }
     }
-    // $ANTLR end synpred311_InternalOCLinEcore
+    // $ANTLR end synpred331_InternalOCLinEcore
 
-    // $ANTLR start synpred313_InternalOCLinEcore
-    public final void synpred313_InternalOCLinEcore_fragment() throws RecognitionException {   
+    // $ANTLR start synpred333_InternalOCLinEcore
+    public final void synpred333_InternalOCLinEcore_fragment() throws RecognitionException {   
         EObject this_TypeLiteralExpCS_7 = null;
 
 
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7475:2: (this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS )
-        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7475:2: this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7709:2: (this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS )
+        // ../../plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/parser/antlr/internal/InternalOCLinEcore.g:7709:2: this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS
         {
         if ( state.backtracking==0 ) {
            
           	  /* */ 
           	
         }
-        pushFollow(FollowSets000.FOLLOW_ruleTypeLiteralExpCS_in_synpred313_InternalOCLinEcore16890);
+        pushFollow(FollowSets001.FOLLOW_ruleTypeLiteralExpCS_in_synpred333_InternalOCLinEcore18296);
         this_TypeLiteralExpCS_7=ruleTypeLiteralExpCS();
 
         state._fsp--;
@@ -28590,15 +35384,15 @@
 
         }
     }
-    // $ANTLR end synpred313_InternalOCLinEcore
+    // $ANTLR end synpred333_InternalOCLinEcore
 
     // Delegated rules
 
-    public final boolean synpred311_InternalOCLinEcore() {
+    public final boolean synpred184_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred311_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred184_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -28608,11 +35402,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred313_InternalOCLinEcore() {
+    public final boolean synpred331_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred313_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred331_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -28622,11 +35416,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred310_InternalOCLinEcore() {
+    public final boolean synpred158_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred310_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred158_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -28636,11 +35430,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred303_InternalOCLinEcore() {
+    public final boolean synpred210_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred303_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred210_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -28650,11 +35444,473 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred300_InternalOCLinEcore() {
+    public final boolean synpred192_InternalOCLinEcore() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred300_InternalOCLinEcore_fragment(); // can never throw exception
+            synpred192_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred323_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred323_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred64_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred64_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred176_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred176_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred157_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred157_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred76_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred76_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred207_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred207_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred330_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred330_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred82_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred82_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred198_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred198_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred153_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred153_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred185_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred185_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred217_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred217_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred79_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred79_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred180_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred180_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred70_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred70_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred320_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred320_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred333_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred333_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred139_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred139_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred174_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred174_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred218_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred218_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred201_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred201_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred204_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred204_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred140_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred140_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred85_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred85_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred150_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred150_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred181_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred181_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred63_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred63_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred195_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred195_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred92_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred92_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred88_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred88_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred73_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred73_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred213_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred213_InternalOCLinEcore_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+    public final boolean synpred93_InternalOCLinEcore() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred93_InternalOCLinEcore_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -28666,28 +35922,286 @@
     }
 
 
-    protected DFA64 dfa64 = new DFA64(this);
-    protected DFA67 dfa67 = new DFA67(this);
-    protected DFA121 dfa121 = new DFA121(this);
-    protected DFA151 dfa151 = new DFA151(this);
-    protected DFA154 dfa154 = new DFA154(this);
-    protected DFA165 dfa165 = new DFA165(this);
-    protected DFA168 dfa168 = new DFA168(this);
-    protected DFA171 dfa171 = new DFA171(this);
-    protected DFA195 dfa195 = new DFA195(this);
-    static final String DFA64_eotS =
+    protected DFA47 dfa47 = new DFA47(this);
+    protected DFA46 dfa46 = new DFA46(this);
+    protected DFA78 dfa78 = new DFA78(this);
+    protected DFA81 dfa81 = new DFA81(this);
+    protected DFA114 dfa114 = new DFA114(this);
+    protected DFA143 dfa143 = new DFA143(this);
+    protected DFA142 dfa142 = new DFA142(this);
+    protected DFA159 dfa159 = new DFA159(this);
+    protected DFA161 dfa161 = new DFA161(this);
+    protected DFA189 dfa189 = new DFA189(this);
+    protected DFA192 dfa192 = new DFA192(this);
+    protected DFA203 dfa203 = new DFA203(this);
+    protected DFA206 dfa206 = new DFA206(this);
+    protected DFA209 dfa209 = new DFA209(this);
+    protected DFA233 dfa233 = new DFA233(this);
+    protected DFA296 dfa296 = new DFA296(this);
+    protected DFA280 dfa280 = new DFA280(this);
+    protected DFA279 dfa279 = new DFA279(this);
+    protected DFA282 dfa282 = new DFA282(this);
+    protected DFA284 dfa284 = new DFA284(this);
+    protected DFA286 dfa286 = new DFA286(this);
+    protected DFA288 dfa288 = new DFA288(this);
+    protected DFA290 dfa290 = new DFA290(this);
+    protected DFA292 dfa292 = new DFA292(this);
+    protected DFA404 dfa404 = new DFA404(this);
+    protected DFA386 dfa386 = new DFA386(this);
+    protected DFA385 dfa385 = new DFA385(this);
+    protected DFA388 dfa388 = new DFA388(this);
+    protected DFA390 dfa390 = new DFA390(this);
+    protected DFA392 dfa392 = new DFA392(this);
+    protected DFA394 dfa394 = new DFA394(this);
+    protected DFA396 dfa396 = new DFA396(this);
+    protected DFA398 dfa398 = new DFA398(this);
+    protected DFA400 dfa400 = new DFA400(this);
+    static final String DFA47_eotS =
+        "\22\uffff";
+    static final String DFA47_eofS =
+        "\22\uffff";
+    static final String DFA47_minS =
+        "\1\37\1\0\20\uffff";
+    static final String DFA47_maxS =
+        "\1\107\1\0\20\uffff";
+    static final String DFA47_acceptS =
+        "\2\uffff\1\1\16\uffff\1\2";
+    static final String DFA47_specialS =
+        "\1\uffff\1\0\20\uffff}>";
+    static final String[] DFA47_transitionS = {
+            "\1\2\6\uffff\1\2\5\uffff\1\2\5\uffff\4\2\4\uffff\1\21\2\uffff"+
+            "\1\1\1\2\2\uffff\7\2",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA47_eot = DFA.unpackEncodedString(DFA47_eotS);
+    static final short[] DFA47_eof = DFA.unpackEncodedString(DFA47_eofS);
+    static final char[] DFA47_min = DFA.unpackEncodedStringToUnsignedChars(DFA47_minS);
+    static final char[] DFA47_max = DFA.unpackEncodedStringToUnsignedChars(DFA47_maxS);
+    static final short[] DFA47_accept = DFA.unpackEncodedString(DFA47_acceptS);
+    static final short[] DFA47_special = DFA.unpackEncodedString(DFA47_specialS);
+    static final short[][] DFA47_transition;
+
+    static {
+        int numStates = DFA47_transitionS.length;
+        DFA47_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA47_transition[i] = DFA.unpackEncodedString(DFA47_transitionS[i]);
+        }
+    }
+
+    class DFA47 extends DFA {
+
+        public DFA47(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 47;
+            this.eot = DFA47_eot;
+            this.eof = DFA47_eof;
+            this.min = DFA47_min;
+            this.max = DFA47_max;
+            this.accept = DFA47_accept;
+            this.special = DFA47_special;
+            this.transition = DFA47_transition;
+        }
+        public String getDescription() {
+            return "1239:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+ {...}?) ) )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA47_1 = input.LA(1);
+
+                         
+                        int index47_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred93_InternalOCLinEcore()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 17;}
+
+                         
+                        input.seek(index47_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 47, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA46_eotS =
+        "\23\uffff";
+    static final String DFA46_eofS =
+        "\23\uffff";
+    static final String DFA46_minS =
+        "\1\37\1\0\21\uffff";
+    static final String DFA46_maxS =
+        "\1\107\1\0\21\uffff";
+    static final String DFA46_acceptS =
+        "\2\uffff\1\11\2\2\2\3\2\4\2\5\2\6\2\7\3\10\1\1";
+    static final String DFA46_specialS =
+        "\1\0\1\1\21\uffff}>";
+    static final String[] DFA46_transitionS = {
+            "\1\3\6\uffff\1\5\5\uffff\1\7\5\uffff\1\11\1\14\1\15\1\17\4"+
+            "\uffff\1\2\2\uffff\1\1\1\21\2\uffff\1\4\1\6\1\10\1\12\1\13\1"+
+            "\16\1\20",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA46_eot = DFA.unpackEncodedString(DFA46_eotS);
+    static final short[] DFA46_eof = DFA.unpackEncodedString(DFA46_eofS);
+    static final char[] DFA46_min = DFA.unpackEncodedStringToUnsignedChars(DFA46_minS);
+    static final char[] DFA46_max = DFA.unpackEncodedStringToUnsignedChars(DFA46_maxS);
+    static final short[] DFA46_accept = DFA.unpackEncodedString(DFA46_acceptS);
+    static final short[] DFA46_special = DFA.unpackEncodedString(DFA46_specialS);
+    static final short[][] DFA46_transition;
+
+    static {
+        int numStates = DFA46_transitionS.length;
+        DFA46_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA46_transition[i] = DFA.unpackEncodedString(DFA46_transitionS[i]);
+        }
+    }
+
+    class DFA46 extends DFA {
+
+        public DFA46(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 46;
+            this.eot = DFA46_eot;
+            this.eof = DFA46_eof;
+            this.min = DFA46_min;
+            this.max = DFA46_max;
+            this.accept = DFA46_accept;
+            this.special = DFA46_special;
+            this.transition = DFA46_transition;
+        }
+        public String getDescription() {
+            return "()+ loopback of 1246:3: ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA46_0 = input.LA(1);
+
+                         
+                        int index46_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA46_0==61) ) {s = 1;}
+
+                        else if ( (LA46_0==58) ) {s = 2;}
+
+                        else if ( LA46_0 ==31 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA46_0 ==65 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( LA46_0 ==38 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA46_0 ==66 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 6;}
+
+                        else if ( LA46_0 ==44 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA46_0 ==67 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 8;}
+
+                        else if ( LA46_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA46_0 ==68 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 10;}
+
+                        else if ( LA46_0 ==69 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA46_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 12;}
+
+                        else if ( LA46_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA46_0 ==70 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 14;}
+
+                        else if ( LA46_0 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA46_0 ==71 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( LA46_0 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 17;}
+
+                         
+                        input.seek(index46_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA46_1 = input.LA(1);
+
+                         
+                        int index46_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred70_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 18;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5()) ) {s = 2;}
+
+                         
+                        input.seek(index46_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 46, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA78_eotS =
         "\57\uffff";
-    static final String DFA64_eofS =
+    static final String DFA78_eofS =
         "\57\uffff";
-    static final String DFA64_minS =
+    static final String DFA78_minS =
         "\1\5\54\71\2\uffff";
-    static final String DFA64_maxS =
+    static final String DFA78_maxS =
         "\1\120\54\143\2\uffff";
-    static final String DFA64_acceptS =
+    static final String DFA78_acceptS =
         "\55\uffff\1\2\1\1";
-    static final String DFA64_specialS =
+    static final String DFA78_specialS =
         "\57\uffff}>";
-    static final String[] DFA64_transitionS = {
+    static final String[] DFA78_transitionS = {
             "\1\55\2\uffff\1\1\1\2\7\uffff\1\25\1\uffff\1\3\1\4\1\5\1\6"+
             "\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22"+
             "\1\23\1\24\1\26\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37"+
@@ -28741,54 +36255,54 @@
             ""
     };
 
-    static final short[] DFA64_eot = DFA.unpackEncodedString(DFA64_eotS);
-    static final short[] DFA64_eof = DFA.unpackEncodedString(DFA64_eofS);
-    static final char[] DFA64_min = DFA.unpackEncodedStringToUnsignedChars(DFA64_minS);
-    static final char[] DFA64_max = DFA.unpackEncodedStringToUnsignedChars(DFA64_maxS);
-    static final short[] DFA64_accept = DFA.unpackEncodedString(DFA64_acceptS);
-    static final short[] DFA64_special = DFA.unpackEncodedString(DFA64_specialS);
-    static final short[][] DFA64_transition;
+    static final short[] DFA78_eot = DFA.unpackEncodedString(DFA78_eotS);
+    static final short[] DFA78_eof = DFA.unpackEncodedString(DFA78_eofS);
+    static final char[] DFA78_min = DFA.unpackEncodedStringToUnsignedChars(DFA78_minS);
+    static final char[] DFA78_max = DFA.unpackEncodedStringToUnsignedChars(DFA78_maxS);
+    static final short[] DFA78_accept = DFA.unpackEncodedString(DFA78_acceptS);
+    static final short[] DFA78_special = DFA.unpackEncodedString(DFA78_specialS);
+    static final short[][] DFA78_transition;
 
     static {
-        int numStates = DFA64_transitionS.length;
-        DFA64_transition = new short[numStates][];
+        int numStates = DFA78_transitionS.length;
+        DFA78_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA64_transition[i] = DFA.unpackEncodedString(DFA64_transitionS[i]);
+            DFA78_transition[i] = DFA.unpackEncodedString(DFA78_transitionS[i]);
         }
     }
 
-    class DFA64 extends DFA {
+    class DFA78 extends DFA {
 
-        public DFA64(BaseRecognizer recognizer) {
+        public DFA78(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 64;
-            this.eot = DFA64_eot;
-            this.eof = DFA64_eof;
-            this.min = DFA64_min;
-            this.max = DFA64_max;
-            this.accept = DFA64_accept;
-            this.special = DFA64_special;
-            this.transition = DFA64_transition;
+            this.decisionNumber = 78;
+            this.eot = DFA78_eot;
+            this.eof = DFA78_eof;
+            this.min = DFA78_min;
+            this.max = DFA78_max;
+            this.accept = DFA78_accept;
+            this.special = DFA78_special;
+            this.transition = DFA78_transition;
         }
         public String getDescription() {
-            return "2354:1: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )?";
+            return "2426:1: ( ( (lv_name_1_0= ruleUnrestrictedName ) ) otherlv_2= ':' )?";
         }
     }
-    static final String DFA67_eotS =
+    static final String DFA81_eotS =
         "\23\uffff";
-    static final String DFA67_eofS =
+    static final String DFA81_eofS =
         "\23\uffff";
-    static final String DFA67_minS =
-        "\1\10\1\27\1\10\1\31\2\10\1\uffff\1\10\1\24\3\10\1\24\2\uffff\1"+
-        "\24\2\uffff\1\24";
-    static final String DFA67_maxS =
+    static final String DFA81_minS =
+        "\1\10\1\27\1\10\1\31\2\10\1\uffff\1\10\1\24\3\10\1\24\2\uffff\2"+
+        "\24\2\uffff";
+    static final String DFA81_maxS =
         "\1\113\1\77\1\120\1\77\2\120\1\uffff\1\120\1\77\1\121\2\120\1\77"+
-        "\2\uffff\1\53\2\uffff\1\53";
-    static final String DFA67_acceptS =
-        "\6\uffff\1\2\6\uffff\1\1\1\5\1\uffff\1\3\1\4\1\uffff";
-    static final String DFA67_specialS =
+        "\2\uffff\2\57\2\uffff";
+    static final String DFA81_acceptS =
+        "\6\uffff\1\2\6\uffff\1\1\1\5\2\uffff\1\3\1\4";
+    static final String DFA81_specialS =
         "\23\uffff}>";
-    static final String[] DFA67_transitionS = {
+    static final String[] DFA81_transitionS = {
             "\2\6\7\uffff\1\6\1\uffff\1\1\1\7\2\6\1\2\1\6\1\4\1\10\2\6\1"+
             "\5\7\6\1\11\1\6\1\12\2\6\1\3\1\13\3\6\1\14\6\6\25\uffff\1\6",
             "\1\15\42\uffff\1\6\2\uffff\1\6\1\uffff\1\6",
@@ -28802,130 +36316,564 @@
             "",
             "\2\16\7\uffff\1\16\1\uffff\44\16\3\uffff\1\6\1\16\1\uffff"+
             "\1\6\1\uffff\1\6\10\uffff\1\16\1\uffff\2\16\4\uffff\1\16",
-            "\1\16\20\uffff\1\20\5\uffff\1\16\3\uffff\1\17\12\uffff\1\6"+
-            "\2\uffff\1\6\1\uffff\1\6",
-            "\2\20\7\uffff\1\20\1\uffff\45\20\2\uffff\1\6\1\20\1\uffff"+
-            "\1\6\1\uffff\1\6\10\uffff\1\20\1\uffff\2\20\4\uffff\2\20",
-            "\2\21\7\uffff\1\21\1\uffff\44\21\3\uffff\1\6\1\21\1\uffff"+
-            "\1\6\1\uffff\1\6\10\uffff\1\21\1\uffff\2\21\4\uffff\1\21",
+            "\1\16\5\uffff\1\20\12\uffff\1\21\5\uffff\1\16\3\uffff\1\17"+
+            "\12\uffff\1\6\2\uffff\1\6\1\uffff\1\6",
+            "\2\21\7\uffff\1\21\1\uffff\45\21\2\uffff\1\6\1\21\1\uffff"+
+            "\1\6\1\uffff\1\6\10\uffff\1\21\1\uffff\2\21\4\uffff\2\21",
+            "\2\22\7\uffff\1\22\1\uffff\44\22\3\uffff\1\6\1\22\1\uffff"+
+            "\1\6\1\uffff\1\6\10\uffff\1\22\1\uffff\2\22\4\uffff\1\22",
             "\2\16\7\uffff\1\16\1\uffff\44\16\3\uffff\1\6\1\16\1\uffff"+
             "\1\6\1\uffff\1\6\10\uffff\1\16\1\uffff\2\16\4\uffff\1\16",
-            "\1\16\5\uffff\1\22\12\uffff\1\20\5\uffff\1\16\16\uffff\1\6"+
-            "\2\uffff\1\6\1\uffff\1\6",
+            "\1\16\5\uffff\1\20\12\uffff\1\21\5\uffff\1\16\3\uffff\1\17"+
+            "\12\uffff\1\6\2\uffff\1\6\1\uffff\1\6",
             "",
             "",
-            "\1\16\20\uffff\1\20\5\uffff\1\16",
+            "\1\16\5\uffff\1\20\12\uffff\1\21\5\uffff\1\16\3\uffff\1\17",
+            "\1\16\5\uffff\1\20\12\uffff\1\21\5\uffff\1\16\3\uffff\1\17",
             "",
-            "",
-            "\1\16\20\uffff\1\20\5\uffff\1\16"
+            ""
     };
 
-    static final short[] DFA67_eot = DFA.unpackEncodedString(DFA67_eotS);
-    static final short[] DFA67_eof = DFA.unpackEncodedString(DFA67_eofS);
-    static final char[] DFA67_min = DFA.unpackEncodedStringToUnsignedChars(DFA67_minS);
-    static final char[] DFA67_max = DFA.unpackEncodedStringToUnsignedChars(DFA67_maxS);
-    static final short[] DFA67_accept = DFA.unpackEncodedString(DFA67_acceptS);
-    static final short[] DFA67_special = DFA.unpackEncodedString(DFA67_specialS);
-    static final short[][] DFA67_transition;
+    static final short[] DFA81_eot = DFA.unpackEncodedString(DFA81_eotS);
+    static final short[] DFA81_eof = DFA.unpackEncodedString(DFA81_eofS);
+    static final char[] DFA81_min = DFA.unpackEncodedStringToUnsignedChars(DFA81_minS);
+    static final char[] DFA81_max = DFA.unpackEncodedStringToUnsignedChars(DFA81_maxS);
+    static final short[] DFA81_accept = DFA.unpackEncodedString(DFA81_acceptS);
+    static final short[] DFA81_special = DFA.unpackEncodedString(DFA81_specialS);
+    static final short[][] DFA81_transition;
 
     static {
-        int numStates = DFA67_transitionS.length;
-        DFA67_transition = new short[numStates][];
+        int numStates = DFA81_transitionS.length;
+        DFA81_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA67_transition[i] = DFA.unpackEncodedString(DFA67_transitionS[i]);
+            DFA81_transition[i] = DFA.unpackEncodedString(DFA81_transitionS[i]);
         }
     }
 
-    class DFA67 extends DFA {
+    class DFA81 extends DFA {
 
-        public DFA67(BaseRecognizer recognizer) {
+        public DFA81(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 67;
-            this.eot = DFA67_eot;
-            this.eof = DFA67_eof;
-            this.min = DFA67_min;
-            this.max = DFA67_max;
-            this.accept = DFA67_accept;
-            this.special = DFA67_special;
-            this.transition = DFA67_transition;
+            this.decisionNumber = 81;
+            this.eot = DFA81_eot;
+            this.eof = DFA81_eof;
+            this.min = DFA81_min;
+            this.max = DFA81_max;
+            this.accept = DFA81_accept;
+            this.special = DFA81_special;
+            this.transition = DFA81_transition;
         }
         public String getDescription() {
-            return "2503:1: (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS )";
+            return "2575:1: (this_ClassCS_0= ruleClassCS | this_EnumerationLiteralCS_1= ruleEnumerationLiteralCS | this_OperationCS_2= ruleOperationCS | this_PackageCS_3= rulePackageCS | this_StructuralFeatureCS_4= ruleStructuralFeatureCS )";
         }
     }
-    static final String DFA121_eotS =
-        "\12\uffff";
-    static final String DFA121_eofS =
-        "\12\uffff";
-    static final String DFA121_minS =
-        "\1\24\2\uffff\2\24\3\uffff\2\24";
-    static final String DFA121_maxS =
-        "\1\120\2\uffff\1\53\1\57\3\uffff\2\53";
-    static final String DFA121_acceptS =
-        "\1\uffff\1\5\1\1\2\uffff\1\2\1\3\1\4\2\uffff";
-    static final String DFA121_specialS =
-        "\12\uffff}>";
-    static final String[] DFA121_transitionS = {
+    static final String DFA114_eotS =
+        "\17\uffff";
+    static final String DFA114_eofS =
+        "\1\2\1\14\15\uffff";
+    static final String DFA114_minS =
+        "\1\63\1\46\4\uffff\1\0\10\uffff";
+    static final String DFA114_maxS =
+        "\1\105\1\120\4\uffff\1\0\10\uffff";
+    static final String DFA114_acceptS =
+        "\2\uffff\1\3\3\2\1\uffff\10\1";
+    static final String DFA114_specialS =
+        "\1\0\1\2\4\uffff\1\1\10\uffff}>";
+    static final String[] DFA114_transitionS = {
+            "\1\4\4\uffff\1\2\3\uffff\1\2\1\1\1\5\6\uffff\1\3",
+            "\1\7\14\uffff\1\16\4\uffff\1\13\2\uffff\1\2\1\12\1\11\1\6"+
+            "\3\uffff\1\10\2\uffff\1\15\4\uffff\1\2\5\uffff\1\2",
+            "",
+            "",
+            "",
+            "",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA114_eot = DFA.unpackEncodedString(DFA114_eotS);
+    static final short[] DFA114_eof = DFA.unpackEncodedString(DFA114_eofS);
+    static final char[] DFA114_min = DFA.unpackEncodedStringToUnsignedChars(DFA114_minS);
+    static final char[] DFA114_max = DFA.unpackEncodedStringToUnsignedChars(DFA114_maxS);
+    static final short[] DFA114_accept = DFA.unpackEncodedString(DFA114_acceptS);
+    static final short[] DFA114_special = DFA.unpackEncodedString(DFA114_specialS);
+    static final short[][] DFA114_transition;
+
+    static {
+        int numStates = DFA114_transitionS.length;
+        DFA114_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA114_transition[i] = DFA.unpackEncodedString(DFA114_transitionS[i]);
+        }
+    }
+
+    class DFA114 extends DFA {
+
+        public DFA114(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 114;
+            this.eot = DFA114_eot;
+            this.eof = DFA114_eof;
+            this.min = DFA114_min;
+            this.max = DFA114_max;
+            this.accept = DFA114_accept;
+            this.special = DFA114_special;
+            this.transition = DFA114_transition;
+        }
+        public String getDescription() {
+            return "()+ loopback of 3426:3: ( ({...}? => ( ({...}? => (otherlv_4= '{' ( ( ( (lv_isOrdered_5_0= 'ordered' ) ) | otherlv_6= '!ordered' ) (otherlv_7= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isNotUnique_8_0= '!unique' ) ) | otherlv_9= 'unique' ) (otherlv_10= ',' )? )? otherlv_11= '}' ) ) ) ) )+";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA114_0 = input.LA(1);
+
+                         
+                        int index114_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA114_0==61) ) {s = 1;}
+
+                        else if ( (LA114_0==EOF||LA114_0==56||LA114_0==60) ) {s = 2;}
+
+                        else if ( LA114_0 ==69 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {s = 3;}
+
+                        else if ( LA114_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {s = 4;}
+
+                        else if ( LA114_0 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 1) ) {s = 5;}
+
+                         
+                        input.seek(index114_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA114_6 = input.LA(1);
+
+                         
+                        int index114_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred176_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 14;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getParameterCSAccess().getUnorderedGroup_2()) ) {s = 2;}
+
+                         
+                        input.seek(index114_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA114_1 = input.LA(1);
+
+                         
+                        int index114_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA114_1==59||LA114_1==74||LA114_1==80) ) {s = 2;}
+
+                        else if ( (LA114_1==62) ) {s = 6;}
+
+                        else if ( LA114_1 ==38 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 7;}
+
+                        else if ( LA114_1 ==66 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 8;}
+
+                        else if ( LA114_1 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 9;}
+
+                        else if ( LA114_1 ==60 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 10;}
+
+                        else if ( LA114_1 ==56 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 11;}
+
+                        else if ( LA114_1 ==EOF && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 12;}
+
+                        else if ( LA114_1 ==69 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 13;}
+
+                        else if ( LA114_1 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getParameterCSAccess().getUnorderedGroup_2(), 0) ) {s = 14;}
+
+                         
+                        input.seek(index114_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 114, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA143_eotS =
+        "\24\uffff";
+    static final String DFA143_eofS =
+        "\24\uffff";
+    static final String DFA143_minS =
+        "\1\34\1\0\22\uffff";
+    static final String DFA143_maxS =
+        "\1\117\1\0\22\uffff";
+    static final String DFA143_acceptS =
+        "\2\uffff\1\1\20\uffff\1\2";
+    static final String DFA143_specialS =
+        "\1\uffff\1\0\22\uffff}>";
+    static final String[] DFA143_transitionS = {
+            "\1\2\11\uffff\1\2\5\uffff\1\2\1\uffff\1\2\3\uffff\4\2\4\uffff"+
+            "\1\23\2\uffff\1\1\1\2\1\uffff\1\2\1\uffff\6\2\7\uffff\1\2",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA143_eot = DFA.unpackEncodedString(DFA143_eotS);
+    static final short[] DFA143_eof = DFA.unpackEncodedString(DFA143_eofS);
+    static final char[] DFA143_min = DFA.unpackEncodedStringToUnsignedChars(DFA143_minS);
+    static final char[] DFA143_max = DFA.unpackEncodedStringToUnsignedChars(DFA143_maxS);
+    static final short[] DFA143_accept = DFA.unpackEncodedString(DFA143_acceptS);
+    static final short[] DFA143_special = DFA.unpackEncodedString(DFA143_specialS);
+    static final short[][] DFA143_transition;
+
+    static {
+        int numStates = DFA143_transitionS.length;
+        DFA143_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA143_transition[i] = DFA.unpackEncodedString(DFA143_transitionS[i]);
+        }
+    }
+
+    class DFA143 extends DFA {
+
+        public DFA143(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 143;
+            this.eot = DFA143_eot;
+            this.eof = DFA143_eof;
+            this.min = DFA143_min;
+            this.max = DFA143_max;
+            this.accept = DFA143_accept;
+            this.special = DFA143_special;
+            this.transition = DFA143_transition;
+        }
+        public String getDescription() {
+            return "3737:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+ {...}?) ) )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA143_1 = input.LA(1);
+
+                         
+                        int index143_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred218_InternalOCLinEcore()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 19;}
+
+                         
+                        input.seek(index143_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 143, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA142_eotS =
+        "\25\uffff";
+    static final String DFA142_eofS =
+        "\25\uffff";
+    static final String DFA142_minS =
+        "\1\34\1\0\23\uffff";
+    static final String DFA142_maxS =
+        "\1\117\1\0\23\uffff";
+    static final String DFA142_acceptS =
+        "\2\uffff\1\12\2\2\2\3\2\4\2\5\2\6\2\7\2\10\3\11\1\1";
+    static final String DFA142_specialS =
+        "\1\0\1\1\23\uffff}>";
+    static final String[] DFA142_transitionS = {
+            "\1\3\11\uffff\1\5\5\uffff\1\7\1\uffff\1\11\3\uffff\1\13\1\16"+
+            "\1\17\1\21\4\uffff\1\2\2\uffff\1\1\1\23\1\uffff\1\4\1\uffff"+
+            "\1\6\1\10\1\14\1\15\1\20\1\22\7\uffff\1\12",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA142_eot = DFA.unpackEncodedString(DFA142_eotS);
+    static final short[] DFA142_eof = DFA.unpackEncodedString(DFA142_eofS);
+    static final char[] DFA142_min = DFA.unpackEncodedStringToUnsignedChars(DFA142_minS);
+    static final char[] DFA142_max = DFA.unpackEncodedStringToUnsignedChars(DFA142_maxS);
+    static final short[] DFA142_accept = DFA.unpackEncodedString(DFA142_acceptS);
+    static final short[] DFA142_special = DFA.unpackEncodedString(DFA142_specialS);
+    static final short[][] DFA142_transition;
+
+    static {
+        int numStates = DFA142_transitionS.length;
+        DFA142_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA142_transition[i] = DFA.unpackEncodedString(DFA142_transitionS[i]);
+        }
+    }
+
+    class DFA142 extends DFA {
+
+        public DFA142(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 142;
+            this.eot = DFA142_eot;
+            this.eof = DFA142_eof;
+            this.min = DFA142_min;
+            this.max = DFA142_max;
+            this.accept = DFA142_accept;
+            this.special = DFA142_special;
+            this.transition = DFA142_transition;
+        }
+        public String getDescription() {
+            return "()+ loopback of 3744:3: ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA142_0 = input.LA(1);
+
+                         
+                        int index142_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA142_0==61) ) {s = 1;}
+
+                        else if ( (LA142_0==58) ) {s = 2;}
+
+                        else if ( LA142_0 ==28 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA142_0 ==64 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( LA142_0 ==38 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA142_0 ==66 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 6;}
+
+                        else if ( LA142_0 ==44 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA142_0 ==67 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 8;}
+
+                        else if ( LA142_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA142_0 ==79 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 10;}
+
+                        else if ( LA142_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA142_0 ==68 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 12;}
+
+                        else if ( LA142_0 ==69 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA142_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 14;}
+
+                        else if ( LA142_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA142_0 ==70 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 16;}
+
+                        else if ( LA142_0 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA142_0 ==71 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( LA142_0 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 19;}
+
+                         
+                        input.seek(index142_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA142_1 = input.LA(1);
+
+                         
+                        int index142_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( synpred192_InternalOCLinEcore() && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 20;}
+
+                        else if ( getUnorderedGroupHelper().canLeave(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6()) ) {s = 2;}
+
+                         
+                        input.seek(index142_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 142, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA159_eotS =
+        "\10\uffff";
+    static final String DFA159_eofS =
+        "\10\uffff";
+    static final String DFA159_minS =
+        "\1\24\2\uffff\2\24\3\uffff";
+    static final String DFA159_maxS =
+        "\1\120\2\uffff\2\57\3\uffff";
+    static final String DFA159_acceptS =
+        "\1\uffff\1\5\1\1\2\uffff\1\2\1\3\1\4";
+    static final String DFA159_specialS =
+        "\10\uffff}>";
+    static final String[] DFA159_transitionS = {
             "\1\6\1\uffff\1\7\3\uffff\1\4\12\uffff\1\5\5\uffff\1\6\3\uffff"+
             "\1\3\6\uffff\1\7\4\uffff\1\2\2\uffff\1\1\13\uffff\1\2\5\uffff"+
             "\1\2",
             "",
             "",
-            "\1\6\5\uffff\1\10\12\uffff\1\5\5\uffff\1\6",
-            "\1\6\20\uffff\1\5\5\uffff\1\6\3\uffff\1\11",
+            "\1\6\5\uffff\1\4\12\uffff\1\5\5\uffff\1\6\3\uffff\1\3",
+            "\1\6\5\uffff\1\4\12\uffff\1\5\5\uffff\1\6\3\uffff\1\3",
             "",
             "",
-            "",
-            "\1\6\20\uffff\1\5\5\uffff\1\6",
-            "\1\6\20\uffff\1\5\5\uffff\1\6"
+            ""
     };
 
-    static final short[] DFA121_eot = DFA.unpackEncodedString(DFA121_eotS);
-    static final short[] DFA121_eof = DFA.unpackEncodedString(DFA121_eofS);
-    static final char[] DFA121_min = DFA.unpackEncodedStringToUnsignedChars(DFA121_minS);
-    static final char[] DFA121_max = DFA.unpackEncodedStringToUnsignedChars(DFA121_maxS);
-    static final short[] DFA121_accept = DFA.unpackEncodedString(DFA121_acceptS);
-    static final short[] DFA121_special = DFA.unpackEncodedString(DFA121_specialS);
-    static final short[][] DFA121_transition;
+    static final short[] DFA159_eot = DFA.unpackEncodedString(DFA159_eotS);
+    static final short[] DFA159_eof = DFA.unpackEncodedString(DFA159_eofS);
+    static final char[] DFA159_min = DFA.unpackEncodedStringToUnsignedChars(DFA159_minS);
+    static final char[] DFA159_max = DFA.unpackEncodedStringToUnsignedChars(DFA159_maxS);
+    static final short[] DFA159_accept = DFA.unpackEncodedString(DFA159_acceptS);
+    static final short[] DFA159_special = DFA.unpackEncodedString(DFA159_specialS);
+    static final short[][] DFA159_transition;
 
     static {
-        int numStates = DFA121_transitionS.length;
-        DFA121_transition = new short[numStates][];
+        int numStates = DFA159_transitionS.length;
+        DFA159_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA121_transition[i] = DFA.unpackEncodedString(DFA121_transitionS[i]);
+            DFA159_transition[i] = DFA.unpackEncodedString(DFA159_transitionS[i]);
         }
     }
 
-    class DFA121 extends DFA {
+    class DFA159 extends DFA {
 
-        public DFA121(BaseRecognizer recognizer) {
+        public DFA159(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 121;
-            this.eot = DFA121_eot;
-            this.eof = DFA121_eof;
-            this.min = DFA121_min;
-            this.max = DFA121_max;
-            this.accept = DFA121_accept;
-            this.special = DFA121_special;
-            this.transition = DFA121_transition;
+            this.decisionNumber = 159;
+            this.eot = DFA159_eot;
+            this.eof = DFA159_eof;
+            this.min = DFA159_min;
+            this.max = DFA159_max;
+            this.accept = DFA159_accept;
+            this.special = DFA159_special;
+            this.transition = DFA159_transition;
         }
         public String getDescription() {
-            return "()* loopback of 4246:1: ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )*";
+            return "()* loopback of 4480:1: ( ( (lv_ownedAnnotations_14_0= ruleAnnotationElementCS ) ) | ( (lv_ownedOperations_15_0= ruleOperationCS ) ) | ( (lv_ownedProperties_16_0= ruleStructuralFeatureCS ) ) | ( (lv_ownedConstraints_17_0= ruleInvariantConstraintCS ) ) )*";
         }
     }
-    static final String DFA151_eotS =
+    static final String DFA161_eotS =
+        "\5\uffff";
+    static final String DFA161_eofS =
+        "\5\uffff";
+    static final String DFA161_minS =
+        "\3\24\2\uffff";
+    static final String DFA161_maxS =
+        "\3\57\2\uffff";
+    static final String DFA161_acceptS =
+        "\3\uffff\1\1\1\2";
+    static final String DFA161_specialS =
+        "\5\uffff}>";
+    static final String[] DFA161_transitionS = {
+            "\1\3\5\uffff\1\2\20\uffff\1\4\3\uffff\1\1",
+            "\1\3\5\uffff\1\2\20\uffff\1\4\3\uffff\1\1",
+            "\1\3\5\uffff\1\2\20\uffff\1\4\3\uffff\1\1",
+            "",
+            ""
+    };
+
+    static final short[] DFA161_eot = DFA.unpackEncodedString(DFA161_eotS);
+    static final short[] DFA161_eof = DFA.unpackEncodedString(DFA161_eofS);
+    static final char[] DFA161_min = DFA.unpackEncodedStringToUnsignedChars(DFA161_minS);
+    static final char[] DFA161_max = DFA.unpackEncodedStringToUnsignedChars(DFA161_maxS);
+    static final short[] DFA161_accept = DFA.unpackEncodedString(DFA161_acceptS);
+    static final short[] DFA161_special = DFA.unpackEncodedString(DFA161_specialS);
+    static final short[][] DFA161_transition;
+
+    static {
+        int numStates = DFA161_transitionS.length;
+        DFA161_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA161_transition[i] = DFA.unpackEncodedString(DFA161_transitionS[i]);
+        }
+    }
+
+    class DFA161 extends DFA {
+
+        public DFA161(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 161;
+            this.eot = DFA161_eot;
+            this.eof = DFA161_eof;
+            this.min = DFA161_min;
+            this.max = DFA161_max;
+            this.accept = DFA161_accept;
+            this.special = DFA161_special;
+            this.transition = DFA161_transition;
+        }
+        public String getDescription() {
+            return "4585:1: (this_AttributeCS_0= ruleAttributeCS | this_ReferenceCS_1= ruleReferenceCS )";
+        }
+    }
+    static final String DFA189_eotS =
         "\57\uffff";
-    static final String DFA151_eofS =
+    static final String DFA189_eofS =
         "\2\uffff\54\1\1\uffff";
-    static final String DFA151_minS =
+    static final String DFA189_minS =
         "\1\4\1\uffff\54\22\1\uffff";
-    static final String DFA151_maxS =
+    static final String DFA189_maxS =
         "\1\u0084\1\uffff\54\172\1\uffff";
-    static final String DFA151_acceptS =
+    static final String DFA189_acceptS =
         "\1\uffff\1\1\54\uffff\1\2";
-    static final String DFA151_specialS =
+    static final String DFA189_specialS =
         "\57\uffff}>";
-    static final String[] DFA151_transitionS = {
+    static final String[] DFA189_transitionS = {
             "\2\1\2\uffff\1\2\1\3\7\uffff\1\26\1\1\1\4\1\5\1\6\1\7\1\10"+
             "\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+
             "\1\25\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+
@@ -29025,52 +36973,52 @@
             ""
     };
 
-    static final short[] DFA151_eot = DFA.unpackEncodedString(DFA151_eotS);
-    static final short[] DFA151_eof = DFA.unpackEncodedString(DFA151_eofS);
-    static final char[] DFA151_min = DFA.unpackEncodedStringToUnsignedChars(DFA151_minS);
-    static final char[] DFA151_max = DFA.unpackEncodedStringToUnsignedChars(DFA151_maxS);
-    static final short[] DFA151_accept = DFA.unpackEncodedString(DFA151_acceptS);
-    static final short[] DFA151_special = DFA.unpackEncodedString(DFA151_specialS);
-    static final short[][] DFA151_transition;
+    static final short[] DFA189_eot = DFA.unpackEncodedString(DFA189_eotS);
+    static final short[] DFA189_eof = DFA.unpackEncodedString(DFA189_eofS);
+    static final char[] DFA189_min = DFA.unpackEncodedStringToUnsignedChars(DFA189_minS);
+    static final char[] DFA189_max = DFA.unpackEncodedStringToUnsignedChars(DFA189_maxS);
+    static final short[] DFA189_accept = DFA.unpackEncodedString(DFA189_acceptS);
+    static final short[] DFA189_special = DFA.unpackEncodedString(DFA189_specialS);
+    static final short[][] DFA189_transition;
 
     static {
-        int numStates = DFA151_transitionS.length;
-        DFA151_transition = new short[numStates][];
+        int numStates = DFA189_transitionS.length;
+        DFA189_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA151_transition[i] = DFA.unpackEncodedString(DFA151_transitionS[i]);
+            DFA189_transition[i] = DFA.unpackEncodedString(DFA189_transitionS[i]);
         }
     }
 
-    class DFA151 extends DFA {
+    class DFA189 extends DFA {
 
-        public DFA151(BaseRecognizer recognizer) {
+        public DFA189(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 151;
-            this.eot = DFA151_eot;
-            this.eof = DFA151_eof;
-            this.min = DFA151_min;
-            this.max = DFA151_max;
-            this.accept = DFA151_accept;
-            this.special = DFA151_special;
-            this.transition = DFA151_transition;
+            this.decisionNumber = 189;
+            this.eot = DFA189_eot;
+            this.eof = DFA189_eof;
+            this.min = DFA189_min;
+            this.max = DFA189_max;
+            this.accept = DFA189_accept;
+            this.special = DFA189_special;
+            this.transition = DFA189_transition;
         }
         public String getDescription() {
-            return "5959:1: ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) )";
+            return "6193:1: ( ( ( (lv_ownedExpression_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_ownedLastExpression_2_0= ruleExpCS ) ) )? ) | ( (lv_ownedExpression_3_0= rulePatternExpCS ) ) )";
         }
     }
-    static final String DFA154_eotS =
+    static final String DFA192_eotS =
         "\57\uffff";
-    static final String DFA154_eofS =
+    static final String DFA192_eofS =
         "\2\uffff\54\1\1\uffff";
-    static final String DFA154_minS =
+    static final String DFA192_minS =
         "\1\4\1\uffff\54\22\1\uffff";
-    static final String DFA154_maxS =
+    static final String DFA192_maxS =
         "\1\u0084\1\uffff\54\172\1\uffff";
-    static final String DFA154_acceptS =
+    static final String DFA192_acceptS =
         "\1\uffff\1\1\54\uffff\1\2";
-    static final String DFA154_specialS =
+    static final String DFA192_specialS =
         "\57\uffff}>";
-    static final String[] DFA154_transitionS = {
+    static final String[] DFA192_transitionS = {
             "\2\1\2\uffff\1\2\1\3\7\uffff\1\26\1\1\1\4\1\5\1\6\1\7\1\10"+
             "\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+
             "\1\25\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+
@@ -29170,52 +37118,52 @@
             ""
     };
 
-    static final short[] DFA154_eot = DFA.unpackEncodedString(DFA154_eotS);
-    static final short[] DFA154_eof = DFA.unpackEncodedString(DFA154_eofS);
-    static final char[] DFA154_min = DFA.unpackEncodedStringToUnsignedChars(DFA154_minS);
-    static final char[] DFA154_max = DFA.unpackEncodedStringToUnsignedChars(DFA154_maxS);
-    static final short[] DFA154_accept = DFA.unpackEncodedString(DFA154_acceptS);
-    static final short[] DFA154_special = DFA.unpackEncodedString(DFA154_specialS);
-    static final short[][] DFA154_transition;
+    static final short[] DFA192_eot = DFA.unpackEncodedString(DFA192_eotS);
+    static final short[] DFA192_eof = DFA.unpackEncodedString(DFA192_eofS);
+    static final char[] DFA192_min = DFA.unpackEncodedStringToUnsignedChars(DFA192_minS);
+    static final char[] DFA192_max = DFA.unpackEncodedStringToUnsignedChars(DFA192_maxS);
+    static final short[] DFA192_accept = DFA.unpackEncodedString(DFA192_acceptS);
+    static final short[] DFA192_special = DFA.unpackEncodedString(DFA192_specialS);
+    static final short[][] DFA192_transition;
 
     static {
-        int numStates = DFA154_transitionS.length;
-        DFA154_transition = new short[numStates][];
+        int numStates = DFA192_transitionS.length;
+        DFA192_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA154_transition[i] = DFA.unpackEncodedString(DFA154_transitionS[i]);
+            DFA192_transition[i] = DFA.unpackEncodedString(DFA192_transitionS[i]);
         }
     }
 
-    class DFA154 extends DFA {
+    class DFA192 extends DFA {
 
-        public DFA154(BaseRecognizer recognizer) {
+        public DFA192(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 154;
-            this.eot = DFA154_eot;
-            this.eof = DFA154_eof;
-            this.min = DFA154_min;
-            this.max = DFA154_max;
-            this.accept = DFA154_accept;
-            this.special = DFA154_special;
-            this.transition = DFA154_transition;
+            this.decisionNumber = 192;
+            this.eot = DFA192_eot;
+            this.eof = DFA192_eof;
+            this.min = DFA192_min;
+            this.max = DFA192_max;
+            this.accept = DFA192_accept;
+            this.special = DFA192_special;
+            this.transition = DFA192_transition;
         }
         public String getDescription() {
-            return "6172:1: (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS )";
+            return "6406:1: (lv_ownedInitExpression_2_1= ruleExpCS | lv_ownedInitExpression_2_2= rulePatternExpCS )";
         }
     }
-    static final String DFA165_eotS =
+    static final String DFA203_eotS =
         "\74\uffff";
-    static final String DFA165_eofS =
+    static final String DFA203_eofS =
         "\74\uffff";
-    static final String DFA165_minS =
+    static final String DFA203_minS =
         "\1\10\64\uffff\5\0\2\uffff";
-    static final String DFA165_maxS =
+    static final String DFA203_maxS =
         "\1\160\64\uffff\5\0\2\uffff";
-    static final String DFA165_acceptS =
+    static final String DFA203_acceptS =
         "\1\uffff\1\1\53\uffff\1\2\15\uffff\1\3";
-    static final String DFA165_specialS =
+    static final String DFA203_specialS =
         "\65\uffff\1\0\1\1\1\2\1\3\1\4\2\uffff}>";
-    static final String[] DFA165_transitionS = {
+    static final String[] DFA203_transitionS = {
             "\2\1\7\uffff\1\1\1\uffff\44\1\4\uffff\1\1\14\uffff\1\1\1\uffff"+
             "\2\1\4\uffff\1\1\21\uffff\1\55\1\uffff\10\55\1\65\1\66\1\67"+
             "\1\70\1\71",
@@ -29280,138 +37228,138 @@
             ""
     };
 
-    static final short[] DFA165_eot = DFA.unpackEncodedString(DFA165_eotS);
-    static final short[] DFA165_eof = DFA.unpackEncodedString(DFA165_eofS);
-    static final char[] DFA165_min = DFA.unpackEncodedStringToUnsignedChars(DFA165_minS);
-    static final char[] DFA165_max = DFA.unpackEncodedStringToUnsignedChars(DFA165_maxS);
-    static final short[] DFA165_accept = DFA.unpackEncodedString(DFA165_acceptS);
-    static final short[] DFA165_special = DFA.unpackEncodedString(DFA165_specialS);
-    static final short[][] DFA165_transition;
+    static final short[] DFA203_eot = DFA.unpackEncodedString(DFA203_eotS);
+    static final short[] DFA203_eof = DFA.unpackEncodedString(DFA203_eofS);
+    static final char[] DFA203_min = DFA.unpackEncodedStringToUnsignedChars(DFA203_minS);
+    static final char[] DFA203_max = DFA.unpackEncodedStringToUnsignedChars(DFA203_maxS);
+    static final short[] DFA203_accept = DFA.unpackEncodedString(DFA203_acceptS);
+    static final short[] DFA203_special = DFA.unpackEncodedString(DFA203_specialS);
+    static final short[][] DFA203_transition;
 
     static {
-        int numStates = DFA165_transitionS.length;
-        DFA165_transition = new short[numStates][];
+        int numStates = DFA203_transitionS.length;
+        DFA203_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA165_transition[i] = DFA.unpackEncodedString(DFA165_transitionS[i]);
+            DFA203_transition[i] = DFA.unpackEncodedString(DFA203_transitionS[i]);
         }
     }
 
-    class DFA165 extends DFA {
+    class DFA203 extends DFA {
 
-        public DFA165(BaseRecognizer recognizer) {
+        public DFA203(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 165;
-            this.eot = DFA165_eot;
-            this.eof = DFA165_eof;
-            this.min = DFA165_min;
-            this.max = DFA165_max;
-            this.accept = DFA165_accept;
-            this.special = DFA165_special;
-            this.transition = DFA165_transition;
+            this.decisionNumber = 203;
+            this.eot = DFA203_eot;
+            this.eof = DFA203_eof;
+            this.min = DFA203_min;
+            this.max = DFA203_max;
+            this.accept = DFA203_accept;
+            this.special = DFA203_special;
+            this.transition = DFA203_transition;
         }
         public String getDescription() {
-            return "7057:2: (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS )";
+            return "7291:2: (this_TypeNameExpCS_0= ruleTypeNameExpCS | this_TypeLiteralCS_1= ruleTypeLiteralCS | this_CollectionPatternCS_2= ruleCollectionPatternCS )";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA165_53 = input.LA(1);
+                        int LA203_53 = input.LA(1);
 
                          
-                        int index165_53 = input.index();
+                        int index203_53 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred300_InternalOCLinEcore()) ) {s = 45;}
+                        if ( (synpred320_InternalOCLinEcore()) ) {s = 45;}
 
                         else if ( (true) ) {s = 59;}
 
                          
-                        input.seek(index165_53);
+                        input.seek(index203_53);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA165_54 = input.LA(1);
+                        int LA203_54 = input.LA(1);
 
                          
-                        int index165_54 = input.index();
+                        int index203_54 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred300_InternalOCLinEcore()) ) {s = 45;}
+                        if ( (synpred320_InternalOCLinEcore()) ) {s = 45;}
 
                         else if ( (true) ) {s = 59;}
 
                          
-                        input.seek(index165_54);
+                        input.seek(index203_54);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA165_55 = input.LA(1);
+                        int LA203_55 = input.LA(1);
 
                          
-                        int index165_55 = input.index();
+                        int index203_55 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred300_InternalOCLinEcore()) ) {s = 45;}
+                        if ( (synpred320_InternalOCLinEcore()) ) {s = 45;}
 
                         else if ( (true) ) {s = 59;}
 
                          
-                        input.seek(index165_55);
+                        input.seek(index203_55);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA165_56 = input.LA(1);
+                        int LA203_56 = input.LA(1);
 
                          
-                        int index165_56 = input.index();
+                        int index203_56 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred300_InternalOCLinEcore()) ) {s = 45;}
+                        if ( (synpred320_InternalOCLinEcore()) ) {s = 45;}
 
                         else if ( (true) ) {s = 59;}
 
                          
-                        input.seek(index165_56);
+                        input.seek(index203_56);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA165_57 = input.LA(1);
+                        int LA203_57 = input.LA(1);
 
                          
-                        int index165_57 = input.index();
+                        int index203_57 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred300_InternalOCLinEcore()) ) {s = 45;}
+                        if ( (synpred320_InternalOCLinEcore()) ) {s = 45;}
 
                         else if ( (true) ) {s = 59;}
 
                          
-                        input.seek(index165_57);
+                        input.seek(index203_57);
                         if ( s>=0 ) return s;
                         break;
             }
             if (state.backtracking>0) {state.failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 165, _s, input);
+                new NoViableAltException(getDescription(), 203, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA168_eotS =
+    static final String DFA206_eotS =
         "\111\uffff";
-    static final String DFA168_eofS =
+    static final String DFA206_eofS =
         "\111\uffff";
-    static final String DFA168_minS =
+    static final String DFA206_minS =
         "\1\4\2\0\106\uffff";
-    static final String DFA168_maxS =
+    static final String DFA206_maxS =
         "\1\u0084\2\0\106\uffff";
-    static final String DFA168_acceptS =
+    static final String DFA206_acceptS =
         "\3\uffff\1\1\104\uffff\1\2";
-    static final String DFA168_specialS =
+    static final String DFA206_specialS =
         "\1\uffff\1\0\1\1\106\uffff}>";
-    static final String[] DFA168_transitionS = {
+    static final String[] DFA206_transitionS = {
             "\2\3\2\uffff\2\3\7\uffff\1\3\1\1\45\3\3\uffff\1\3\14\uffff"+
             "\1\3\1\uffff\2\3\4\uffff\1\3\2\uffff\1\2\1\3\15\uffff\1\3\1"+
             "\uffff\15\3\2\uffff\5\3\6\uffff\1\3\4\uffff\1\110\1\3",
@@ -29489,94 +37437,94 @@
             ""
     };
 
-    static final short[] DFA168_eot = DFA.unpackEncodedString(DFA168_eotS);
-    static final short[] DFA168_eof = DFA.unpackEncodedString(DFA168_eofS);
-    static final char[] DFA168_min = DFA.unpackEncodedStringToUnsignedChars(DFA168_minS);
-    static final char[] DFA168_max = DFA.unpackEncodedStringToUnsignedChars(DFA168_maxS);
-    static final short[] DFA168_accept = DFA.unpackEncodedString(DFA168_acceptS);
-    static final short[] DFA168_special = DFA.unpackEncodedString(DFA168_specialS);
-    static final short[][] DFA168_transition;
+    static final short[] DFA206_eot = DFA.unpackEncodedString(DFA206_eotS);
+    static final short[] DFA206_eof = DFA.unpackEncodedString(DFA206_eofS);
+    static final char[] DFA206_min = DFA.unpackEncodedStringToUnsignedChars(DFA206_minS);
+    static final char[] DFA206_max = DFA.unpackEncodedStringToUnsignedChars(DFA206_maxS);
+    static final short[] DFA206_accept = DFA.unpackEncodedString(DFA206_acceptS);
+    static final short[] DFA206_special = DFA.unpackEncodedString(DFA206_specialS);
+    static final short[][] DFA206_transition;
 
     static {
-        int numStates = DFA168_transitionS.length;
-        DFA168_transition = new short[numStates][];
+        int numStates = DFA206_transitionS.length;
+        DFA206_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA168_transition[i] = DFA.unpackEncodedString(DFA168_transitionS[i]);
+            DFA206_transition[i] = DFA.unpackEncodedString(DFA206_transitionS[i]);
         }
     }
 
-    class DFA168 extends DFA {
+    class DFA206 extends DFA {
 
-        public DFA168(BaseRecognizer recognizer) {
+        public DFA206(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 168;
-            this.eot = DFA168_eot;
-            this.eof = DFA168_eof;
-            this.min = DFA168_min;
-            this.max = DFA168_max;
-            this.accept = DFA168_accept;
-            this.special = DFA168_special;
-            this.transition = DFA168_transition;
+            this.decisionNumber = 206;
+            this.eot = DFA206_eot;
+            this.eof = DFA206_eof;
+            this.min = DFA206_min;
+            this.max = DFA206_max;
+            this.accept = DFA206_accept;
+            this.special = DFA206_special;
+            this.transition = DFA206_transition;
         }
         public String getDescription() {
-            return "7134:1: ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS )";
+            return "7368:1: ( (this_PrefixedPrimaryExpCS_0= rulePrefixedPrimaryExpCS ( () ( (lv_name_2_0= ruleBinaryOperatorName ) ) ( (lv_ownedRight_3_0= ruleExpCS ) ) )? ) | this_PrefixedLetExpCS_4= rulePrefixedLetExpCS )";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA168_1 = input.LA(1);
+                        int LA206_1 = input.LA(1);
 
                          
-                        int index168_1 = input.index();
+                        int index206_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred303_InternalOCLinEcore()) ) {s = 3;}
+                        if ( (synpred323_InternalOCLinEcore()) ) {s = 3;}
 
                         else if ( (true) ) {s = 72;}
 
                          
-                        input.seek(index168_1);
+                        input.seek(index206_1);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA168_2 = input.LA(1);
+                        int LA206_2 = input.LA(1);
 
                          
-                        int index168_2 = input.index();
+                        int index206_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred303_InternalOCLinEcore()) ) {s = 3;}
+                        if ( (synpred323_InternalOCLinEcore()) ) {s = 3;}
 
                         else if ( (true) ) {s = 72;}
 
                          
-                        input.seek(index168_2);
+                        input.seek(index206_2);
                         if ( s>=0 ) return s;
                         break;
             }
             if (state.backtracking>0) {state.failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 168, _s, input);
+                new NoViableAltException(getDescription(), 206, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA171_eotS =
+    static final String DFA209_eotS =
         "\110\uffff";
-    static final String DFA171_eofS =
+    static final String DFA209_eofS =
         "\110\uffff";
-    static final String DFA171_minS =
+    static final String DFA209_minS =
         "\1\4\12\uffff\6\0\67\uffff";
-    static final String DFA171_maxS =
+    static final String DFA209_maxS =
         "\1\u0084\12\uffff\6\0\67\uffff";
-    static final String DFA171_acceptS =
+    static final String DFA209_acceptS =
         "\1\uffff\1\1\1\2\1\3\1\4\14\uffff\1\7\1\10\7\uffff\1\11\53\uffff"+
         "\1\5\1\6";
-    static final String DFA171_specialS =
+    static final String DFA209_specialS =
         "\13\uffff\1\0\1\1\1\2\1\3\1\4\1\5\67\uffff}>";
-    static final String[] DFA171_transitionS = {
+    static final String[] DFA209_transitionS = {
             "\2\4\2\uffff\2\32\7\uffff\1\32\1\uffff\44\32\1\1\3\uffff\1"+
             "\32\14\uffff\1\32\1\uffff\2\32\4\uffff\1\32\3\uffff\1\4\15\uffff"+
             "\1\13\1\uffff\10\22\1\14\1\15\1\16\1\17\1\20\2\uffff\1\21\4"+
@@ -29654,153 +37602,153 @@
             ""
     };
 
-    static final short[] DFA171_eot = DFA.unpackEncodedString(DFA171_eotS);
-    static final short[] DFA171_eof = DFA.unpackEncodedString(DFA171_eofS);
-    static final char[] DFA171_min = DFA.unpackEncodedStringToUnsignedChars(DFA171_minS);
-    static final char[] DFA171_max = DFA.unpackEncodedStringToUnsignedChars(DFA171_maxS);
-    static final short[] DFA171_accept = DFA.unpackEncodedString(DFA171_acceptS);
-    static final short[] DFA171_special = DFA.unpackEncodedString(DFA171_specialS);
-    static final short[][] DFA171_transition;
+    static final short[] DFA209_eot = DFA.unpackEncodedString(DFA209_eotS);
+    static final short[] DFA209_eof = DFA.unpackEncodedString(DFA209_eofS);
+    static final char[] DFA209_min = DFA.unpackEncodedStringToUnsignedChars(DFA209_minS);
+    static final char[] DFA209_max = DFA.unpackEncodedStringToUnsignedChars(DFA209_maxS);
+    static final short[] DFA209_accept = DFA.unpackEncodedString(DFA209_acceptS);
+    static final short[] DFA209_special = DFA.unpackEncodedString(DFA209_specialS);
+    static final short[][] DFA209_transition;
 
     static {
-        int numStates = DFA171_transitionS.length;
-        DFA171_transition = new short[numStates][];
+        int numStates = DFA209_transitionS.length;
+        DFA209_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA171_transition[i] = DFA.unpackEncodedString(DFA171_transitionS[i]);
+            DFA209_transition[i] = DFA.unpackEncodedString(DFA209_transitionS[i]);
         }
     }
 
-    class DFA171 extends DFA {
+    class DFA209 extends DFA {
 
-        public DFA171(BaseRecognizer recognizer) {
+        public DFA209(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 171;
-            this.eot = DFA171_eot;
-            this.eof = DFA171_eof;
-            this.min = DFA171_min;
-            this.max = DFA171_max;
-            this.accept = DFA171_accept;
-            this.special = DFA171_special;
-            this.transition = DFA171_transition;
+            this.decisionNumber = 209;
+            this.eot = DFA209_eot;
+            this.eof = DFA209_eof;
+            this.min = DFA209_min;
+            this.max = DFA209_max;
+            this.accept = DFA209_accept;
+            this.special = DFA209_special;
+            this.transition = DFA209_transition;
         }
         public String getDescription() {
-            return "7383:1: (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS )";
+            return "7617:1: (this_NestedExpCS_0= ruleNestedExpCS | this_IfExpCS_1= ruleIfExpCS | this_SelfExpCS_2= ruleSelfExpCS | this_PrimitiveLiteralExpCS_3= rulePrimitiveLiteralExpCS | this_TupleLiteralExpCS_4= ruleTupleLiteralExpCS | this_CollectionLiteralExpCS_5= ruleCollectionLiteralExpCS | this_LambdaLiteralExpCS_6= ruleLambdaLiteralExpCS | this_TypeLiteralExpCS_7= ruleTypeLiteralExpCS | this_NameExpCS_8= ruleNameExpCS )";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA171_11 = input.LA(1);
+                        int LA209_11 = input.LA(1);
 
                          
-                        int index171_11 = input.index();
+                        int index209_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred310_InternalOCLinEcore()) ) {s = 70;}
+                        if ( (synpred330_InternalOCLinEcore()) ) {s = 70;}
 
-                        else if ( (synpred313_InternalOCLinEcore()) ) {s = 18;}
+                        else if ( (synpred333_InternalOCLinEcore()) ) {s = 18;}
 
                          
-                        input.seek(index171_11);
+                        input.seek(index209_11);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA171_12 = input.LA(1);
+                        int LA209_12 = input.LA(1);
 
                          
-                        int index171_12 = input.index();
+                        int index209_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred311_InternalOCLinEcore()) ) {s = 71;}
+                        if ( (synpred331_InternalOCLinEcore()) ) {s = 71;}
 
-                        else if ( (synpred313_InternalOCLinEcore()) ) {s = 18;}
+                        else if ( (synpred333_InternalOCLinEcore()) ) {s = 18;}
 
                          
-                        input.seek(index171_12);
+                        input.seek(index209_12);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA171_13 = input.LA(1);
+                        int LA209_13 = input.LA(1);
 
                          
-                        int index171_13 = input.index();
+                        int index209_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred311_InternalOCLinEcore()) ) {s = 71;}
+                        if ( (synpred331_InternalOCLinEcore()) ) {s = 71;}
 
-                        else if ( (synpred313_InternalOCLinEcore()) ) {s = 18;}
+                        else if ( (synpred333_InternalOCLinEcore()) ) {s = 18;}
 
                          
-                        input.seek(index171_13);
+                        input.seek(index209_13);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA171_14 = input.LA(1);
+                        int LA209_14 = input.LA(1);
 
                          
-                        int index171_14 = input.index();
+                        int index209_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred311_InternalOCLinEcore()) ) {s = 71;}
+                        if ( (synpred331_InternalOCLinEcore()) ) {s = 71;}
 
-                        else if ( (synpred313_InternalOCLinEcore()) ) {s = 18;}
+                        else if ( (synpred333_InternalOCLinEcore()) ) {s = 18;}
 
                          
-                        input.seek(index171_14);
+                        input.seek(index209_14);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA171_15 = input.LA(1);
+                        int LA209_15 = input.LA(1);
 
                          
-                        int index171_15 = input.index();
+                        int index209_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred311_InternalOCLinEcore()) ) {s = 71;}
+                        if ( (synpred331_InternalOCLinEcore()) ) {s = 71;}
 
-                        else if ( (synpred313_InternalOCLinEcore()) ) {s = 18;}
+                        else if ( (synpred333_InternalOCLinEcore()) ) {s = 18;}
 
                          
-                        input.seek(index171_15);
+                        input.seek(index209_15);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA171_16 = input.LA(1);
+                        int LA209_16 = input.LA(1);
 
                          
-                        int index171_16 = input.index();
+                        int index209_16 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred311_InternalOCLinEcore()) ) {s = 71;}
+                        if ( (synpred331_InternalOCLinEcore()) ) {s = 71;}
 
-                        else if ( (synpred313_InternalOCLinEcore()) ) {s = 18;}
+                        else if ( (synpred333_InternalOCLinEcore()) ) {s = 18;}
 
                          
-                        input.seek(index171_16);
+                        input.seek(index209_16);
                         if ( s>=0 ) return s;
                         break;
             }
             if (state.backtracking>0) {state.failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 171, _s, input);
+                new NoViableAltException(getDescription(), 209, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA195_eotS =
+    static final String DFA233_eotS =
         "\57\uffff";
-    static final String DFA195_eofS =
+    static final String DFA233_eofS =
         "\57\uffff";
-    static final String DFA195_minS =
+    static final String DFA233_minS =
         "\1\4\1\uffff\54\22\1\uffff";
-    static final String DFA195_maxS =
+    static final String DFA233_maxS =
         "\1\u0084\1\uffff\54\177\1\uffff";
-    static final String DFA195_acceptS =
+    static final String DFA233_acceptS =
         "\1\uffff\1\1\54\uffff\1\2";
-    static final String DFA195_specialS =
+    static final String DFA233_specialS =
         "\57\uffff}>";
-    static final String[] DFA195_transitionS = {
+    static final String[] DFA233_transitionS = {
             "\2\1\2\uffff\1\2\1\3\7\uffff\1\26\1\1\1\4\1\5\1\6\1\7\1\10"+
             "\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+
             "\1\25\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+
@@ -29944,37 +37892,2061 @@
             ""
     };
 
-    static final short[] DFA195_eot = DFA.unpackEncodedString(DFA195_eotS);
-    static final short[] DFA195_eof = DFA.unpackEncodedString(DFA195_eofS);
-    static final char[] DFA195_min = DFA.unpackEncodedStringToUnsignedChars(DFA195_minS);
-    static final char[] DFA195_max = DFA.unpackEncodedStringToUnsignedChars(DFA195_maxS);
-    static final short[] DFA195_accept = DFA.unpackEncodedString(DFA195_acceptS);
-    static final short[] DFA195_special = DFA.unpackEncodedString(DFA195_specialS);
-    static final short[][] DFA195_transition;
+    static final short[] DFA233_eot = DFA.unpackEncodedString(DFA233_eotS);
+    static final short[] DFA233_eof = DFA.unpackEncodedString(DFA233_eofS);
+    static final char[] DFA233_min = DFA.unpackEncodedStringToUnsignedChars(DFA233_minS);
+    static final char[] DFA233_max = DFA.unpackEncodedStringToUnsignedChars(DFA233_maxS);
+    static final short[] DFA233_accept = DFA.unpackEncodedString(DFA233_acceptS);
+    static final short[] DFA233_special = DFA.unpackEncodedString(DFA233_specialS);
+    static final short[][] DFA233_transition;
 
     static {
-        int numStates = DFA195_transitionS.length;
-        DFA195_transition = new short[numStates][];
+        int numStates = DFA233_transitionS.length;
+        DFA233_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA195_transition[i] = DFA.unpackEncodedString(DFA195_transitionS[i]);
+            DFA233_transition[i] = DFA.unpackEncodedString(DFA233_transitionS[i]);
         }
     }
 
-    class DFA195 extends DFA {
+    class DFA233 extends DFA {
 
-        public DFA195(BaseRecognizer recognizer) {
+        public DFA233(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 195;
-            this.eot = DFA195_eot;
-            this.eof = DFA195_eof;
-            this.min = DFA195_min;
-            this.max = DFA195_max;
-            this.accept = DFA195_accept;
-            this.special = DFA195_special;
-            this.transition = DFA195_transition;
+            this.decisionNumber = 233;
+            this.eot = DFA233_eot;
+            this.eof = DFA233_eof;
+            this.min = DFA233_min;
+            this.max = DFA233_max;
+            this.accept = DFA233_accept;
+            this.special = DFA233_special;
+            this.transition = DFA233_transition;
         }
         public String getDescription() {
-            return "8429:1: (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS )";
+            return "8663:1: (lv_ownedCondition_1_1= ruleExpCS | lv_ownedCondition_1_2= rulePatternExpCS )";
+        }
+    }
+    static final String DFA296_eotS =
+        "\22\uffff";
+    static final String DFA296_eofS =
+        "\1\1\21\uffff";
+    static final String DFA296_minS =
+        "\1\37\21\uffff";
+    static final String DFA296_maxS =
+        "\1\107\21\uffff";
+    static final String DFA296_acceptS =
+        "\1\uffff\1\11\1\1\2\2\2\3\2\4\2\5\2\6\2\7\3\10";
+    static final String DFA296_specialS =
+        "\1\0\21\uffff}>";
+    static final String[] DFA296_transitionS = {
+            "\1\3\6\uffff\1\5\5\uffff\1\7\5\uffff\1\11\1\14\1\15\1\17\7"+
+            "\uffff\1\2\1\21\2\uffff\1\4\1\6\1\10\1\12\1\13\1\16\1\20",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA296_eot = DFA.unpackEncodedString(DFA296_eotS);
+    static final short[] DFA296_eof = DFA.unpackEncodedString(DFA296_eofS);
+    static final char[] DFA296_min = DFA.unpackEncodedStringToUnsignedChars(DFA296_minS);
+    static final char[] DFA296_max = DFA.unpackEncodedStringToUnsignedChars(DFA296_maxS);
+    static final short[] DFA296_accept = DFA.unpackEncodedString(DFA296_acceptS);
+    static final short[] DFA296_special = DFA.unpackEncodedString(DFA296_specialS);
+    static final short[][] DFA296_transition;
+
+    static {
+        int numStates = DFA296_transitionS.length;
+        DFA296_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA296_transition[i] = DFA.unpackEncodedString(DFA296_transitionS[i]);
+        }
+    }
+
+    class DFA296 extends DFA {
+
+        public DFA296(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 296;
+            this.eot = DFA296_eot;
+            this.eof = DFA296_eof;
+            this.min = DFA296_min;
+            this.max = DFA296_max;
+            this.accept = DFA296_accept;
+            this.special = DFA296_special;
+            this.transition = DFA296_transition;
+        }
+        public String getDescription() {
+            return "()+ loopback of 1246:3: ( ({...}? => ( ({...}? => (otherlv_10= '{' ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isId_14_0= 'id' ) ) | otherlv_15= '!id' ) (otherlv_16= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_17_0= 'ordered' ) ) | otherlv_18= '!ordered' ) (otherlv_19= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_20_0= 'readonly' ) ) | otherlv_21= '!readonly' ) (otherlv_22= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_23_0= 'transient' ) ) | otherlv_24= '!transient' ) (otherlv_25= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_26_0= '!unique' ) ) | otherlv_27= 'unique' ) (otherlv_28= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_29_0= 'unsettable' ) ) | otherlv_30= '!unsettable' ) (otherlv_31= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_32_0= 'volatile' ) ) | otherlv_33= '!volatile' ) (otherlv_34= ',' )? )? otherlv_35= '}' ) ) ) ) )+";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA296_0 = input.LA(1);
+
+                         
+                        int index296_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA296_0==EOF) ) {s = 1;}
+
+                        else if ( LA296_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 2;}
+
+                        else if ( LA296_0 ==31 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 3;}
+
+                        else if ( LA296_0 ==65 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( LA296_0 ==38 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( LA296_0 ==66 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 6;}
+
+                        else if ( LA296_0 ==44 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 7;}
+
+                        else if ( LA296_0 ==67 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 8;}
+
+                        else if ( LA296_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 9;}
+
+                        else if ( LA296_0 ==68 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 10;}
+
+                        else if ( LA296_0 ==69 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 11;}
+
+                        else if ( LA296_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 12;}
+
+                        else if ( LA296_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 13;}
+
+                        else if ( LA296_0 ==70 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 14;}
+
+                        else if ( LA296_0 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 15;}
+
+                        else if ( LA296_0 ==71 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 16;}
+
+                        else if ( LA296_0 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 17;}
+
+                         
+                        input.seek(index296_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 296, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA280_eotS =
+        "\13\uffff";
+    static final String DFA280_eofS =
+        "\1\2\12\uffff";
+    static final String DFA280_minS =
+        "\1\34\12\uffff";
+    static final String DFA280_maxS =
+        "\1\107\12\uffff";
+    static final String DFA280_acceptS =
+        "\1\uffff\1\1\11\2";
+    static final String DFA280_specialS =
+        "\1\0\12\uffff}>";
+    static final String[] DFA280_transitionS = {
+            "\1\1\2\uffff\1\4\6\uffff\1\5\5\uffff\1\6\5\uffff\1\7\1\10\1"+
+            "\11\1\12\7\uffff\1\3\1\12\1\uffff\1\1\1\4\1\5\1\6\1\7\1\10\1"+
+            "\11\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA280_eot = DFA.unpackEncodedString(DFA280_eotS);
+    static final short[] DFA280_eof = DFA.unpackEncodedString(DFA280_eofS);
+    static final char[] DFA280_min = DFA.unpackEncodedStringToUnsignedChars(DFA280_minS);
+    static final char[] DFA280_max = DFA.unpackEncodedStringToUnsignedChars(DFA280_maxS);
+    static final short[] DFA280_accept = DFA.unpackEncodedString(DFA280_acceptS);
+    static final short[] DFA280_special = DFA.unpackEncodedString(DFA280_specialS);
+    static final short[][] DFA280_transition;
+
+    static {
+        int numStates = DFA280_transitionS.length;
+        DFA280_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA280_transition[i] = DFA.unpackEncodedString(DFA280_transitionS[i]);
+        }
+    }
+
+    class DFA280 extends DFA {
+
+        public DFA280(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 280;
+            this.eot = DFA280_eot;
+            this.eof = DFA280_eof;
+            this.min = DFA280_min;
+            this.max = DFA280_max;
+            this.accept = DFA280_accept;
+            this.special = DFA280_special;
+            this.transition = DFA280_transition;
+        }
+        public String getDescription() {
+            return "1257:1: ( ( ( (lv_isDerived_11_0= 'derived' ) ) | otherlv_12= '!derived' ) (otherlv_13= ',' )? )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA280_0 = input.LA(1);
+
+                         
+                        int index280_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA280_0==28||LA280_0==64) ) {s = 1;}
+
+                        else if ( (LA280_0==EOF) ) {s = 2;}
+
+                        else if ( LA280_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 3;}
+
+                        else if ( (LA280_0==31||LA280_0==65) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( (LA280_0==38||LA280_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( (LA280_0==44||LA280_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( (LA280_0==50||LA280_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 7;}
+
+                        else if ( (LA280_0==51||LA280_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 8;}
+
+                        else if ( (LA280_0==52||LA280_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 9;}
+
+                        else if ( (LA280_0==53||LA280_0==62||LA280_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 10;}
+
+                         
+                        input.seek(index280_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 280, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA279_eotS =
+        "\13\uffff";
+    static final String DFA279_eofS =
+        "\1\2\12\uffff";
+    static final String DFA279_minS =
+        "\1\37\12\uffff";
+    static final String DFA279_maxS =
+        "\1\107\12\uffff";
+    static final String DFA279_acceptS =
+        "\1\uffff\1\1\11\2";
+    static final String DFA279_specialS =
+        "\1\0\12\uffff}>";
+    static final String[] DFA279_transitionS = {
+            "\1\4\6\uffff\1\5\5\uffff\1\6\5\uffff\1\7\1\10\1\11\1\12\6\uffff"+
+            "\1\1\1\3\1\12\2\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA279_eot = DFA.unpackEncodedString(DFA279_eotS);
+    static final short[] DFA279_eof = DFA.unpackEncodedString(DFA279_eofS);
+    static final char[] DFA279_min = DFA.unpackEncodedStringToUnsignedChars(DFA279_minS);
+    static final char[] DFA279_max = DFA.unpackEncodedStringToUnsignedChars(DFA279_maxS);
+    static final short[] DFA279_accept = DFA.unpackEncodedString(DFA279_acceptS);
+    static final short[] DFA279_special = DFA.unpackEncodedString(DFA279_specialS);
+    static final short[][] DFA279_transition;
+
+    static {
+        int numStates = DFA279_transitionS.length;
+        DFA279_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA279_transition[i] = DFA.unpackEncodedString(DFA279_transitionS[i]);
+        }
+    }
+
+    class DFA279 extends DFA {
+
+        public DFA279(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 279;
+            this.eot = DFA279_eot;
+            this.eof = DFA279_eof;
+            this.min = DFA279_min;
+            this.max = DFA279_max;
+            this.accept = DFA279_accept;
+            this.special = DFA279_special;
+            this.transition = DFA279_transition;
+        }
+        public String getDescription() {
+            return "1277:2: (otherlv_13= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA279_0 = input.LA(1);
+
+                         
+                        int index279_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA279_0==60) ) {s = 1;}
+
+                        else if ( (LA279_0==EOF) ) {s = 2;}
+
+                        else if ( LA279_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 3;}
+
+                        else if ( (LA279_0==31||LA279_0==65) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( (LA279_0==38||LA279_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( (LA279_0==44||LA279_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( (LA279_0==50||LA279_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 7;}
+
+                        else if ( (LA279_0==51||LA279_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 8;}
+
+                        else if ( (LA279_0==52||LA279_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 9;}
+
+                        else if ( (LA279_0==53||LA279_0==62||LA279_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 10;}
+
+                         
+                        input.seek(index279_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 279, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA282_eotS =
+        "\13\uffff";
+    static final String DFA282_eofS =
+        "\1\2\12\uffff";
+    static final String DFA282_minS =
+        "\1\37\12\uffff";
+    static final String DFA282_maxS =
+        "\1\107\12\uffff";
+    static final String DFA282_acceptS =
+        "\1\uffff\1\1\11\2";
+    static final String DFA282_specialS =
+        "\1\0\12\uffff}>";
+    static final String[] DFA282_transitionS = {
+            "\1\4\6\uffff\1\5\5\uffff\1\6\5\uffff\1\7\1\10\1\11\1\12\6\uffff"+
+            "\1\1\1\3\1\12\2\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA282_eot = DFA.unpackEncodedString(DFA282_eotS);
+    static final short[] DFA282_eof = DFA.unpackEncodedString(DFA282_eofS);
+    static final char[] DFA282_min = DFA.unpackEncodedStringToUnsignedChars(DFA282_minS);
+    static final char[] DFA282_max = DFA.unpackEncodedStringToUnsignedChars(DFA282_maxS);
+    static final short[] DFA282_accept = DFA.unpackEncodedString(DFA282_acceptS);
+    static final short[] DFA282_special = DFA.unpackEncodedString(DFA282_specialS);
+    static final short[][] DFA282_transition;
+
+    static {
+        int numStates = DFA282_transitionS.length;
+        DFA282_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA282_transition[i] = DFA.unpackEncodedString(DFA282_transitionS[i]);
+        }
+    }
+
+    class DFA282 extends DFA {
+
+        public DFA282(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 282;
+            this.eot = DFA282_eot;
+            this.eof = DFA282_eof;
+            this.min = DFA282_min;
+            this.max = DFA282_max;
+            this.accept = DFA282_accept;
+            this.special = DFA282_special;
+            this.transition = DFA282_transition;
+        }
+        public String getDescription() {
+            return "1313:2: (otherlv_16= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA282_0 = input.LA(1);
+
+                         
+                        int index282_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA282_0==60) ) {s = 1;}
+
+                        else if ( (LA282_0==EOF) ) {s = 2;}
+
+                        else if ( LA282_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 3;}
+
+                        else if ( (LA282_0==31||LA282_0==65) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( (LA282_0==38||LA282_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( (LA282_0==44||LA282_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( (LA282_0==50||LA282_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 7;}
+
+                        else if ( (LA282_0==51||LA282_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 8;}
+
+                        else if ( (LA282_0==52||LA282_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 9;}
+
+                        else if ( (LA282_0==53||LA282_0==62||LA282_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 10;}
+
+                         
+                        input.seek(index282_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 282, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA284_eotS =
+        "\13\uffff";
+    static final String DFA284_eofS =
+        "\1\2\12\uffff";
+    static final String DFA284_minS =
+        "\1\37\12\uffff";
+    static final String DFA284_maxS =
+        "\1\107\12\uffff";
+    static final String DFA284_acceptS =
+        "\1\uffff\1\1\11\2";
+    static final String DFA284_specialS =
+        "\1\0\12\uffff}>";
+    static final String[] DFA284_transitionS = {
+            "\1\4\6\uffff\1\5\5\uffff\1\6\5\uffff\1\7\1\10\1\11\1\12\6\uffff"+
+            "\1\1\1\3\1\12\2\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA284_eot = DFA.unpackEncodedString(DFA284_eotS);
+    static final short[] DFA284_eof = DFA.unpackEncodedString(DFA284_eofS);
+    static final char[] DFA284_min = DFA.unpackEncodedStringToUnsignedChars(DFA284_minS);
+    static final char[] DFA284_max = DFA.unpackEncodedStringToUnsignedChars(DFA284_maxS);
+    static final short[] DFA284_accept = DFA.unpackEncodedString(DFA284_acceptS);
+    static final short[] DFA284_special = DFA.unpackEncodedString(DFA284_specialS);
+    static final short[][] DFA284_transition;
+
+    static {
+        int numStates = DFA284_transitionS.length;
+        DFA284_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA284_transition[i] = DFA.unpackEncodedString(DFA284_transitionS[i]);
+        }
+    }
+
+    class DFA284 extends DFA {
+
+        public DFA284(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 284;
+            this.eot = DFA284_eot;
+            this.eof = DFA284_eof;
+            this.min = DFA284_min;
+            this.max = DFA284_max;
+            this.accept = DFA284_accept;
+            this.special = DFA284_special;
+            this.transition = DFA284_transition;
+        }
+        public String getDescription() {
+            return "1349:2: (otherlv_19= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA284_0 = input.LA(1);
+
+                         
+                        int index284_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA284_0==60) ) {s = 1;}
+
+                        else if ( (LA284_0==EOF) ) {s = 2;}
+
+                        else if ( LA284_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 3;}
+
+                        else if ( (LA284_0==31||LA284_0==65) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( (LA284_0==38||LA284_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( (LA284_0==44||LA284_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( (LA284_0==50||LA284_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 7;}
+
+                        else if ( (LA284_0==51||LA284_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 8;}
+
+                        else if ( (LA284_0==52||LA284_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 9;}
+
+                        else if ( (LA284_0==53||LA284_0==62||LA284_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 10;}
+
+                         
+                        input.seek(index284_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 284, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA286_eotS =
+        "\13\uffff";
+    static final String DFA286_eofS =
+        "\1\2\12\uffff";
+    static final String DFA286_minS =
+        "\1\37\12\uffff";
+    static final String DFA286_maxS =
+        "\1\107\12\uffff";
+    static final String DFA286_acceptS =
+        "\1\uffff\1\1\11\2";
+    static final String DFA286_specialS =
+        "\1\0\12\uffff}>";
+    static final String[] DFA286_transitionS = {
+            "\1\4\6\uffff\1\5\5\uffff\1\6\5\uffff\1\7\1\10\1\11\1\12\6\uffff"+
+            "\1\1\1\3\1\12\2\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA286_eot = DFA.unpackEncodedString(DFA286_eotS);
+    static final short[] DFA286_eof = DFA.unpackEncodedString(DFA286_eofS);
+    static final char[] DFA286_min = DFA.unpackEncodedStringToUnsignedChars(DFA286_minS);
+    static final char[] DFA286_max = DFA.unpackEncodedStringToUnsignedChars(DFA286_maxS);
+    static final short[] DFA286_accept = DFA.unpackEncodedString(DFA286_acceptS);
+    static final short[] DFA286_special = DFA.unpackEncodedString(DFA286_specialS);
+    static final short[][] DFA286_transition;
+
+    static {
+        int numStates = DFA286_transitionS.length;
+        DFA286_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA286_transition[i] = DFA.unpackEncodedString(DFA286_transitionS[i]);
+        }
+    }
+
+    class DFA286 extends DFA {
+
+        public DFA286(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 286;
+            this.eot = DFA286_eot;
+            this.eof = DFA286_eof;
+            this.min = DFA286_min;
+            this.max = DFA286_max;
+            this.accept = DFA286_accept;
+            this.special = DFA286_special;
+            this.transition = DFA286_transition;
+        }
+        public String getDescription() {
+            return "1385:2: (otherlv_22= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA286_0 = input.LA(1);
+
+                         
+                        int index286_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA286_0==60) ) {s = 1;}
+
+                        else if ( (LA286_0==EOF) ) {s = 2;}
+
+                        else if ( LA286_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 3;}
+
+                        else if ( (LA286_0==31||LA286_0==65) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( (LA286_0==38||LA286_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( (LA286_0==44||LA286_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( (LA286_0==50||LA286_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 7;}
+
+                        else if ( (LA286_0==51||LA286_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 8;}
+
+                        else if ( (LA286_0==52||LA286_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 9;}
+
+                        else if ( (LA286_0==53||LA286_0==62||LA286_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 10;}
+
+                         
+                        input.seek(index286_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 286, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA288_eotS =
+        "\13\uffff";
+    static final String DFA288_eofS =
+        "\1\2\12\uffff";
+    static final String DFA288_minS =
+        "\1\37\12\uffff";
+    static final String DFA288_maxS =
+        "\1\107\12\uffff";
+    static final String DFA288_acceptS =
+        "\1\uffff\1\1\11\2";
+    static final String DFA288_specialS =
+        "\1\0\12\uffff}>";
+    static final String[] DFA288_transitionS = {
+            "\1\4\6\uffff\1\5\5\uffff\1\6\5\uffff\1\7\1\10\1\11\1\12\6\uffff"+
+            "\1\1\1\3\1\12\2\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA288_eot = DFA.unpackEncodedString(DFA288_eotS);
+    static final short[] DFA288_eof = DFA.unpackEncodedString(DFA288_eofS);
+    static final char[] DFA288_min = DFA.unpackEncodedStringToUnsignedChars(DFA288_minS);
+    static final char[] DFA288_max = DFA.unpackEncodedStringToUnsignedChars(DFA288_maxS);
+    static final short[] DFA288_accept = DFA.unpackEncodedString(DFA288_acceptS);
+    static final short[] DFA288_special = DFA.unpackEncodedString(DFA288_specialS);
+    static final short[][] DFA288_transition;
+
+    static {
+        int numStates = DFA288_transitionS.length;
+        DFA288_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA288_transition[i] = DFA.unpackEncodedString(DFA288_transitionS[i]);
+        }
+    }
+
+    class DFA288 extends DFA {
+
+        public DFA288(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 288;
+            this.eot = DFA288_eot;
+            this.eof = DFA288_eof;
+            this.min = DFA288_min;
+            this.max = DFA288_max;
+            this.accept = DFA288_accept;
+            this.special = DFA288_special;
+            this.transition = DFA288_transition;
+        }
+        public String getDescription() {
+            return "1421:2: (otherlv_25= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA288_0 = input.LA(1);
+
+                         
+                        int index288_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA288_0==60) ) {s = 1;}
+
+                        else if ( (LA288_0==EOF) ) {s = 2;}
+
+                        else if ( LA288_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 3;}
+
+                        else if ( (LA288_0==31||LA288_0==65) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( (LA288_0==38||LA288_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( (LA288_0==44||LA288_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( (LA288_0==50||LA288_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 7;}
+
+                        else if ( (LA288_0==51||LA288_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 8;}
+
+                        else if ( (LA288_0==52||LA288_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 9;}
+
+                        else if ( (LA288_0==53||LA288_0==62||LA288_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 10;}
+
+                         
+                        input.seek(index288_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 288, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA290_eotS =
+        "\13\uffff";
+    static final String DFA290_eofS =
+        "\1\2\12\uffff";
+    static final String DFA290_minS =
+        "\1\37\12\uffff";
+    static final String DFA290_maxS =
+        "\1\107\12\uffff";
+    static final String DFA290_acceptS =
+        "\1\uffff\1\1\11\2";
+    static final String DFA290_specialS =
+        "\1\0\12\uffff}>";
+    static final String[] DFA290_transitionS = {
+            "\1\4\6\uffff\1\5\5\uffff\1\6\5\uffff\1\7\1\10\1\11\1\12\6\uffff"+
+            "\1\1\1\3\1\12\2\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA290_eot = DFA.unpackEncodedString(DFA290_eotS);
+    static final short[] DFA290_eof = DFA.unpackEncodedString(DFA290_eofS);
+    static final char[] DFA290_min = DFA.unpackEncodedStringToUnsignedChars(DFA290_minS);
+    static final char[] DFA290_max = DFA.unpackEncodedStringToUnsignedChars(DFA290_maxS);
+    static final short[] DFA290_accept = DFA.unpackEncodedString(DFA290_acceptS);
+    static final short[] DFA290_special = DFA.unpackEncodedString(DFA290_specialS);
+    static final short[][] DFA290_transition;
+
+    static {
+        int numStates = DFA290_transitionS.length;
+        DFA290_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA290_transition[i] = DFA.unpackEncodedString(DFA290_transitionS[i]);
+        }
+    }
+
+    class DFA290 extends DFA {
+
+        public DFA290(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 290;
+            this.eot = DFA290_eot;
+            this.eof = DFA290_eof;
+            this.min = DFA290_min;
+            this.max = DFA290_max;
+            this.accept = DFA290_accept;
+            this.special = DFA290_special;
+            this.transition = DFA290_transition;
+        }
+        public String getDescription() {
+            return "1457:2: (otherlv_28= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA290_0 = input.LA(1);
+
+                         
+                        int index290_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA290_0==60) ) {s = 1;}
+
+                        else if ( (LA290_0==EOF) ) {s = 2;}
+
+                        else if ( LA290_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 3;}
+
+                        else if ( (LA290_0==31||LA290_0==65) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( (LA290_0==38||LA290_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( (LA290_0==44||LA290_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( (LA290_0==50||LA290_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 7;}
+
+                        else if ( (LA290_0==51||LA290_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 8;}
+
+                        else if ( (LA290_0==52||LA290_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 9;}
+
+                        else if ( (LA290_0==53||LA290_0==62||LA290_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 10;}
+
+                         
+                        input.seek(index290_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 290, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA292_eotS =
+        "\13\uffff";
+    static final String DFA292_eofS =
+        "\1\2\12\uffff";
+    static final String DFA292_minS =
+        "\1\37\12\uffff";
+    static final String DFA292_maxS =
+        "\1\107\12\uffff";
+    static final String DFA292_acceptS =
+        "\1\uffff\1\1\11\2";
+    static final String DFA292_specialS =
+        "\1\0\12\uffff}>";
+    static final String[] DFA292_transitionS = {
+            "\1\4\6\uffff\1\5\5\uffff\1\6\5\uffff\1\7\1\10\1\11\1\12\6\uffff"+
+            "\1\1\1\3\1\12\2\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA292_eot = DFA.unpackEncodedString(DFA292_eotS);
+    static final short[] DFA292_eof = DFA.unpackEncodedString(DFA292_eofS);
+    static final char[] DFA292_min = DFA.unpackEncodedStringToUnsignedChars(DFA292_minS);
+    static final char[] DFA292_max = DFA.unpackEncodedStringToUnsignedChars(DFA292_maxS);
+    static final short[] DFA292_accept = DFA.unpackEncodedString(DFA292_acceptS);
+    static final short[] DFA292_special = DFA.unpackEncodedString(DFA292_specialS);
+    static final short[][] DFA292_transition;
+
+    static {
+        int numStates = DFA292_transitionS.length;
+        DFA292_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA292_transition[i] = DFA.unpackEncodedString(DFA292_transitionS[i]);
+        }
+    }
+
+    class DFA292 extends DFA {
+
+        public DFA292(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 292;
+            this.eot = DFA292_eot;
+            this.eof = DFA292_eof;
+            this.min = DFA292_min;
+            this.max = DFA292_max;
+            this.accept = DFA292_accept;
+            this.special = DFA292_special;
+            this.transition = DFA292_transition;
+        }
+        public String getDescription() {
+            return "1493:2: (otherlv_31= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA292_0 = input.LA(1);
+
+                         
+                        int index292_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA292_0==60) ) {s = 1;}
+
+                        else if ( (LA292_0==EOF) ) {s = 2;}
+
+                        else if ( LA292_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 0) ) {s = 3;}
+
+                        else if ( (LA292_0==31||LA292_0==65) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 1) ) {s = 4;}
+
+                        else if ( (LA292_0==38||LA292_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 2) ) {s = 5;}
+
+                        else if ( (LA292_0==44||LA292_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 3) ) {s = 6;}
+
+                        else if ( (LA292_0==50||LA292_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 4) ) {s = 7;}
+
+                        else if ( (LA292_0==51||LA292_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 5) ) {s = 8;}
+
+                        else if ( (LA292_0==52||LA292_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 6) ) {s = 9;}
+
+                        else if ( (LA292_0==53||LA292_0==62||LA292_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeCSAccess().getUnorderedGroup_5(), 7) ) {s = 10;}
+
+                         
+                        input.seek(index292_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 292, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA404_eotS =
+        "\24\uffff";
+    static final String DFA404_eofS =
+        "\1\1\23\uffff";
+    static final String DFA404_minS =
+        "\1\34\23\uffff";
+    static final String DFA404_maxS =
+        "\1\117\23\uffff";
+    static final String DFA404_acceptS =
+        "\1\uffff\1\12\1\1\2\2\2\3\2\4\2\5\2\6\2\7\2\10\3\11";
+    static final String DFA404_specialS =
+        "\1\0\23\uffff}>";
+    static final String[] DFA404_transitionS = {
+            "\1\3\11\uffff\1\5\5\uffff\1\7\1\uffff\1\11\3\uffff\1\13\1\16"+
+            "\1\17\1\21\7\uffff\1\2\1\23\1\uffff\1\4\1\uffff\1\6\1\10\1\14"+
+            "\1\15\1\20\1\22\7\uffff\1\12",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA404_eot = DFA.unpackEncodedString(DFA404_eotS);
+    static final short[] DFA404_eof = DFA.unpackEncodedString(DFA404_eofS);
+    static final char[] DFA404_min = DFA.unpackEncodedStringToUnsignedChars(DFA404_minS);
+    static final char[] DFA404_max = DFA.unpackEncodedStringToUnsignedChars(DFA404_maxS);
+    static final short[] DFA404_accept = DFA.unpackEncodedString(DFA404_acceptS);
+    static final short[] DFA404_special = DFA.unpackEncodedString(DFA404_specialS);
+    static final short[][] DFA404_transition;
+
+    static {
+        int numStates = DFA404_transitionS.length;
+        DFA404_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA404_transition[i] = DFA.unpackEncodedString(DFA404_transitionS[i]);
+        }
+    }
+
+    class DFA404 extends DFA {
+
+        public DFA404(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 404;
+            this.eot = DFA404_eot;
+            this.eof = DFA404_eof;
+            this.min = DFA404_min;
+            this.max = DFA404_max;
+            this.accept = DFA404_accept;
+            this.special = DFA404_special;
+            this.transition = DFA404_transition;
+        }
+        public String getDescription() {
+            return "()+ loopback of 3744:3: ( ({...}? => ( ({...}? => (otherlv_12= '{' ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isDerived_16_0= 'derived' ) ) | otherlv_17= '!derived' ) (otherlv_18= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isOrdered_19_0= 'ordered' ) ) | otherlv_20= '!ordered' ) (otherlv_21= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isReadonly_22_0= 'readonly' ) ) | otherlv_23= '!readonly' ) (otherlv_24= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isResolve_25_0= 'resolve' ) ) | otherlv_26= '!resolve' ) (otherlv_27= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isTransient_28_0= 'transient' ) ) | otherlv_29= '!transient' ) (otherlv_30= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isNotUnique_31_0= '!unique' ) ) | otherlv_32= 'unique' ) (otherlv_33= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_isUnsettable_34_0= 'unsettable' ) ) | otherlv_35= '!unsettable' ) (otherlv_36= ',' )? ) ) ) ) | ({...}? => ( ({...}? => ( ( ( ( (lv_isVolatile_37_0= 'volatile' ) ) | otherlv_38= '!volatile' ) (otherlv_39= ',' )? )? otherlv_40= '}' ) ) ) ) )+";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA404_0 = input.LA(1);
+
+                         
+                        int index404_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA404_0==EOF) ) {s = 1;}
+
+                        else if ( LA404_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 2;}
+
+                        else if ( LA404_0 ==28 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 3;}
+
+                        else if ( LA404_0 ==64 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( LA404_0 ==38 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( LA404_0 ==66 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 6;}
+
+                        else if ( LA404_0 ==44 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 7;}
+
+                        else if ( LA404_0 ==67 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 8;}
+
+                        else if ( LA404_0 ==46 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 9;}
+
+                        else if ( LA404_0 ==79 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 10;}
+
+                        else if ( LA404_0 ==50 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 11;}
+
+                        else if ( LA404_0 ==68 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 12;}
+
+                        else if ( LA404_0 ==69 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 13;}
+
+                        else if ( LA404_0 ==51 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 14;}
+
+                        else if ( LA404_0 ==52 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 15;}
+
+                        else if ( LA404_0 ==70 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 16;}
+
+                        else if ( LA404_0 ==53 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 17;}
+
+                        else if ( LA404_0 ==71 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 18;}
+
+                        else if ( LA404_0 ==62 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 19;}
+
+                         
+                        input.seek(index404_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 404, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA386_eotS =
+        "\14\uffff";
+    static final String DFA386_eofS =
+        "\1\2\13\uffff";
+    static final String DFA386_minS =
+        "\1\30\13\uffff";
+    static final String DFA386_maxS =
+        "\1\117\13\uffff";
+    static final String DFA386_acceptS =
+        "\1\uffff\1\1\12\2";
+    static final String DFA386_specialS =
+        "\1\0\13\uffff}>";
+    static final String[] DFA386_transitionS = {
+            "\1\1\3\uffff\1\4\11\uffff\1\5\5\uffff\1\6\1\uffff\1\7\3\uffff"+
+            "\1\10\1\11\1\12\1\13\7\uffff\1\3\1\13\1\uffff\1\4\1\uffff\1"+
+            "\5\1\6\1\10\1\11\1\12\1\13\6\uffff\1\1\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA386_eot = DFA.unpackEncodedString(DFA386_eotS);
+    static final short[] DFA386_eof = DFA.unpackEncodedString(DFA386_eofS);
+    static final char[] DFA386_min = DFA.unpackEncodedStringToUnsignedChars(DFA386_minS);
+    static final char[] DFA386_max = DFA.unpackEncodedStringToUnsignedChars(DFA386_maxS);
+    static final short[] DFA386_accept = DFA.unpackEncodedString(DFA386_acceptS);
+    static final short[] DFA386_special = DFA.unpackEncodedString(DFA386_specialS);
+    static final short[][] DFA386_transition;
+
+    static {
+        int numStates = DFA386_transitionS.length;
+        DFA386_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA386_transition[i] = DFA.unpackEncodedString(DFA386_transitionS[i]);
+        }
+    }
+
+    class DFA386 extends DFA {
+
+        public DFA386(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 386;
+            this.eot = DFA386_eot;
+            this.eof = DFA386_eof;
+            this.min = DFA386_min;
+            this.max = DFA386_max;
+            this.accept = DFA386_accept;
+            this.special = DFA386_special;
+            this.transition = DFA386_transition;
+        }
+        public String getDescription() {
+            return "3755:1: ( ( ( (lv_isComposes_13_0= 'composes' ) ) | otherlv_14= '!composes' ) (otherlv_15= ',' )? )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA386_0 = input.LA(1);
+
+                         
+                        int index386_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA386_0==24||LA386_0==78) ) {s = 1;}
+
+                        else if ( (LA386_0==EOF) ) {s = 2;}
+
+                        else if ( LA386_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 3;}
+
+                        else if ( (LA386_0==28||LA386_0==64) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( (LA386_0==38||LA386_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( (LA386_0==44||LA386_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( (LA386_0==46||LA386_0==79) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 7;}
+
+                        else if ( (LA386_0==50||LA386_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 8;}
+
+                        else if ( (LA386_0==51||LA386_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 9;}
+
+                        else if ( (LA386_0==52||LA386_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 10;}
+
+                        else if ( (LA386_0==53||LA386_0==62||LA386_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 11;}
+
+                         
+                        input.seek(index386_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 386, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA385_eotS =
+        "\14\uffff";
+    static final String DFA385_eofS =
+        "\1\2\13\uffff";
+    static final String DFA385_minS =
+        "\1\34\13\uffff";
+    static final String DFA385_maxS =
+        "\1\117\13\uffff";
+    static final String DFA385_acceptS =
+        "\1\uffff\1\1\12\2";
+    static final String DFA385_specialS =
+        "\1\0\13\uffff}>";
+    static final String[] DFA385_transitionS = {
+            "\1\4\11\uffff\1\5\5\uffff\1\6\1\uffff\1\7\3\uffff\1\10\1\11"+
+            "\1\12\1\13\6\uffff\1\1\1\3\1\13\1\uffff\1\4\1\uffff\1\5\1\6"+
+            "\1\10\1\11\1\12\1\13\7\uffff\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA385_eot = DFA.unpackEncodedString(DFA385_eotS);
+    static final short[] DFA385_eof = DFA.unpackEncodedString(DFA385_eofS);
+    static final char[] DFA385_min = DFA.unpackEncodedStringToUnsignedChars(DFA385_minS);
+    static final char[] DFA385_max = DFA.unpackEncodedStringToUnsignedChars(DFA385_maxS);
+    static final short[] DFA385_accept = DFA.unpackEncodedString(DFA385_acceptS);
+    static final short[] DFA385_special = DFA.unpackEncodedString(DFA385_specialS);
+    static final short[][] DFA385_transition;
+
+    static {
+        int numStates = DFA385_transitionS.length;
+        DFA385_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA385_transition[i] = DFA.unpackEncodedString(DFA385_transitionS[i]);
+        }
+    }
+
+    class DFA385 extends DFA {
+
+        public DFA385(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 385;
+            this.eot = DFA385_eot;
+            this.eof = DFA385_eof;
+            this.min = DFA385_min;
+            this.max = DFA385_max;
+            this.accept = DFA385_accept;
+            this.special = DFA385_special;
+            this.transition = DFA385_transition;
+        }
+        public String getDescription() {
+            return "3775:2: (otherlv_15= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA385_0 = input.LA(1);
+
+                         
+                        int index385_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA385_0==60) ) {s = 1;}
+
+                        else if ( (LA385_0==EOF) ) {s = 2;}
+
+                        else if ( LA385_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 3;}
+
+                        else if ( (LA385_0==28||LA385_0==64) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( (LA385_0==38||LA385_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( (LA385_0==44||LA385_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( (LA385_0==46||LA385_0==79) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 7;}
+
+                        else if ( (LA385_0==50||LA385_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 8;}
+
+                        else if ( (LA385_0==51||LA385_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 9;}
+
+                        else if ( (LA385_0==52||LA385_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 10;}
+
+                        else if ( (LA385_0==53||LA385_0==62||LA385_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 11;}
+
+                         
+                        input.seek(index385_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 385, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA388_eotS =
+        "\14\uffff";
+    static final String DFA388_eofS =
+        "\1\2\13\uffff";
+    static final String DFA388_minS =
+        "\1\34\13\uffff";
+    static final String DFA388_maxS =
+        "\1\117\13\uffff";
+    static final String DFA388_acceptS =
+        "\1\uffff\1\1\12\2";
+    static final String DFA388_specialS =
+        "\1\0\13\uffff}>";
+    static final String[] DFA388_transitionS = {
+            "\1\4\11\uffff\1\5\5\uffff\1\6\1\uffff\1\7\3\uffff\1\10\1\11"+
+            "\1\12\1\13\6\uffff\1\1\1\3\1\13\1\uffff\1\4\1\uffff\1\5\1\6"+
+            "\1\10\1\11\1\12\1\13\7\uffff\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA388_eot = DFA.unpackEncodedString(DFA388_eotS);
+    static final short[] DFA388_eof = DFA.unpackEncodedString(DFA388_eofS);
+    static final char[] DFA388_min = DFA.unpackEncodedStringToUnsignedChars(DFA388_minS);
+    static final char[] DFA388_max = DFA.unpackEncodedStringToUnsignedChars(DFA388_maxS);
+    static final short[] DFA388_accept = DFA.unpackEncodedString(DFA388_acceptS);
+    static final short[] DFA388_special = DFA.unpackEncodedString(DFA388_specialS);
+    static final short[][] DFA388_transition;
+
+    static {
+        int numStates = DFA388_transitionS.length;
+        DFA388_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA388_transition[i] = DFA.unpackEncodedString(DFA388_transitionS[i]);
+        }
+    }
+
+    class DFA388 extends DFA {
+
+        public DFA388(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 388;
+            this.eot = DFA388_eot;
+            this.eof = DFA388_eof;
+            this.min = DFA388_min;
+            this.max = DFA388_max;
+            this.accept = DFA388_accept;
+            this.special = DFA388_special;
+            this.transition = DFA388_transition;
+        }
+        public String getDescription() {
+            return "3811:2: (otherlv_18= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA388_0 = input.LA(1);
+
+                         
+                        int index388_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA388_0==60) ) {s = 1;}
+
+                        else if ( (LA388_0==EOF) ) {s = 2;}
+
+                        else if ( LA388_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 3;}
+
+                        else if ( (LA388_0==28||LA388_0==64) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( (LA388_0==38||LA388_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( (LA388_0==44||LA388_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( (LA388_0==46||LA388_0==79) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 7;}
+
+                        else if ( (LA388_0==50||LA388_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 8;}
+
+                        else if ( (LA388_0==51||LA388_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 9;}
+
+                        else if ( (LA388_0==52||LA388_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 10;}
+
+                        else if ( (LA388_0==53||LA388_0==62||LA388_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 11;}
+
+                         
+                        input.seek(index388_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 388, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA390_eotS =
+        "\14\uffff";
+    static final String DFA390_eofS =
+        "\1\2\13\uffff";
+    static final String DFA390_minS =
+        "\1\34\13\uffff";
+    static final String DFA390_maxS =
+        "\1\117\13\uffff";
+    static final String DFA390_acceptS =
+        "\1\uffff\1\1\12\2";
+    static final String DFA390_specialS =
+        "\1\0\13\uffff}>";
+    static final String[] DFA390_transitionS = {
+            "\1\4\11\uffff\1\5\5\uffff\1\6\1\uffff\1\7\3\uffff\1\10\1\11"+
+            "\1\12\1\13\6\uffff\1\1\1\3\1\13\1\uffff\1\4\1\uffff\1\5\1\6"+
+            "\1\10\1\11\1\12\1\13\7\uffff\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA390_eot = DFA.unpackEncodedString(DFA390_eotS);
+    static final short[] DFA390_eof = DFA.unpackEncodedString(DFA390_eofS);
+    static final char[] DFA390_min = DFA.unpackEncodedStringToUnsignedChars(DFA390_minS);
+    static final char[] DFA390_max = DFA.unpackEncodedStringToUnsignedChars(DFA390_maxS);
+    static final short[] DFA390_accept = DFA.unpackEncodedString(DFA390_acceptS);
+    static final short[] DFA390_special = DFA.unpackEncodedString(DFA390_specialS);
+    static final short[][] DFA390_transition;
+
+    static {
+        int numStates = DFA390_transitionS.length;
+        DFA390_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA390_transition[i] = DFA.unpackEncodedString(DFA390_transitionS[i]);
+        }
+    }
+
+    class DFA390 extends DFA {
+
+        public DFA390(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 390;
+            this.eot = DFA390_eot;
+            this.eof = DFA390_eof;
+            this.min = DFA390_min;
+            this.max = DFA390_max;
+            this.accept = DFA390_accept;
+            this.special = DFA390_special;
+            this.transition = DFA390_transition;
+        }
+        public String getDescription() {
+            return "3847:2: (otherlv_21= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA390_0 = input.LA(1);
+
+                         
+                        int index390_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA390_0==60) ) {s = 1;}
+
+                        else if ( (LA390_0==EOF) ) {s = 2;}
+
+                        else if ( LA390_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 3;}
+
+                        else if ( (LA390_0==28||LA390_0==64) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( (LA390_0==38||LA390_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( (LA390_0==44||LA390_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( (LA390_0==46||LA390_0==79) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 7;}
+
+                        else if ( (LA390_0==50||LA390_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 8;}
+
+                        else if ( (LA390_0==51||LA390_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 9;}
+
+                        else if ( (LA390_0==52||LA390_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 10;}
+
+                        else if ( (LA390_0==53||LA390_0==62||LA390_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 11;}
+
+                         
+                        input.seek(index390_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 390, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA392_eotS =
+        "\14\uffff";
+    static final String DFA392_eofS =
+        "\1\2\13\uffff";
+    static final String DFA392_minS =
+        "\1\34\13\uffff";
+    static final String DFA392_maxS =
+        "\1\117\13\uffff";
+    static final String DFA392_acceptS =
+        "\1\uffff\1\1\12\2";
+    static final String DFA392_specialS =
+        "\1\0\13\uffff}>";
+    static final String[] DFA392_transitionS = {
+            "\1\4\11\uffff\1\5\5\uffff\1\6\1\uffff\1\7\3\uffff\1\10\1\11"+
+            "\1\12\1\13\6\uffff\1\1\1\3\1\13\1\uffff\1\4\1\uffff\1\5\1\6"+
+            "\1\10\1\11\1\12\1\13\7\uffff\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA392_eot = DFA.unpackEncodedString(DFA392_eotS);
+    static final short[] DFA392_eof = DFA.unpackEncodedString(DFA392_eofS);
+    static final char[] DFA392_min = DFA.unpackEncodedStringToUnsignedChars(DFA392_minS);
+    static final char[] DFA392_max = DFA.unpackEncodedStringToUnsignedChars(DFA392_maxS);
+    static final short[] DFA392_accept = DFA.unpackEncodedString(DFA392_acceptS);
+    static final short[] DFA392_special = DFA.unpackEncodedString(DFA392_specialS);
+    static final short[][] DFA392_transition;
+
+    static {
+        int numStates = DFA392_transitionS.length;
+        DFA392_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA392_transition[i] = DFA.unpackEncodedString(DFA392_transitionS[i]);
+        }
+    }
+
+    class DFA392 extends DFA {
+
+        public DFA392(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 392;
+            this.eot = DFA392_eot;
+            this.eof = DFA392_eof;
+            this.min = DFA392_min;
+            this.max = DFA392_max;
+            this.accept = DFA392_accept;
+            this.special = DFA392_special;
+            this.transition = DFA392_transition;
+        }
+        public String getDescription() {
+            return "3883:2: (otherlv_24= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA392_0 = input.LA(1);
+
+                         
+                        int index392_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA392_0==60) ) {s = 1;}
+
+                        else if ( (LA392_0==EOF) ) {s = 2;}
+
+                        else if ( LA392_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 3;}
+
+                        else if ( (LA392_0==28||LA392_0==64) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( (LA392_0==38||LA392_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( (LA392_0==44||LA392_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( (LA392_0==46||LA392_0==79) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 7;}
+
+                        else if ( (LA392_0==50||LA392_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 8;}
+
+                        else if ( (LA392_0==51||LA392_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 9;}
+
+                        else if ( (LA392_0==52||LA392_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 10;}
+
+                        else if ( (LA392_0==53||LA392_0==62||LA392_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 11;}
+
+                         
+                        input.seek(index392_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 392, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA394_eotS =
+        "\14\uffff";
+    static final String DFA394_eofS =
+        "\1\2\13\uffff";
+    static final String DFA394_minS =
+        "\1\34\13\uffff";
+    static final String DFA394_maxS =
+        "\1\117\13\uffff";
+    static final String DFA394_acceptS =
+        "\1\uffff\1\1\12\2";
+    static final String DFA394_specialS =
+        "\1\0\13\uffff}>";
+    static final String[] DFA394_transitionS = {
+            "\1\4\11\uffff\1\5\5\uffff\1\6\1\uffff\1\7\3\uffff\1\10\1\11"+
+            "\1\12\1\13\6\uffff\1\1\1\3\1\13\1\uffff\1\4\1\uffff\1\5\1\6"+
+            "\1\10\1\11\1\12\1\13\7\uffff\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA394_eot = DFA.unpackEncodedString(DFA394_eotS);
+    static final short[] DFA394_eof = DFA.unpackEncodedString(DFA394_eofS);
+    static final char[] DFA394_min = DFA.unpackEncodedStringToUnsignedChars(DFA394_minS);
+    static final char[] DFA394_max = DFA.unpackEncodedStringToUnsignedChars(DFA394_maxS);
+    static final short[] DFA394_accept = DFA.unpackEncodedString(DFA394_acceptS);
+    static final short[] DFA394_special = DFA.unpackEncodedString(DFA394_specialS);
+    static final short[][] DFA394_transition;
+
+    static {
+        int numStates = DFA394_transitionS.length;
+        DFA394_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA394_transition[i] = DFA.unpackEncodedString(DFA394_transitionS[i]);
+        }
+    }
+
+    class DFA394 extends DFA {
+
+        public DFA394(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 394;
+            this.eot = DFA394_eot;
+            this.eof = DFA394_eof;
+            this.min = DFA394_min;
+            this.max = DFA394_max;
+            this.accept = DFA394_accept;
+            this.special = DFA394_special;
+            this.transition = DFA394_transition;
+        }
+        public String getDescription() {
+            return "3919:2: (otherlv_27= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA394_0 = input.LA(1);
+
+                         
+                        int index394_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA394_0==60) ) {s = 1;}
+
+                        else if ( (LA394_0==EOF) ) {s = 2;}
+
+                        else if ( LA394_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 3;}
+
+                        else if ( (LA394_0==28||LA394_0==64) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( (LA394_0==38||LA394_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( (LA394_0==44||LA394_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( (LA394_0==46||LA394_0==79) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 7;}
+
+                        else if ( (LA394_0==50||LA394_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 8;}
+
+                        else if ( (LA394_0==51||LA394_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 9;}
+
+                        else if ( (LA394_0==52||LA394_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 10;}
+
+                        else if ( (LA394_0==53||LA394_0==62||LA394_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 11;}
+
+                         
+                        input.seek(index394_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 394, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA396_eotS =
+        "\14\uffff";
+    static final String DFA396_eofS =
+        "\1\2\13\uffff";
+    static final String DFA396_minS =
+        "\1\34\13\uffff";
+    static final String DFA396_maxS =
+        "\1\117\13\uffff";
+    static final String DFA396_acceptS =
+        "\1\uffff\1\1\12\2";
+    static final String DFA396_specialS =
+        "\1\0\13\uffff}>";
+    static final String[] DFA396_transitionS = {
+            "\1\4\11\uffff\1\5\5\uffff\1\6\1\uffff\1\7\3\uffff\1\10\1\11"+
+            "\1\12\1\13\6\uffff\1\1\1\3\1\13\1\uffff\1\4\1\uffff\1\5\1\6"+
+            "\1\10\1\11\1\12\1\13\7\uffff\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA396_eot = DFA.unpackEncodedString(DFA396_eotS);
+    static final short[] DFA396_eof = DFA.unpackEncodedString(DFA396_eofS);
+    static final char[] DFA396_min = DFA.unpackEncodedStringToUnsignedChars(DFA396_minS);
+    static final char[] DFA396_max = DFA.unpackEncodedStringToUnsignedChars(DFA396_maxS);
+    static final short[] DFA396_accept = DFA.unpackEncodedString(DFA396_acceptS);
+    static final short[] DFA396_special = DFA.unpackEncodedString(DFA396_specialS);
+    static final short[][] DFA396_transition;
+
+    static {
+        int numStates = DFA396_transitionS.length;
+        DFA396_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA396_transition[i] = DFA.unpackEncodedString(DFA396_transitionS[i]);
+        }
+    }
+
+    class DFA396 extends DFA {
+
+        public DFA396(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 396;
+            this.eot = DFA396_eot;
+            this.eof = DFA396_eof;
+            this.min = DFA396_min;
+            this.max = DFA396_max;
+            this.accept = DFA396_accept;
+            this.special = DFA396_special;
+            this.transition = DFA396_transition;
+        }
+        public String getDescription() {
+            return "3955:2: (otherlv_30= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA396_0 = input.LA(1);
+
+                         
+                        int index396_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA396_0==60) ) {s = 1;}
+
+                        else if ( (LA396_0==EOF) ) {s = 2;}
+
+                        else if ( LA396_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 3;}
+
+                        else if ( (LA396_0==28||LA396_0==64) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( (LA396_0==38||LA396_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( (LA396_0==44||LA396_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( (LA396_0==46||LA396_0==79) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 7;}
+
+                        else if ( (LA396_0==50||LA396_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 8;}
+
+                        else if ( (LA396_0==51||LA396_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 9;}
+
+                        else if ( (LA396_0==52||LA396_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 10;}
+
+                        else if ( (LA396_0==53||LA396_0==62||LA396_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 11;}
+
+                         
+                        input.seek(index396_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 396, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA398_eotS =
+        "\14\uffff";
+    static final String DFA398_eofS =
+        "\1\2\13\uffff";
+    static final String DFA398_minS =
+        "\1\34\13\uffff";
+    static final String DFA398_maxS =
+        "\1\117\13\uffff";
+    static final String DFA398_acceptS =
+        "\1\uffff\1\1\12\2";
+    static final String DFA398_specialS =
+        "\1\0\13\uffff}>";
+    static final String[] DFA398_transitionS = {
+            "\1\4\11\uffff\1\5\5\uffff\1\6\1\uffff\1\7\3\uffff\1\10\1\11"+
+            "\1\12\1\13\6\uffff\1\1\1\3\1\13\1\uffff\1\4\1\uffff\1\5\1\6"+
+            "\1\10\1\11\1\12\1\13\7\uffff\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA398_eot = DFA.unpackEncodedString(DFA398_eotS);
+    static final short[] DFA398_eof = DFA.unpackEncodedString(DFA398_eofS);
+    static final char[] DFA398_min = DFA.unpackEncodedStringToUnsignedChars(DFA398_minS);
+    static final char[] DFA398_max = DFA.unpackEncodedStringToUnsignedChars(DFA398_maxS);
+    static final short[] DFA398_accept = DFA.unpackEncodedString(DFA398_acceptS);
+    static final short[] DFA398_special = DFA.unpackEncodedString(DFA398_specialS);
+    static final short[][] DFA398_transition;
+
+    static {
+        int numStates = DFA398_transitionS.length;
+        DFA398_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA398_transition[i] = DFA.unpackEncodedString(DFA398_transitionS[i]);
+        }
+    }
+
+    class DFA398 extends DFA {
+
+        public DFA398(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 398;
+            this.eot = DFA398_eot;
+            this.eof = DFA398_eof;
+            this.min = DFA398_min;
+            this.max = DFA398_max;
+            this.accept = DFA398_accept;
+            this.special = DFA398_special;
+            this.transition = DFA398_transition;
+        }
+        public String getDescription() {
+            return "3991:2: (otherlv_33= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA398_0 = input.LA(1);
+
+                         
+                        int index398_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA398_0==60) ) {s = 1;}
+
+                        else if ( (LA398_0==EOF) ) {s = 2;}
+
+                        else if ( LA398_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 3;}
+
+                        else if ( (LA398_0==28||LA398_0==64) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( (LA398_0==38||LA398_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( (LA398_0==44||LA398_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( (LA398_0==46||LA398_0==79) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 7;}
+
+                        else if ( (LA398_0==50||LA398_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 8;}
+
+                        else if ( (LA398_0==51||LA398_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 9;}
+
+                        else if ( (LA398_0==52||LA398_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 10;}
+
+                        else if ( (LA398_0==53||LA398_0==62||LA398_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 11;}
+
+                         
+                        input.seek(index398_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 398, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA400_eotS =
+        "\14\uffff";
+    static final String DFA400_eofS =
+        "\1\2\13\uffff";
+    static final String DFA400_minS =
+        "\1\34\13\uffff";
+    static final String DFA400_maxS =
+        "\1\117\13\uffff";
+    static final String DFA400_acceptS =
+        "\1\uffff\1\1\12\2";
+    static final String DFA400_specialS =
+        "\1\0\13\uffff}>";
+    static final String[] DFA400_transitionS = {
+            "\1\4\11\uffff\1\5\5\uffff\1\6\1\uffff\1\7\3\uffff\1\10\1\11"+
+            "\1\12\1\13\6\uffff\1\1\1\3\1\13\1\uffff\1\4\1\uffff\1\5\1\6"+
+            "\1\10\1\11\1\12\1\13\7\uffff\1\7",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA400_eot = DFA.unpackEncodedString(DFA400_eotS);
+    static final short[] DFA400_eof = DFA.unpackEncodedString(DFA400_eofS);
+    static final char[] DFA400_min = DFA.unpackEncodedStringToUnsignedChars(DFA400_minS);
+    static final char[] DFA400_max = DFA.unpackEncodedStringToUnsignedChars(DFA400_maxS);
+    static final short[] DFA400_accept = DFA.unpackEncodedString(DFA400_acceptS);
+    static final short[] DFA400_special = DFA.unpackEncodedString(DFA400_specialS);
+    static final short[][] DFA400_transition;
+
+    static {
+        int numStates = DFA400_transitionS.length;
+        DFA400_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA400_transition[i] = DFA.unpackEncodedString(DFA400_transitionS[i]);
+        }
+    }
+
+    class DFA400 extends DFA {
+
+        public DFA400(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 400;
+            this.eot = DFA400_eot;
+            this.eof = DFA400_eof;
+            this.min = DFA400_min;
+            this.max = DFA400_max;
+            this.accept = DFA400_accept;
+            this.special = DFA400_special;
+            this.transition = DFA400_transition;
+        }
+        public String getDescription() {
+            return "4027:2: (otherlv_36= ',' )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA400_0 = input.LA(1);
+
+                         
+                        int index400_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA400_0==60) ) {s = 1;}
+
+                        else if ( (LA400_0==EOF) ) {s = 2;}
+
+                        else if ( LA400_0 ==61 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 0) ) {s = 3;}
+
+                        else if ( (LA400_0==28||LA400_0==64) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 1) ) {s = 4;}
+
+                        else if ( (LA400_0==38||LA400_0==66) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 2) ) {s = 5;}
+
+                        else if ( (LA400_0==44||LA400_0==67) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 3) ) {s = 6;}
+
+                        else if ( (LA400_0==46||LA400_0==79) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 4) ) {s = 7;}
+
+                        else if ( (LA400_0==50||LA400_0==68) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 5) ) {s = 8;}
+
+                        else if ( (LA400_0==51||LA400_0==69) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 6) ) {s = 9;}
+
+                        else if ( (LA400_0==52||LA400_0==70) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 7) ) {s = 10;}
+
+                        else if ( (LA400_0==53||LA400_0==62||LA400_0==71) && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceCSAccess().getUnorderedGroup_6(), 8) ) {s = 11;}
+
+                         
+                        input.seek(index400_0);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 400, _s, input);
+            error(nvae);
+            throw nvae;
         }
     }
  
@@ -30084,780 +40056,950 @@
         public static final BitSet FOLLOW_ruleAnnotationCS_in_ruleAnnotationElementCS2290 = new BitSet(new long[]{0x0000000000000002L});
         public static final BitSet FOLLOW_ruleDocumentationCS_in_ruleAnnotationElementCS2320 = new BitSet(new long[]{0x0000000000000002L});
         public static final BitSet FOLLOW_ruleSysMLCS_in_ruleAnnotationElementCS2350 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAttributeCS_in_entryRuleAttributeCS2385 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleAttributeCS2395 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_47_in_ruleAttributeCS2440 = new BitSet(new long[]{0x0000000004100000L});
-        public static final BitSet FOLLOW_26_in_ruleAttributeCS2471 = new BitSet(new long[]{0x0000000000100000L});
-        public static final BitSet FOLLOW_26_in_ruleAttributeCS2511 = new BitSet(new long[]{0x0000800000100000L});
-        public static final BitSet FOLLOW_47_in_ruleAttributeCS2542 = new BitSet(new long[]{0x0000000000100000L});
-        public static final BitSet FOLLOW_20_in_ruleAttributeCS2571 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS2592 = new BitSet(new long[]{0xA600000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleAttributeCS2605 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_ruleAttributeCS2626 = new BitSet(new long[]{0xA400000000000000L});
-        public static final BitSet FOLLOW_63_in_ruleAttributeCS2641 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleAttributeCS2658 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleAttributeCS2678 = new BitSet(new long[]{0x003C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_28_in_ruleAttributeCS2698 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_64_in_ruleAttributeCS2735 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_31_in_ruleAttributeCS2772 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_65_in_ruleAttributeCS2809 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_38_in_ruleAttributeCS2846 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_66_in_ruleAttributeCS2883 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_44_in_ruleAttributeCS2920 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_67_in_ruleAttributeCS2957 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_50_in_ruleAttributeCS2994 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_68_in_ruleAttributeCS3031 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_51_in_ruleAttributeCS3068 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_69_in_ruleAttributeCS3105 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_52_in_ruleAttributeCS3142 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_70_in_ruleAttributeCS3179 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_53_in_ruleAttributeCS3216 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_71_in_ruleAttributeCS3253 = new BitSet(new long[]{0x503C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_60_in_ruleAttributeCS3280 = new BitSet(new long[]{0x403C104090000000L,0x00000000000000FFL});
-        public static final BitSet FOLLOW_62_in_ruleAttributeCS3296 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleAttributeCS3312 = new BitSet(new long[]{0x4800000208000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleAttributeCS3334 = new BitSet(new long[]{0x4800000208000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_27_in_ruleAttributeCS3353 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS3373 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleAttributeCS3386 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleAttributeCS3407 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleAttributeCS3420 = new BitSet(new long[]{0x4800000208000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_33_in_ruleAttributeCS3440 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS3460 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleAttributeCS3473 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleAttributeCS3494 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleAttributeCS3507 = new BitSet(new long[]{0x4800000208000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_62_in_ruleAttributeCS3522 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_ruleAttributeCS3541 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleClassCS_in_entryRuleClassCS3578 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleClassCS3588 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStructuredClassCS_in_ruleClassCS3638 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDataTypeCS_in_ruleClassCS3668 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationCS_in_ruleClassCS3698 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDataTypeCS_in_entryRuleDataTypeCS3733 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDataTypeCS3743 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_42_in_ruleDataTypeCS3786 = new BitSet(new long[]{0x0000000002000000L});
-        public static final BitSet FOLLOW_25_in_ruleDataTypeCS3812 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleDataTypeCS3833 = new BitSet(new long[]{0x2680000000000000L,0x0000000000020000L});
-        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_ruleDataTypeCS3854 = new BitSet(new long[]{0x2600000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleDataTypeCS3868 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDataTypeCS3885 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleDataTypeCS3905 = new BitSet(new long[]{0x4000000000000000L,0x0000000000000300L});
-        public static final BitSet FOLLOW_72_in_ruleDataTypeCS3924 = new BitSet(new long[]{0x4000000000000000L});
-        public static final BitSet FOLLOW_73_in_ruleDataTypeCS3955 = new BitSet(new long[]{0x4000000000000000L});
-        public static final BitSet FOLLOW_62_in_ruleDataTypeCS3969 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleDataTypeCS3985 = new BitSet(new long[]{0x4840000000400000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleDataTypeCS4007 = new BitSet(new long[]{0x4840000000400000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_ruleDataTypeCS4034 = new BitSet(new long[]{0x4840000000400000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_62_in_ruleDataTypeCS4048 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_ruleDataTypeCS4067 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_entryRuleDetailCS4104 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDetailCS4114 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleDetailCS4162 = new BitSet(new long[]{0x8000000000000000L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDetailCS4177 = new BitSet(new long[]{0x8000000000000000L});
-        public static final BitSet FOLLOW_63_in_ruleDetailCS4197 = new BitSet(new long[]{0x0000000000000062L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDetailCS4216 = new BitSet(new long[]{0x0000000000000062L});
-        public static final BitSet FOLLOW_RULE_ML_SINGLE_QUOTED_STRING_in_ruleDetailCS4236 = new BitSet(new long[]{0x0000000000000062L});
-        public static final BitSet FOLLOW_ruleDocumentationCS_in_entryRuleDocumentationCS4281 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDocumentationCS4291 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_74_in_ruleDocumentationCS4340 = new BitSet(new long[]{0x0480000000000020L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDocumentationCS4357 = new BitSet(new long[]{0x0480000000000000L});
-        public static final BitSet FOLLOW_55_in_ruleDocumentationCS4376 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_ruleDocumentationCS4397 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleDocumentationCS4410 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_ruleDocumentationCS4431 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_56_in_ruleDocumentationCS4445 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleDocumentationCS4459 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationCS_in_entryRuleEnumerationCS4495 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleEnumerationCS4505 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_29_in_ruleEnumerationCS4542 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleEnumerationCS4563 = new BitSet(new long[]{0x2680000000000000L,0x0000000000020000L});
-        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_ruleEnumerationCS4584 = new BitSet(new long[]{0x2600000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleEnumerationCS4598 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleEnumerationCS4615 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleEnumerationCS4635 = new BitSet(new long[]{0x4000000000000000L,0x0000000000000300L});
-        public static final BitSet FOLLOW_72_in_ruleEnumerationCS4654 = new BitSet(new long[]{0x4000000000000000L});
-        public static final BitSet FOLLOW_73_in_ruleEnumerationCS4685 = new BitSet(new long[]{0x4000000000000000L});
-        public static final BitSet FOLLOW_62_in_ruleEnumerationCS4699 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleEnumerationCS4715 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleEnumerationCS4737 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
-        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_ruleEnumerationCS4764 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
-        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_ruleEnumerationCS4791 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
-        public static final BitSet FOLLOW_62_in_ruleEnumerationCS4805 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_ruleEnumerationCS4824 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_entryRuleEnumerationLiteralCS4861 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleEnumerationLiteralCS4871 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_75_in_ruleEnumerationLiteralCS4910 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleEnumerationLiteralCS4931 = new BitSet(new long[]{0xA400000000000000L});
-        public static final BitSet FOLLOW_ruleEnumerationLiteralName_in_ruleEnumerationLiteralCS4959 = new BitSet(new long[]{0xA400000000000000L});
-        public static final BitSet FOLLOW_63_in_ruleEnumerationLiteralCS4973 = new BitSet(new long[]{0x0000000000040010L});
-        public static final BitSet FOLLOW_ruleSIGNED_in_ruleEnumerationLiteralCS4994 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleEnumerationLiteralCS5010 = new BitSet(new long[]{0x4800000000000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleEnumerationLiteralCS5031 = new BitSet(new long[]{0x4800000000000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_62_in_ruleEnumerationLiteralCS5044 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_ruleEnumerationLiteralCS5063 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleImportCS_in_entryRuleImportCS5100 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleImportCS5110 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_32_in_ruleImportCS5147 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleImportCS5169 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleImportCS5181 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleURIPathNameCS_in_ruleImportCS5204 = new BitSet(new long[]{0x0400000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_76_in_ruleImportCS5222 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleImportCS5248 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLibraryCS_in_entryRuleLibraryCS5284 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleLibraryCS5294 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_36_in_ruleLibraryCS5331 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleLibraryCS5353 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleLibraryCS5365 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleURI_in_ruleLibraryCS5394 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleLibraryCS5406 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleModelElementCS_in_entryRuleModelElementCS5442 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleModelElementCS5452 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleClassCS_in_ruleModelElementCS5502 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_ruleModelElementCS5532 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOperationCS_in_ruleModelElementCS5562 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePackageCS_in_ruleModelElementCS5592 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_ruleModelElementCS5622 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleModelElementRefCS_in_entryRuleModelElementRefCS5657 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleModelElementRefCS5667 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_45_in_ruleModelElementRefCS5704 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rulePathNameCS_in_ruleModelElementRefCS5725 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleModelElementRefCS5737 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOperationCS_in_entryRuleOperationCS5773 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOperationCS5783 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_47_in_ruleOperationCS5828 = new BitSet(new long[]{0x0000002004000000L});
-        public static final BitSet FOLLOW_26_in_ruleOperationCS5859 = new BitSet(new long[]{0x0000002000000000L});
-        public static final BitSet FOLLOW_26_in_ruleOperationCS5899 = new BitSet(new long[]{0x0000802000000000L});
-        public static final BitSet FOLLOW_47_in_ruleOperationCS5930 = new BitSet(new long[]{0x0000002000000000L});
-        public static final BitSet FOLLOW_37_in_ruleOperationCS5959 = new BitSet(new long[]{0x08FFFFFFFFFA0300L,0x0000000000030D00L});
-        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_ruleOperationCS5980 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleOperationCS6002 = new BitSet(new long[]{0x0080000000000000L});
-        public static final BitSet FOLLOW_55_in_ruleOperationCS6014 = new BitSet(new long[]{0x097FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleParameterCS_in_ruleOperationCS6036 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleOperationCS6049 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleParameterCS_in_ruleOperationCS6070 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_56_in_ruleOperationCS6086 = new BitSet(new long[]{0x2602000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleOperationCS6099 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_ruleOperationCS6120 = new BitSet(new long[]{0x2402000000000000L});
-        public static final BitSet FOLLOW_49_in_ruleOperationCS6135 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleOperationCS6156 = new BitSet(new long[]{0x3400000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleOperationCS6169 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleOperationCS6190 = new BitSet(new long[]{0x3400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleOperationCS6207 = new BitSet(new long[]{0x0008004010000000L,0x0000000000000025L});
-        public static final BitSet FOLLOW_28_in_ruleOperationCS6227 = new BitSet(new long[]{0x5008004010000000L,0x0000000000000025L});
-        public static final BitSet FOLLOW_64_in_ruleOperationCS6264 = new BitSet(new long[]{0x5008004010000000L,0x0000000000000025L});
-        public static final BitSet FOLLOW_38_in_ruleOperationCS6301 = new BitSet(new long[]{0x5008004010000000L,0x0000000000000025L});
-        public static final BitSet FOLLOW_66_in_ruleOperationCS6338 = new BitSet(new long[]{0x5008004010000000L,0x0000000000000025L});
-        public static final BitSet FOLLOW_51_in_ruleOperationCS6375 = new BitSet(new long[]{0x5008004010000000L,0x0000000000000025L});
-        public static final BitSet FOLLOW_69_in_ruleOperationCS6412 = new BitSet(new long[]{0x5008004010000000L,0x0000000000000025L});
-        public static final BitSet FOLLOW_60_in_ruleOperationCS6439 = new BitSet(new long[]{0x4008004010000000L,0x0000000000000025L});
-        public static final BitSet FOLLOW_62_in_ruleOperationCS6455 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleOperationCS6471 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleOperationCS6493 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_rulePreconditionConstraintCS_in_ruleOperationCS6520 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_21_in_ruleOperationCS6539 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleOperationCS6559 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleOperationCS6572 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleOperationCS6593 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleOperationCS6606 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_rulePostconditionConstraintCS_in_ruleOperationCS6634 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_62_in_ruleOperationCS6648 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_ruleOperationCS6667 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePackageCS_in_entryRulePackageCS6704 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePackageCS6714 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_39_in_rulePackageCS6751 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rulePackageCS6772 = new BitSet(new long[]{0xA600000000000000L});
-        public static final BitSet FOLLOW_57_in_rulePackageCS6785 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rulePackageCS6806 = new BitSet(new long[]{0xA400000000000000L});
-        public static final BitSet FOLLOW_63_in_rulePackageCS6821 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleURI_in_rulePackageCS6842 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_rulePackageCS6858 = new BitSet(new long[]{0x4800048022880000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rulePackageCS6880 = new BitSet(new long[]{0x4800048022880000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_rulePackageCS_in_rulePackageCS6907 = new BitSet(new long[]{0x4800048022880000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_ruleClassCS_in_rulePackageCS6934 = new BitSet(new long[]{0x4800048022880000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_62_in_rulePackageCS6948 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_rulePackageCS6967 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleParameterCS_in_entryRuleParameterCS7004 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleParameterCS7014 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleParameterCS7060 = new BitSet(new long[]{0x2200000000000002L});
-        public static final BitSet FOLLOW_57_in_ruleParameterCS7073 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_ruleParameterCS7094 = new BitSet(new long[]{0x2000000000000002L});
-        public static final BitSet FOLLOW_61_in_ruleParameterCS7109 = new BitSet(new long[]{0x0008004000000000L,0x0000000000000024L});
-        public static final BitSet FOLLOW_38_in_ruleParameterCS7129 = new BitSet(new long[]{0x5008004000000000L,0x0000000000000024L});
-        public static final BitSet FOLLOW_66_in_ruleParameterCS7166 = new BitSet(new long[]{0x5008004000000000L,0x0000000000000024L});
-        public static final BitSet FOLLOW_51_in_ruleParameterCS7203 = new BitSet(new long[]{0x5008004000000000L,0x0000000000000024L});
-        public static final BitSet FOLLOW_69_in_ruleParameterCS7240 = new BitSet(new long[]{0x5008004000000000L,0x0000000000000024L});
-        public static final BitSet FOLLOW_60_in_ruleParameterCS7267 = new BitSet(new long[]{0x4008004000000000L,0x0000000000000024L});
-        public static final BitSet FOLLOW_62_in_ruleParameterCS7283 = new BitSet(new long[]{0x2000000000000002L});
-        public static final BitSet FOLLOW_61_in_ruleParameterCS7298 = new BitSet(new long[]{0x4800000000000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleParameterCS7319 = new BitSet(new long[]{0x4800000000000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_62_in_ruleParameterCS7332 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleReferenceCS_in_entryRuleReferenceCS7370 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleReferenceCS7380 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_47_in_ruleReferenceCS7425 = new BitSet(new long[]{0x0000080004000000L});
-        public static final BitSet FOLLOW_26_in_ruleReferenceCS7456 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_26_in_ruleReferenceCS7496 = new BitSet(new long[]{0x0000880000000000L});
-        public static final BitSet FOLLOW_47_in_ruleReferenceCS7527 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_43_in_ruleReferenceCS7556 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS7577 = new BitSet(new long[]{0xA600000000000000L,0x0000000000002000L});
-        public static final BitSet FOLLOW_77_in_ruleReferenceCS7590 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS7617 = new BitSet(new long[]{0xA600000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleReferenceCS7632 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_ruleReferenceCS7653 = new BitSet(new long[]{0xA400000000000000L});
-        public static final BitSet FOLLOW_63_in_ruleReferenceCS7668 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleReferenceCS7685 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleReferenceCS7705 = new BitSet(new long[]{0x003C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_24_in_ruleReferenceCS7725 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_78_in_ruleReferenceCS7762 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_28_in_ruleReferenceCS7799 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_64_in_ruleReferenceCS7836 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_38_in_ruleReferenceCS7873 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_66_in_ruleReferenceCS7910 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_44_in_ruleReferenceCS7947 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_67_in_ruleReferenceCS7984 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_46_in_ruleReferenceCS8021 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_79_in_ruleReferenceCS8058 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_50_in_ruleReferenceCS8095 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_68_in_ruleReferenceCS8132 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_51_in_ruleReferenceCS8169 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_69_in_ruleReferenceCS8206 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_52_in_ruleReferenceCS8243 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_70_in_ruleReferenceCS8280 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_53_in_ruleReferenceCS8317 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_71_in_ruleReferenceCS8354 = new BitSet(new long[]{0x503C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_60_in_ruleReferenceCS8381 = new BitSet(new long[]{0x403C504011000000L,0x000000000000C0FDL});
-        public static final BitSet FOLLOW_62_in_ruleReferenceCS8397 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleReferenceCS8413 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleReferenceCS8435 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_35_in_ruleReferenceCS8454 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8481 = new BitSet(new long[]{0x1400000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleReferenceCS8494 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8521 = new BitSet(new long[]{0x1400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleReferenceCS8535 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_27_in_ruleReferenceCS8555 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8575 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleReferenceCS8588 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleReferenceCS8609 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleReferenceCS8622 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_33_in_ruleReferenceCS8642 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8662 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleReferenceCS8675 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleReferenceCS8696 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleReferenceCS8709 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
-        public static final BitSet FOLLOW_62_in_ruleReferenceCS8724 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_ruleReferenceCS8743 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSpecificationCS_in_entryRuleSpecificationCS8780 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleSpecificationCS8790 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleSpecificationCS8836 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_UNQUOTED_STRING_in_ruleSpecificationCS8859 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStructuredClassCS_in_entryRuleStructuredClassCS8900 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleStructuredClassCS8910 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_19_in_ruleStructuredClassCS8953 = new BitSet(new long[]{0x0000000000800000L});
-        public static final BitSet FOLLOW_23_in_ruleStructuredClassCS8979 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleStructuredClassCS9000 = new BitSet(new long[]{0x2680000040000000L,0x0000000000020000L});
-        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_ruleStructuredClassCS9021 = new BitSet(new long[]{0x2600000040000000L});
-        public static final BitSet FOLLOW_30_in_ruleStructuredClassCS9035 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleStructuredClassCS9056 = new BitSet(new long[]{0x3600000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleStructuredClassCS9069 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleStructuredClassCS9090 = new BitSet(new long[]{0x3600000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleStructuredClassCS9107 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleStructuredClassCS9124 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleStructuredClassCS9144 = new BitSet(new long[]{0x4000000400000000L});
-        public static final BitSet FOLLOW_34_in_ruleStructuredClassCS9162 = new BitSet(new long[]{0x4000000000000000L});
-        public static final BitSet FOLLOW_62_in_ruleStructuredClassCS9188 = new BitSet(new long[]{0x2400000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleStructuredClassCS9204 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
-        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleStructuredClassCS9226 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
-        public static final BitSet FOLLOW_ruleOperationCS_in_ruleStructuredClassCS9253 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
-        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_ruleStructuredClassCS9280 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
-        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_ruleStructuredClassCS9307 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
-        public static final BitSet FOLLOW_62_in_ruleStructuredClassCS9321 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_ruleStructuredClassCS9340 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_entryRuleStructuralFeatureCS9377 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleStructuralFeatureCS9387 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAttributeCS_in_ruleStructuralFeatureCS9437 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleReferenceCS_in_ruleStructuralFeatureCS9467 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSysMLCS_in_entryRuleSysMLCS9502 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleSysMLCS9512 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_80_in_ruleSysMLCS9561 = new BitSet(new long[]{0x287FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_ruleSysMLCS9584 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleSysMLCS9596 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_61_in_ruleSysMLCS9616 = new BitSet(new long[]{0x487FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleDetailCS_in_ruleSysMLCS9638 = new BitSet(new long[]{0x0400000000000000L});
-        public static final BitSet FOLLOW_58_in_ruleSysMLCS9650 = new BitSet(new long[]{0x487FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_62_in_ruleSysMLCS9664 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_entryRuleTypedMultiplicityRefCS9704 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypedMultiplicityRefCS9714 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypedMultiplicityRefCS9764 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
-        public static final BitSet FOLLOW_ruleMultiplicityCS_in_ruleTypedMultiplicityRefCS9784 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateBindingCS_in_entryRuleTemplateBindingCS9821 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTemplateBindingCS9831 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_55_in_ruleTemplateBindingCS9869 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000030L});
-        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS9890 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleTemplateBindingCS9903 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000030L});
-        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS9924 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_56_in_ruleTemplateBindingCS9938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_81_in_ruleTemplateBindingCS9958 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000030L});
-        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS9979 = new BitSet(new long[]{0x1000000000000000L,0x0000000000040000L});
-        public static final BitSet FOLLOW_60_in_ruleTemplateBindingCS9992 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000030L});
-        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS10013 = new BitSet(new long[]{0x1000000000000000L,0x0000000000040000L});
-        public static final BitSet FOLLOW_82_in_ruleTemplateBindingCS10027 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_entryRuleTemplateSignatureCS10064 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTemplateSignatureCS10074 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_55_in_ruleTemplateSignatureCS10112 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS10133 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleTemplateSignatureCS10146 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS10167 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_56_in_ruleTemplateSignatureCS10181 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_81_in_ruleTemplateSignatureCS10201 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS10222 = new BitSet(new long[]{0x1000000000000000L,0x0000000000040000L});
-        public static final BitSet FOLLOW_60_in_ruleTemplateSignatureCS10235 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS10256 = new BitSet(new long[]{0x1000000000000000L,0x0000000000040000L});
-        public static final BitSet FOLLOW_82_in_ruleTemplateSignatureCS10270 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_entryRuleTypedRefCS10307 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypedRefCS10317 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_ruleTypedRefCS10367 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedTypeRefCS_in_ruleTypedRefCS10397 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_entryRuleUnrestrictedName10433 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleUnrestrictedName10444 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEnumerationLiteralName_in_ruleUnrestrictedName10491 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_59_in_ruleUnrestrictedName10515 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_74_in_ruleUnrestrictedName10534 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_54_in_ruleUnrestrictedName10553 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_75_in_ruleUnrestrictedName10572 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_72_in_ruleUnrestrictedName10591 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_80_in_ruleUnrestrictedName10610 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEssentialOCLUnaryOperatorName_in_entryRuleEssentialOCLUnaryOperatorName10655 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLUnaryOperatorName10666 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_18_in_ruleEssentialOCLUnaryOperatorName10704 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_83_in_ruleEssentialOCLUnaryOperatorName10723 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEssentialOCLInfixOperatorName_in_entryRuleEssentialOCLInfixOperatorName10764 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLInfixOperatorName10775 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_84_in_ruleEssentialOCLInfixOperatorName10813 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_85_in_ruleEssentialOCLInfixOperatorName10832 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_86_in_ruleEssentialOCLInfixOperatorName10851 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_18_in_ruleEssentialOCLInfixOperatorName10870 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_82_in_ruleEssentialOCLInfixOperatorName10889 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_81_in_ruleEssentialOCLInfixOperatorName10908 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_87_in_ruleEssentialOCLInfixOperatorName10927 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_88_in_ruleEssentialOCLInfixOperatorName10946 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_63_in_ruleEssentialOCLInfixOperatorName10965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_89_in_ruleEssentialOCLInfixOperatorName10984 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_90_in_ruleEssentialOCLInfixOperatorName11003 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_91_in_ruleEssentialOCLInfixOperatorName11022 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_92_in_ruleEssentialOCLInfixOperatorName11041 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_93_in_ruleEssentialOCLInfixOperatorName11060 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEssentialOCLNavigationOperatorName_in_entryRuleEssentialOCLNavigationOperatorName11101 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLNavigationOperatorName11112 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_94_in_ruleEssentialOCLNavigationOperatorName11150 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_ruleEssentialOCLNavigationOperatorName11169 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_ruleEssentialOCLNavigationOperatorName11188 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_ruleEssentialOCLNavigationOperatorName11207 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleBinaryOperatorName_in_entryRuleBinaryOperatorName11248 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleBinaryOperatorName11259 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleInfixOperatorName_in_ruleBinaryOperatorName11306 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigationOperatorName_in_ruleBinaryOperatorName11339 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleInfixOperatorName_in_entryRuleInfixOperatorName11385 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleInfixOperatorName11396 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEssentialOCLInfixOperatorName_in_ruleInfixOperatorName11442 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigationOperatorName_in_entryRuleNavigationOperatorName11487 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNavigationOperatorName11498 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEssentialOCLNavigationOperatorName_in_ruleNavigationOperatorName11544 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_entryRuleUnaryOperatorName11589 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleUnaryOperatorName11600 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEssentialOCLUnaryOperatorName_in_ruleUnaryOperatorName11646 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEssentialOCLUnrestrictedName_in_entryRuleEssentialOCLUnrestrictedName11691 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLUnrestrictedName11702 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleIdentifier_in_ruleEssentialOCLUnrestrictedName11748 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEssentialOCLUnreservedName_in_entryRuleEssentialOCLUnreservedName11793 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLUnreservedName11804 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleEssentialOCLUnreservedName11851 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_ruleEssentialOCLUnreservedName11884 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_ruleEssentialOCLUnreservedName11917 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_ruleEssentialOCLUnreservedName11941 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnreservedName_in_entryRuleUnreservedName11982 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleUnreservedName11993 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleEssentialOCLUnreservedName_in_ruleUnreservedName12039 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleURIPathNameCS_in_entryRuleURIPathNameCS12083 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleURIPathNameCS12093 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleURIFirstPathElementCS_in_ruleURIPathNameCS12139 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-        public static final BitSet FOLLOW_99_in_ruleURIPathNameCS12152 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0001FFF400010D00L});
-        public static final BitSet FOLLOW_ruleNextPathElementCS_in_ruleURIPathNameCS12173 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-        public static final BitSet FOLLOW_ruleURIFirstPathElementCS_in_entryRuleURIFirstPathElementCS12211 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleURIFirstPathElementCS12221 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleURIFirstPathElementCS12273 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleURI_in_ruleURIFirstPathElementCS12319 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_entryRulePrimitiveTypeIdentifier12357 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePrimitiveTypeIdentifier12368 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rulePrimitiveTypeIdentifier12406 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_101_in_rulePrimitiveTypeIdentifier12425 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_102_in_rulePrimitiveTypeIdentifier12444 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_103_in_rulePrimitiveTypeIdentifier12463 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_104_in_rulePrimitiveTypeIdentifier12482 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_105_in_rulePrimitiveTypeIdentifier12501 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_106_in_rulePrimitiveTypeIdentifier12520 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_107_in_rulePrimitiveTypeIdentifier12539 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveTypeCS_in_entryRulePrimitiveTypeCS12579 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePrimitiveTypeCS12589 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_rulePrimitiveTypeCS12634 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_entryRuleCollectionTypeIdentifier12670 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionTypeIdentifier12681 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_108_in_ruleCollectionTypeIdentifier12719 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_109_in_ruleCollectionTypeIdentifier12738 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_110_in_ruleCollectionTypeIdentifier12757 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_111_in_ruleCollectionTypeIdentifier12776 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_112_in_ruleCollectionTypeIdentifier12795 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_entryRuleCollectionTypeCS12835 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionTypeCS12845 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_ruleCollectionTypeCS12891 = new BitSet(new long[]{0x0080000000000002L});
-        public static final BitSet FOLLOW_55_in_ruleCollectionTypeCS12904 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleCollectionTypeCS12925 = new BitSet(new long[]{0x0100000000000000L});
-        public static final BitSet FOLLOW_56_in_ruleCollectionTypeCS12937 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleTypeCS_in_entryRuleTupleTypeCS12975 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTupleTypeCS12985 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_ruleTupleTypeCS13028 = new BitSet(new long[]{0x0080000000000002L});
-        public static final BitSet FOLLOW_55_in_ruleTupleTypeCS13054 = new BitSet(new long[]{0x097FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleTuplePartCS_in_ruleTupleTypeCS13076 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleTupleTypeCS13089 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleTuplePartCS_in_ruleTupleTypeCS13110 = new BitSet(new long[]{0x1100000000000000L});
-        public static final BitSet FOLLOW_56_in_ruleTupleTypeCS13126 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTuplePartCS_in_entryRuleTuplePartCS13164 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTuplePartCS13174 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleTuplePartCS13220 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleTuplePartCS13232 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleTuplePartCS13253 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_entryRuleCollectionLiteralExpCS13289 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionLiteralExpCS13299 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_ruleCollectionLiteralExpCS13345 = new BitSet(new long[]{0x2000000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleCollectionLiteralExpCS13357 = new BitSet(new long[]{0x4AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_ruleCollectionLiteralExpCS13379 = new BitSet(new long[]{0x5000000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleCollectionLiteralExpCS13392 = new BitSet(new long[]{0x0AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_ruleCollectionLiteralExpCS13413 = new BitSet(new long[]{0x5000000000000000L});
-        public static final BitSet FOLLOW_62_in_ruleCollectionLiteralExpCS13429 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_entryRuleCollectionLiteralPartCS13465 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionLiteralPartCS13475 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleCollectionLiteralPartCS13522 = new BitSet(new long[]{0x0000000000000002L,0x0002000000000000L});
-        public static final BitSet FOLLOW_113_in_ruleCollectionLiteralPartCS13535 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleCollectionLiteralPartCS13556 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleCollectionLiteralPartCS13586 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionPatternCS_in_entryRuleCollectionPatternCS13622 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionPatternCS13632 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_ruleCollectionPatternCS13678 = new BitSet(new long[]{0x2000000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleCollectionPatternCS13690 = new BitSet(new long[]{0x4AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleCollectionPatternCS13712 = new BitSet(new long[]{0x1000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleCollectionPatternCS13725 = new BitSet(new long[]{0x0AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleCollectionPatternCS13746 = new BitSet(new long[]{0x1000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_114_in_ruleCollectionPatternCS13761 = new BitSet(new long[]{0x0000000000000300L});
-        public static final BitSet FOLLOW_ruleIdentifier_in_ruleCollectionPatternCS13782 = new BitSet(new long[]{0x4000000000000000L});
-        public static final BitSet FOLLOW_62_in_ruleCollectionPatternCS13797 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleConstructorPartCS_in_entryRuleConstructorPartCS13833 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleConstructorPartCS13843 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleConstructorPartCS13895 = new BitSet(new long[]{0x8000000000000000L});
-        public static final BitSet FOLLOW_63_in_ruleConstructorPartCS13907 = new BitSet(new long[]{0x0AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleConstructorPartCS13930 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleConstructorPartCS13949 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_entryRulePatternExpCS13988 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePatternExpCS13998 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rulePatternExpCS14044 = new BitSet(new long[]{0x0200000000000000L});
-        public static final BitSet FOLLOW_57_in_rulePatternExpCS14057 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_rulePatternExpCS14078 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLambdaLiteralExpCS_in_entryRuleLambdaLiteralExpCS14114 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleLambdaLiteralExpCS14124 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_ruleLambdaLiteralExpCS14161 = new BitSet(new long[]{0x2000000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleLambdaLiteralExpCS14173 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleLambdaLiteralExpCS14194 = new BitSet(new long[]{0x4000000000000000L});
-        public static final BitSet FOLLOW_62_in_ruleLambdaLiteralExpCS14206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveLiteralExpCS_in_entryRulePrimitiveLiteralExpCS14242 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePrimitiveLiteralExpCS14252 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNumberLiteralExpCS_in_rulePrimitiveLiteralExpCS14302 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStringLiteralExpCS_in_rulePrimitiveLiteralExpCS14332 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleBooleanLiteralExpCS_in_rulePrimitiveLiteralExpCS14362 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_rulePrimitiveLiteralExpCS14392 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleInvalidLiteralExpCS_in_rulePrimitiveLiteralExpCS14422 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNullLiteralExpCS_in_rulePrimitiveLiteralExpCS14452 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_entryRuleTupleLiteralExpCS14487 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTupleLiteralExpCS14497 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_ruleTupleLiteralExpCS14534 = new BitSet(new long[]{0x2000000000000000L});
-        public static final BitSet FOLLOW_61_in_ruleTupleLiteralExpCS14546 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_ruleTupleLiteralExpCS14567 = new BitSet(new long[]{0x5000000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleTupleLiteralExpCS14580 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_ruleTupleLiteralExpCS14601 = new BitSet(new long[]{0x5000000000000000L});
-        public static final BitSet FOLLOW_62_in_ruleTupleLiteralExpCS14615 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_entryRuleTupleLiteralPartCS14651 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTupleLiteralPartCS14661 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleTupleLiteralPartCS14707 = new BitSet(new long[]{0x8200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleTupleLiteralPartCS14720 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleTupleLiteralPartCS14741 = new BitSet(new long[]{0x8000000000000000L});
-        public static final BitSet FOLLOW_63_in_ruleTupleLiteralPartCS14755 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleTupleLiteralPartCS14776 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNumberLiteralExpCS_in_entryRuleNumberLiteralExpCS14812 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNumberLiteralExpCS14822 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNUMBER_LITERAL_in_ruleNumberLiteralExpCS14867 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStringLiteralExpCS_in_entryRuleStringLiteralExpCS14902 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleStringLiteralExpCS14912 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStringLiteral_in_ruleStringLiteralExpCS14957 = new BitSet(new long[]{0x0000000000000022L});
-        public static final BitSet FOLLOW_ruleBooleanLiteralExpCS_in_entryRuleBooleanLiteralExpCS14993 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleBooleanLiteralExpCS15003 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_116_in_ruleBooleanLiteralExpCS15046 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_117_in_ruleBooleanLiteralExpCS15083 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_entryRuleUnlimitedNaturalLiteralExpCS15132 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleUnlimitedNaturalLiteralExpCS15142 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_84_in_ruleUnlimitedNaturalLiteralExpCS15191 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleInvalidLiteralExpCS_in_entryRuleInvalidLiteralExpCS15227 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleInvalidLiteralExpCS15237 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_118_in_ruleInvalidLiteralExpCS15286 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNullLiteralExpCS_in_entryRuleNullLiteralExpCS15322 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNullLiteralExpCS15332 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_119_in_ruleNullLiteralExpCS15381 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_entryRuleTypeLiteralCS15417 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypeLiteralCS15427 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveTypeCS_in_ruleTypeLiteralCS15477 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_ruleTypeLiteralCS15507 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleTypeCS_in_ruleTypeLiteralCS15537 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_entryRuleTypeLiteralWithMultiplicityCS15572 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypeLiteralWithMultiplicityCS15582 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_ruleTypeLiteralWithMultiplicityCS15632 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
-        public static final BitSet FOLLOW_ruleMultiplicityCS_in_ruleTypeLiteralWithMultiplicityCS15652 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_entryRuleTypeLiteralExpCS15689 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypeLiteralExpCS15699 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_ruleTypeLiteralExpCS15744 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeNameExpCS_in_entryRuleTypeNameExpCS15779 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypeNameExpCS15789 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePathNameCS_in_ruleTypeNameExpCS15835 = new BitSet(new long[]{0x2000000000000002L});
-        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_ruleTypeNameExpCS15857 = new BitSet(new long[]{0x2000000000000002L});
-        public static final BitSet FOLLOW_61_in_ruleTypeNameExpCS15870 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleTypeNameExpCS15891 = new BitSet(new long[]{0x4000000000000000L});
-        public static final BitSet FOLLOW_62_in_ruleTypeNameExpCS15903 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_entryRuleTypeExpCS15943 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypeExpCS15953 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeNameExpCS_in_ruleTypeExpCS16004 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
-        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_ruleTypeExpCS16034 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
-        public static final BitSet FOLLOW_ruleCollectionPatternCS_in_ruleTypeExpCS16064 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
-        public static final BitSet FOLLOW_ruleMultiplicityCS_in_ruleTypeExpCS16085 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_entryRuleExpCS16122 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleExpCS16132 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_ruleExpCS16183 = new BitSet(new long[]{0x8000000000040002L,0x00000003FFF60000L});
-        public static final BitSet FOLLOW_ruleBinaryOperatorName_in_ruleExpCS16216 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleExpCS16237 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_ruleExpCS16271 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_entryRulePrefixedLetExpCS16306 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePrefixedLetExpCS16316 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_rulePrefixedLetExpCS16375 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_rulePrefixedLetExpCS16396 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLetExpCS_in_rulePrefixedLetExpCS16428 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_entryRulePrefixedPrimaryExpCS16463 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePrefixedPrimaryExpCS16473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_rulePrefixedPrimaryExpCS16532 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_rulePrefixedPrimaryExpCS16553 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimaryExpCS_in_rulePrefixedPrimaryExpCS16585 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimaryExpCS_in_entryRulePrimaryExpCS16620 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePrimaryExpCS16630 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNestedExpCS_in_rulePrimaryExpCS16680 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleIfExpCS_in_rulePrimaryExpCS16710 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSelfExpCS_in_rulePrimaryExpCS16740 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrimitiveLiteralExpCS_in_rulePrimaryExpCS16770 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_rulePrimaryExpCS16800 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_rulePrimaryExpCS16830 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLambdaLiteralExpCS_in_rulePrimaryExpCS16860 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_rulePrimaryExpCS16890 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNameExpCS_in_rulePrimaryExpCS16920 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNameExpCS_in_entryRuleNameExpCS16955 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNameExpCS16965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePathNameCS_in_ruleNameExpCS17011 = new BitSet(new long[]{0x2080000000000002L,0x0500000000000000L});
-        public static final BitSet FOLLOW_ruleSquareBracketedClauseCS_in_ruleNameExpCS17032 = new BitSet(new long[]{0x2080000000000002L,0x0500000000000000L});
-        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_ruleNameExpCS17054 = new BitSet(new long[]{0x2000000000000002L,0x0100000000000000L});
-        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_ruleNameExpCS17076 = new BitSet(new long[]{0x0000000000000002L,0x0100000000000000L});
-        public static final BitSet FOLLOW_120_in_ruleNameExpCS17096 = new BitSet(new long[]{0x0000000000000000L,0x0200000000000000L});
-        public static final BitSet FOLLOW_121_in_ruleNameExpCS17121 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_entryRuleCurlyBracketedClauseCS17159 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleCurlyBracketedClauseCS17169 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_61_in_ruleCurlyBracketedClauseCS17218 = new BitSet(new long[]{0x487FFFFFFFFA0320L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleConstructorPartCS_in_ruleCurlyBracketedClauseCS17241 = new BitSet(new long[]{0x5000000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleCurlyBracketedClauseCS17254 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleConstructorPartCS_in_ruleCurlyBracketedClauseCS17275 = new BitSet(new long[]{0x5000000000000000L});
-        public static final BitSet FOLLOW_ruleStringLiteral_in_ruleCurlyBracketedClauseCS17306 = new BitSet(new long[]{0x4000000000000000L});
-        public static final BitSet FOLLOW_62_in_ruleCurlyBracketedClauseCS17319 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_entryRuleRoundBracketedClauseCS17355 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleRoundBracketedClauseCS17365 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_55_in_ruleRoundBracketedClauseCS17414 = new BitSet(new long[]{0x0BFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleNavigatingArgCS_in_ruleRoundBracketedClauseCS17436 = new BitSet(new long[]{0x1500000000000000L,0x2000000000000000L});
-        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS17457 = new BitSet(new long[]{0x1500000000000000L,0x2000000000000000L});
-        public static final BitSet FOLLOW_ruleNavigatingSemiArgCS_in_ruleRoundBracketedClauseCS17480 = new BitSet(new long[]{0x1100000000000000L,0x2000000000000000L});
-        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS17501 = new BitSet(new long[]{0x1100000000000000L,0x2000000000000000L});
-        public static final BitSet FOLLOW_ruleNavigatingBarArgCS_in_ruleRoundBracketedClauseCS17526 = new BitSet(new long[]{0x1100000000000000L,0x2000000000000000L});
-        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS17547 = new BitSet(new long[]{0x1100000000000000L,0x2000000000000000L});
-        public static final BitSet FOLLOW_56_in_ruleRoundBracketedClauseCS17564 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSquareBracketedClauseCS_in_entryRuleSquareBracketedClauseCS17600 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleSquareBracketedClauseCS17610 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_122_in_ruleSquareBracketedClauseCS17647 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleSquareBracketedClauseCS17668 = new BitSet(new long[]{0x1000000000000000L,0x0800000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleSquareBracketedClauseCS17681 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleSquareBracketedClauseCS17702 = new BitSet(new long[]{0x1000000000000000L,0x0800000000000000L});
-        public static final BitSet FOLLOW_123_in_ruleSquareBracketedClauseCS17716 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingArgCS_in_entryRuleNavigatingArgCS17752 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingArgCS17762 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingArgCS17809 = new BitSet(new long[]{0x0200000000000002L,0x1000000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleNavigatingArgCS17823 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingArgCS17844 = new BitSet(new long[]{0x8000000000000002L});
-        public static final BitSet FOLLOW_63_in_ruleNavigatingArgCS17857 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingArgCS17878 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_124_in_ruleNavigatingArgCS17900 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingArgCS17921 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_57_in_ruleNavigatingArgCS17944 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingArgCS17965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingBarArgCS_in_entryRuleNavigatingBarArgCS18002 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingBarArgCS18012 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_125_in_ruleNavigatingBarArgCS18055 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingBarArgCS18089 = new BitSet(new long[]{0x0200000000000002L});
-        public static final BitSet FOLLOW_57_in_ruleNavigatingBarArgCS18102 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingBarArgCS18123 = new BitSet(new long[]{0x8000000000000002L});
-        public static final BitSet FOLLOW_63_in_ruleNavigatingBarArgCS18136 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingBarArgCS18157 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_entryRuleNavigatingCommaArgCS18197 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingCommaArgCS18207 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_60_in_ruleNavigatingCommaArgCS18250 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingCommaArgCS18284 = new BitSet(new long[]{0x0200000000000002L,0x1000000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleNavigatingCommaArgCS18298 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingCommaArgCS18319 = new BitSet(new long[]{0x8000000000000002L});
-        public static final BitSet FOLLOW_63_in_ruleNavigatingCommaArgCS18332 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingCommaArgCS18353 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_124_in_ruleNavigatingCommaArgCS18375 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingCommaArgCS18396 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingSemiArgCS_in_entryRuleNavigatingSemiArgCS18435 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingSemiArgCS18445 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_ruleNavigatingSemiArgCS18488 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingSemiArgCS18522 = new BitSet(new long[]{0x0200000000000002L});
-        public static final BitSet FOLLOW_57_in_ruleNavigatingSemiArgCS18535 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingSemiArgCS18556 = new BitSet(new long[]{0x8000000000000002L});
-        public static final BitSet FOLLOW_63_in_ruleNavigatingSemiArgCS18569 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingSemiArgCS18590 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_entryRuleNavigatingArgExpCS18630 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingArgExpCS18640 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingArgExpCS18689 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleIfExpCS_in_entryRuleIfExpCS18723 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleIfExpCS18733 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_126_in_ruleIfExpCS18770 = new BitSet(new long[]{0x0AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleIfExpCS18793 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
-        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleIfExpCS18812 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
-        public static final BitSet FOLLOW_127_in_ruleIfExpCS18827 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleIfExpCS18848 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000005L});
-        public static final BitSet FOLLOW_ruleElseIfThenExpCS_in_ruleIfExpCS18869 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000005L});
-        public static final BitSet FOLLOW_128_in_ruleIfExpCS18882 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleIfExpCS18903 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
-        public static final BitSet FOLLOW_129_in_ruleIfExpCS18915 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleElseIfThenExpCS_in_entryRuleElseIfThenExpCS18951 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleElseIfThenExpCS18961 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_130_in_ruleElseIfThenExpCS18998 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleElseIfThenExpCS19019 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
-        public static final BitSet FOLLOW_127_in_ruleElseIfThenExpCS19031 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleElseIfThenExpCS19052 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLetExpCS_in_entryRuleLetExpCS19088 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleLetExpCS19098 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_131_in_ruleLetExpCS19135 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleLetVariableCS_in_ruleLetExpCS19156 = new BitSet(new long[]{0x1000000000000000L,0x1000000000000000L});
-        public static final BitSet FOLLOW_60_in_ruleLetExpCS19169 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
-        public static final BitSet FOLLOW_ruleLetVariableCS_in_ruleLetExpCS19190 = new BitSet(new long[]{0x1000000000000000L,0x1000000000000000L});
-        public static final BitSet FOLLOW_124_in_ruleLetExpCS19204 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleLetExpCS19225 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLetVariableCS_in_entryRuleLetVariableCS19261 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleLetVariableCS19271 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleLetVariableCS19317 = new BitSet(new long[]{0x8280000000000000L});
-        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_ruleLetVariableCS19338 = new BitSet(new long[]{0x8200000000000000L});
-        public static final BitSet FOLLOW_57_in_ruleLetVariableCS19352 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleLetVariableCS19373 = new BitSet(new long[]{0x8000000000000000L});
-        public static final BitSet FOLLOW_63_in_ruleLetVariableCS19387 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleLetVariableCS19408 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNestedExpCS_in_entryRuleNestedExpCS19444 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNestedExpCS19454 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_55_in_ruleNestedExpCS19491 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_ruleNestedExpCS19512 = new BitSet(new long[]{0x0100000000000000L});
-        public static final BitSet FOLLOW_56_in_ruleNestedExpCS19524 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSelfExpCS_in_entryRuleSelfExpCS19560 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleSelfExpCS19570 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_132_in_ruleSelfExpCS19619 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleMultiplicityBoundsCS_in_entryRuleMultiplicityBoundsCS19655 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleMultiplicityBoundsCS19665 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLOWER_in_ruleMultiplicityBoundsCS19711 = new BitSet(new long[]{0x0000000000000002L,0x0002000000000000L});
-        public static final BitSet FOLLOW_113_in_ruleMultiplicityBoundsCS19724 = new BitSet(new long[]{0x0000000000000010L,0x0000000000100000L});
-        public static final BitSet FOLLOW_ruleUPPER_in_ruleMultiplicityBoundsCS19745 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleMultiplicityCS_in_entryRuleMultiplicityCS19783 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleMultiplicityCS19793 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_122_in_ruleMultiplicityCS19830 = new BitSet(new long[]{0x0000000000000010L,0x0000000000500000L,0x0000000000000020L});
-        public static final BitSet FOLLOW_ruleMultiplicityBoundsCS_in_ruleMultiplicityCS19856 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L});
-        public static final BitSet FOLLOW_ruleMultiplicityStringCS_in_ruleMultiplicityCS19886 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L});
-        public static final BitSet FOLLOW_123_in_ruleMultiplicityCS19898 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleMultiplicityStringCS_in_entryRuleMultiplicityStringCS19934 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleMultiplicityStringCS19944 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_84_in_ruleMultiplicityStringCS19988 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_86_in_ruleMultiplicityStringCS20017 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_133_in_ruleMultiplicityStringCS20046 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePathNameCS_in_entryRulePathNameCS20097 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePathNameCS20107 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleFirstPathElementCS_in_rulePathNameCS20153 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-        public static final BitSet FOLLOW_99_in_rulePathNameCS20166 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0001FFF400010D00L});
-        public static final BitSet FOLLOW_ruleNextPathElementCS_in_rulePathNameCS20187 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-        public static final BitSet FOLLOW_ruleFirstPathElementCS_in_entryRuleFirstPathElementCS20225 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleFirstPathElementCS20235 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleFirstPathElementCS20286 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNextPathElementCS_in_entryRuleNextPathElementCS20321 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNextPathElementCS20331 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnreservedName_in_ruleNextPathElementCS20382 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_entryRuleTemplateParameterSubstitutionCS20417 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTemplateParameterSubstitutionCS20427 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeRefCS_in_ruleTemplateParameterSubstitutionCS20472 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeParameterCS_in_entryRuleTypeParameterCS20507 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypeParameterCS20517 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleTypeParameterCS20563 = new BitSet(new long[]{0x0001000040000002L});
-        public static final BitSet FOLLOW_30_in_ruleTypeParameterCS20577 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS20598 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_134_in_ruleTypeParameterCS20611 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS20632 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_48_in_ruleTypeParameterCS20654 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS20675 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeRefCS_in_entryRuleTypeRefCS20714 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypeRefCS20724 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypeRefCS20774 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleWildcardTypeRefCS_in_ruleTypeRefCS20804 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypedTypeRefCS_in_entryRuleTypedTypeRefCS20839 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTypedTypeRefCS20849 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePathNameCS_in_ruleTypedTypeRefCS20895 = new BitSet(new long[]{0x0080000000000002L,0x0000000000020000L});
-        public static final BitSet FOLLOW_ruleTemplateBindingCS_in_ruleTypedTypeRefCS20916 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleWildcardTypeRefCS_in_entryRuleWildcardTypeRefCS20953 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleWildcardTypeRefCS20963 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_133_in_ruleWildcardTypeRefCS21012 = new BitSet(new long[]{0x0001000040000002L});
-        public static final BitSet FOLLOW_30_in_ruleWildcardTypeRefCS21026 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleWildcardTypeRefCS21047 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_48_in_ruleWildcardTypeRefCS21067 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
-        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleWildcardTypeRefCS21088 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleID_in_entryRuleID21128 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleID21139 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SIMPLE_ID_in_ruleID21179 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ESCAPED_ID_in_ruleID21205 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleIdentifier_in_entryRuleIdentifier21251 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleIdentifier21262 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleID_in_ruleIdentifier21308 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleLOWER_in_entryRuleLOWER21353 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleLOWER21364 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_ruleLOWER21403 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNUMBER_LITERAL_in_entryRuleNUMBER_LITERAL21448 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNUMBER_LITERAL21459 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_ruleNUMBER_LITERAL21498 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleStringLiteral_in_entryRuleStringLiteral21543 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleStringLiteral21554 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleStringLiteral21593 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUPPER_in_entryRuleUPPER21638 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleUPPER21649 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_ruleUPPER21689 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_84_in_ruleUPPER21713 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleURI_in_entryRuleURI21754 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleURI21765 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleURI21804 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_synpred300_InternalOCLinEcore16034 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_synpred303_InternalOCLinEcore16183 = new BitSet(new long[]{0x8000000000040002L,0x00000003FFF60000L});
-        public static final BitSet FOLLOW_ruleBinaryOperatorName_in_synpred303_InternalOCLinEcore16216 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
-        public static final BitSet FOLLOW_ruleExpCS_in_synpred303_InternalOCLinEcore16237 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_synpred310_InternalOCLinEcore16800 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_synpred311_InternalOCLinEcore16830 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_synpred313_InternalOCLinEcore16890 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAttributeCS_in_entryRuleAttributeCS2391 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleAttributeCS2401 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_47_in_ruleAttributeCS2493 = new BitSet(new long[]{0x0000800004100000L});
+        public static final BitSet FOLLOW_26_in_ruleAttributeCS2578 = new BitSet(new long[]{0x0000800004100000L});
+        public static final BitSet FOLLOW_20_in_ruleAttributeCS2643 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS2664 = new BitSet(new long[]{0xE63C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_57_in_ruleAttributeCS2677 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_ruleAttributeCS2698 = new BitSet(new long[]{0xE43C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_63_in_ruleAttributeCS2713 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleAttributeCS2730 = new BitSet(new long[]{0x643C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_61_in_ruleAttributeCS2795 = new BitSet(new long[]{0x643C104090000000L,0x00000000000000FFL});
+        public static final BitSet FOLLOW_28_in_ruleAttributeCS2815 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_64_in_ruleAttributeCS2846 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_ruleAttributeCS2860 = new BitSet(new long[]{0x643C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_31_in_ruleAttributeCS2939 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_65_in_ruleAttributeCS2970 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_ruleAttributeCS2984 = new BitSet(new long[]{0x643C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_38_in_ruleAttributeCS3061 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_66_in_ruleAttributeCS3092 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_ruleAttributeCS3106 = new BitSet(new long[]{0x643C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_44_in_ruleAttributeCS3183 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_67_in_ruleAttributeCS3214 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_ruleAttributeCS3228 = new BitSet(new long[]{0x643C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_50_in_ruleAttributeCS3305 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_68_in_ruleAttributeCS3336 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_ruleAttributeCS3350 = new BitSet(new long[]{0x643C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_69_in_ruleAttributeCS3427 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_51_in_ruleAttributeCS3458 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_ruleAttributeCS3472 = new BitSet(new long[]{0x643C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_52_in_ruleAttributeCS3549 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_70_in_ruleAttributeCS3580 = new BitSet(new long[]{0x743C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_ruleAttributeCS3594 = new BitSet(new long[]{0x643C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_53_in_ruleAttributeCS3672 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_71_in_ruleAttributeCS3703 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleAttributeCS3717 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleAttributeCS3733 = new BitSet(new long[]{0x643C104080000000L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_61_in_ruleAttributeCS3795 = new BitSet(new long[]{0x4800000208000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleAttributeCS3817 = new BitSet(new long[]{0x4800000208000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_27_in_ruleAttributeCS3836 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS3856 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleAttributeCS3869 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleAttributeCS3890 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleAttributeCS3903 = new BitSet(new long[]{0x4800000208000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_33_in_ruleAttributeCS3923 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleAttributeCS3943 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleAttributeCS3956 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleAttributeCS3977 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleAttributeCS3990 = new BitSet(new long[]{0x4800000208000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_62_in_ruleAttributeCS4005 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_ruleAttributeCS4024 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleClassCS_in_entryRuleClassCS4065 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleClassCS4075 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStructuredClassCS_in_ruleClassCS4125 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDataTypeCS_in_ruleClassCS4155 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationCS_in_ruleClassCS4185 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDataTypeCS_in_entryRuleDataTypeCS4220 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleDataTypeCS4230 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_42_in_ruleDataTypeCS4273 = new BitSet(new long[]{0x0000000002000000L});
+        public static final BitSet FOLLOW_25_in_ruleDataTypeCS4299 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleDataTypeCS4320 = new BitSet(new long[]{0x2680000000000000L,0x0000000000020000L});
+        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_ruleDataTypeCS4341 = new BitSet(new long[]{0x2600000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleDataTypeCS4355 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDataTypeCS4372 = new BitSet(new long[]{0x2400000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleDataTypeCS4392 = new BitSet(new long[]{0x4000000000000000L,0x0000000000000300L});
+        public static final BitSet FOLLOW_72_in_ruleDataTypeCS4411 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_73_in_ruleDataTypeCS4442 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleDataTypeCS4456 = new BitSet(new long[]{0x2400000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleDataTypeCS4472 = new BitSet(new long[]{0x4840000000400000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleDataTypeCS4494 = new BitSet(new long[]{0x4840000000400000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_ruleDataTypeCS4521 = new BitSet(new long[]{0x4840000000400000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_62_in_ruleDataTypeCS4535 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_ruleDataTypeCS4554 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_entryRuleDetailCS4591 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleDetailCS4601 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleDetailCS4649 = new BitSet(new long[]{0x8000000000000000L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDetailCS4664 = new BitSet(new long[]{0x8000000000000000L});
+        public static final BitSet FOLLOW_63_in_ruleDetailCS4684 = new BitSet(new long[]{0x0000000000000062L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDetailCS4703 = new BitSet(new long[]{0x0000000000000062L});
+        public static final BitSet FOLLOW_RULE_ML_SINGLE_QUOTED_STRING_in_ruleDetailCS4723 = new BitSet(new long[]{0x0000000000000062L});
+        public static final BitSet FOLLOW_ruleDocumentationCS_in_entryRuleDocumentationCS4768 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleDocumentationCS4778 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_74_in_ruleDocumentationCS4827 = new BitSet(new long[]{0x0480000000000020L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleDocumentationCS4844 = new BitSet(new long[]{0x0480000000000000L});
+        public static final BitSet FOLLOW_55_in_ruleDocumentationCS4863 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_ruleDocumentationCS4884 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleDocumentationCS4897 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_ruleDocumentationCS4918 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_56_in_ruleDocumentationCS4932 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleDocumentationCS4946 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationCS_in_entryRuleEnumerationCS4982 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleEnumerationCS4992 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_29_in_ruleEnumerationCS5029 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleEnumerationCS5050 = new BitSet(new long[]{0x2680000000000000L,0x0000000000020000L});
+        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_ruleEnumerationCS5071 = new BitSet(new long[]{0x2600000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleEnumerationCS5085 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleEnumerationCS5102 = new BitSet(new long[]{0x2400000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleEnumerationCS5122 = new BitSet(new long[]{0x4000000000000000L,0x0000000000000300L});
+        public static final BitSet FOLLOW_72_in_ruleEnumerationCS5141 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_73_in_ruleEnumerationCS5172 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleEnumerationCS5186 = new BitSet(new long[]{0x2400000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleEnumerationCS5202 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleEnumerationCS5224 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
+        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_ruleEnumerationCS5251 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
+        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_ruleEnumerationCS5278 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
+        public static final BitSet FOLLOW_62_in_ruleEnumerationCS5292 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_ruleEnumerationCS5311 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_entryRuleEnumerationLiteralCS5348 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleEnumerationLiteralCS5358 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_75_in_ruleEnumerationLiteralCS5397 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleEnumerationLiteralCS5418 = new BitSet(new long[]{0xA400000000000000L});
+        public static final BitSet FOLLOW_ruleEnumerationLiteralName_in_ruleEnumerationLiteralCS5446 = new BitSet(new long[]{0xA400000000000000L});
+        public static final BitSet FOLLOW_63_in_ruleEnumerationLiteralCS5460 = new BitSet(new long[]{0x0000000000040010L});
+        public static final BitSet FOLLOW_ruleSIGNED_in_ruleEnumerationLiteralCS5481 = new BitSet(new long[]{0x2400000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleEnumerationLiteralCS5497 = new BitSet(new long[]{0x4800000000000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleEnumerationLiteralCS5518 = new BitSet(new long[]{0x4800000000000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_62_in_ruleEnumerationLiteralCS5531 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_ruleEnumerationLiteralCS5550 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleImportCS_in_entryRuleImportCS5587 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleImportCS5597 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_32_in_ruleImportCS5634 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleImportCS5656 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleImportCS5668 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleURIPathNameCS_in_ruleImportCS5691 = new BitSet(new long[]{0x0400000000000000L,0x0000000000001000L});
+        public static final BitSet FOLLOW_76_in_ruleImportCS5709 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleImportCS5735 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLibraryCS_in_entryRuleLibraryCS5771 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleLibraryCS5781 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_36_in_ruleLibraryCS5818 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleLibraryCS5840 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleLibraryCS5852 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleURI_in_ruleLibraryCS5881 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleLibraryCS5893 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleModelElementCS_in_entryRuleModelElementCS5929 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleModelElementCS5939 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleClassCS_in_ruleModelElementCS5989 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationLiteralCS_in_ruleModelElementCS6019 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleOperationCS_in_ruleModelElementCS6049 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePackageCS_in_ruleModelElementCS6079 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_ruleModelElementCS6109 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleModelElementRefCS_in_entryRuleModelElementRefCS6144 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleModelElementRefCS6154 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_45_in_ruleModelElementRefCS6191 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_rulePathNameCS_in_ruleModelElementRefCS6212 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleModelElementRefCS6224 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleOperationCS_in_entryRuleOperationCS6266 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleOperationCS6276 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_47_in_ruleOperationCS6368 = new BitSet(new long[]{0x0000802004000000L});
+        public static final BitSet FOLLOW_26_in_ruleOperationCS6453 = new BitSet(new long[]{0x0000802004000000L});
+        public static final BitSet FOLLOW_37_in_ruleOperationCS6518 = new BitSet(new long[]{0x08FFFFFFFFFA0300L,0x0000000000030D00L});
+        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_ruleOperationCS6539 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleOperationCS6561 = new BitSet(new long[]{0x0080000000000000L});
+        public static final BitSet FOLLOW_55_in_ruleOperationCS6573 = new BitSet(new long[]{0x097FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleParameterCS_in_ruleOperationCS6595 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleOperationCS6608 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleParameterCS_in_ruleOperationCS6629 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_56_in_ruleOperationCS6645 = new BitSet(new long[]{0x660A004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_57_in_ruleOperationCS6658 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_ruleOperationCS6679 = new BitSet(new long[]{0x640A004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_49_in_ruleOperationCS6694 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleOperationCS6715 = new BitSet(new long[]{0x7408004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_60_in_ruleOperationCS6728 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleOperationCS6749 = new BitSet(new long[]{0x7408004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_61_in_ruleOperationCS6811 = new BitSet(new long[]{0x6408004010000000L,0x0000000000000025L});
+        public static final BitSet FOLLOW_28_in_ruleOperationCS6831 = new BitSet(new long[]{0x7408004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_64_in_ruleOperationCS6862 = new BitSet(new long[]{0x7408004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_60_in_ruleOperationCS6876 = new BitSet(new long[]{0x6408004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_38_in_ruleOperationCS6955 = new BitSet(new long[]{0x7408004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_66_in_ruleOperationCS6986 = new BitSet(new long[]{0x7408004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_60_in_ruleOperationCS7000 = new BitSet(new long[]{0x6408004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_69_in_ruleOperationCS7078 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_51_in_ruleOperationCS7109 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleOperationCS7123 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleOperationCS7139 = new BitSet(new long[]{0x6408004000000000L,0x0000000000000024L});
+        public static final BitSet FOLLOW_61_in_ruleOperationCS7201 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleOperationCS7223 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_rulePreconditionConstraintCS_in_ruleOperationCS7250 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_21_in_ruleOperationCS7269 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleOperationCS7289 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleOperationCS7302 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleOperationCS7323 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleOperationCS7336 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_rulePostconditionConstraintCS_in_ruleOperationCS7364 = new BitSet(new long[]{0x4800030000200000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_62_in_ruleOperationCS7378 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_ruleOperationCS7397 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePackageCS_in_entryRulePackageCS7438 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePackageCS7448 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_39_in_rulePackageCS7485 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rulePackageCS7506 = new BitSet(new long[]{0xA600000000000000L});
+        public static final BitSet FOLLOW_57_in_rulePackageCS7519 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rulePackageCS7540 = new BitSet(new long[]{0xA400000000000000L});
+        public static final BitSet FOLLOW_63_in_rulePackageCS7555 = new BitSet(new long[]{0x087FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleURI_in_rulePackageCS7576 = new BitSet(new long[]{0x2400000000000000L});
+        public static final BitSet FOLLOW_61_in_rulePackageCS7592 = new BitSet(new long[]{0x4800048022880000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_rulePackageCS7614 = new BitSet(new long[]{0x4800048022880000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_rulePackageCS_in_rulePackageCS7641 = new BitSet(new long[]{0x4800048022880000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_ruleClassCS_in_rulePackageCS7668 = new BitSet(new long[]{0x4800048022880000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_62_in_rulePackageCS7682 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_rulePackageCS7701 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleParameterCS_in_entryRuleParameterCS7744 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleParameterCS7754 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleParameterCS7804 = new BitSet(new long[]{0x6208000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_57_in_ruleParameterCS7817 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_ruleParameterCS7838 = new BitSet(new long[]{0x6008000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_61_in_ruleParameterCS7898 = new BitSet(new long[]{0x6008004000000002L,0x0000000000000024L});
+        public static final BitSet FOLLOW_38_in_ruleParameterCS7918 = new BitSet(new long[]{0x7008000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_66_in_ruleParameterCS7949 = new BitSet(new long[]{0x7008000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_60_in_ruleParameterCS7963 = new BitSet(new long[]{0x6008000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_69_in_ruleParameterCS8043 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_51_in_ruleParameterCS8074 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleParameterCS8088 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleParameterCS8104 = new BitSet(new long[]{0x6008000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_61_in_ruleParameterCS8165 = new BitSet(new long[]{0x4800000000000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleParameterCS8186 = new BitSet(new long[]{0x4800000000000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_62_in_ruleParameterCS8199 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleReferenceCS_in_entryRuleReferenceCS8247 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleReferenceCS8257 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_47_in_ruleReferenceCS8349 = new BitSet(new long[]{0x0000880004000000L});
+        public static final BitSet FOLLOW_26_in_ruleReferenceCS8434 = new BitSet(new long[]{0x0000880004000000L});
+        public static final BitSet FOLLOW_43_in_ruleReferenceCS8499 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8520 = new BitSet(new long[]{0xE63C504010000000L,0x000000000000A0FDL});
+        public static final BitSet FOLLOW_77_in_ruleReferenceCS8533 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS8560 = new BitSet(new long[]{0xE63C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_57_in_ruleReferenceCS8575 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_ruleReferenceCS8596 = new BitSet(new long[]{0xE43C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_63_in_ruleReferenceCS8611 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleReferenceCS8628 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_61_in_ruleReferenceCS8693 = new BitSet(new long[]{0x643C504011000000L,0x000000000000C0FDL});
+        public static final BitSet FOLLOW_24_in_ruleReferenceCS8713 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_78_in_ruleReferenceCS8744 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS8758 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_28_in_ruleReferenceCS8837 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_64_in_ruleReferenceCS8868 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS8882 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_38_in_ruleReferenceCS8959 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_66_in_ruleReferenceCS8990 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS9004 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_44_in_ruleReferenceCS9081 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_67_in_ruleReferenceCS9112 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS9126 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_46_in_ruleReferenceCS9203 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_79_in_ruleReferenceCS9234 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS9248 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_50_in_ruleReferenceCS9325 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_68_in_ruleReferenceCS9356 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS9370 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_69_in_ruleReferenceCS9447 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_51_in_ruleReferenceCS9478 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS9492 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_52_in_ruleReferenceCS9569 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_70_in_ruleReferenceCS9600 = new BitSet(new long[]{0x743C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS9614 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_53_in_ruleReferenceCS9692 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_71_in_ruleReferenceCS9723 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS9737 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleReferenceCS9753 = new BitSet(new long[]{0x643C504010000000L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_61_in_ruleReferenceCS9815 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleReferenceCS9837 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_35_in_ruleReferenceCS9856 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS9883 = new BitSet(new long[]{0x1400000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleReferenceCS9896 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS9923 = new BitSet(new long[]{0x1400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleReferenceCS9937 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_27_in_ruleReferenceCS9957 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS9977 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleReferenceCS9990 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleReferenceCS10011 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleReferenceCS10024 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_33_in_ruleReferenceCS10044 = new BitSet(new long[]{0x0A7FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleReferenceCS10064 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleReferenceCS10077 = new BitSet(new long[]{0x0CFFFFFFFFFE03B0L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_ruleReferenceCS10098 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleReferenceCS10111 = new BitSet(new long[]{0x4800000A08000000L,0x0000000000010400L});
+        public static final BitSet FOLLOW_62_in_ruleReferenceCS10126 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_ruleReferenceCS10145 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSpecificationCS_in_entryRuleSpecificationCS10186 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleSpecificationCS10196 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleSpecificationCS10242 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_UNQUOTED_STRING_in_ruleSpecificationCS10265 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStructuredClassCS_in_entryRuleStructuredClassCS10306 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleStructuredClassCS10316 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_19_in_ruleStructuredClassCS10359 = new BitSet(new long[]{0x0000000000800000L});
+        public static final BitSet FOLLOW_23_in_ruleStructuredClassCS10385 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleStructuredClassCS10406 = new BitSet(new long[]{0x2680000040000000L,0x0000000000020000L});
+        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_ruleStructuredClassCS10427 = new BitSet(new long[]{0x2600000040000000L});
+        public static final BitSet FOLLOW_30_in_ruleStructuredClassCS10441 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleStructuredClassCS10462 = new BitSet(new long[]{0x3600000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleStructuredClassCS10475 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleStructuredClassCS10496 = new BitSet(new long[]{0x3600000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleStructuredClassCS10513 = new BitSet(new long[]{0x0000000000000020L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleStructuredClassCS10530 = new BitSet(new long[]{0x2400000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleStructuredClassCS10550 = new BitSet(new long[]{0x4000000400000000L});
+        public static final BitSet FOLLOW_34_in_ruleStructuredClassCS10568 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleStructuredClassCS10594 = new BitSet(new long[]{0x2400000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleStructuredClassCS10610 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
+        public static final BitSet FOLLOW_ruleAnnotationElementCS_in_ruleStructuredClassCS10632 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
+        public static final BitSet FOLLOW_ruleOperationCS_in_ruleStructuredClassCS10659 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
+        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_ruleStructuredClassCS10686 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
+        public static final BitSet FOLLOW_ruleInvariantConstraintCS_in_ruleStructuredClassCS10713 = new BitSet(new long[]{0x487FFFFFFFFA0300L,0x0000000000010C00L});
+        public static final BitSet FOLLOW_62_in_ruleStructuredClassCS10727 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_ruleStructuredClassCS10746 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStructuralFeatureCS_in_entryRuleStructuralFeatureCS10783 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleStructuralFeatureCS10793 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAttributeCS_in_ruleStructuralFeatureCS10843 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleReferenceCS_in_ruleStructuralFeatureCS10873 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSysMLCS_in_entryRuleSysMLCS10908 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleSysMLCS10918 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_80_in_ruleSysMLCS10967 = new BitSet(new long[]{0x287FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_ruleSysMLCS10990 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleSysMLCS11002 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_ruleSysMLCS11022 = new BitSet(new long[]{0x487FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleDetailCS_in_ruleSysMLCS11044 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleSysMLCS11056 = new BitSet(new long[]{0x487FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_62_in_ruleSysMLCS11070 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedMultiplicityRefCS_in_entryRuleTypedMultiplicityRefCS11110 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypedMultiplicityRefCS11120 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypedMultiplicityRefCS11170 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
+        public static final BitSet FOLLOW_ruleMultiplicityCS_in_ruleTypedMultiplicityRefCS11190 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateBindingCS_in_entryRuleTemplateBindingCS11227 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTemplateBindingCS11237 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_55_in_ruleTemplateBindingCS11275 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS11296 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleTemplateBindingCS11309 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS11330 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_56_in_ruleTemplateBindingCS11344 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_81_in_ruleTemplateBindingCS11364 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS11385 = new BitSet(new long[]{0x1000000000000000L,0x0000000000040000L});
+        public static final BitSet FOLLOW_60_in_ruleTemplateBindingCS11398 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_ruleTemplateBindingCS11419 = new BitSet(new long[]{0x1000000000000000L,0x0000000000040000L});
+        public static final BitSet FOLLOW_82_in_ruleTemplateBindingCS11433 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateSignatureCS_in_entryRuleTemplateSignatureCS11470 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTemplateSignatureCS11480 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_55_in_ruleTemplateSignatureCS11518 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS11539 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleTemplateSignatureCS11552 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS11573 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_56_in_ruleTemplateSignatureCS11587 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_81_in_ruleTemplateSignatureCS11607 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS11628 = new BitSet(new long[]{0x1000000000000000L,0x0000000000040000L});
+        public static final BitSet FOLLOW_60_in_ruleTemplateSignatureCS11641 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleTypeParameterCS_in_ruleTemplateSignatureCS11662 = new BitSet(new long[]{0x1000000000000000L,0x0000000000040000L});
+        public static final BitSet FOLLOW_82_in_ruleTemplateSignatureCS11676 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_entryRuleTypedRefCS11713 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypedRefCS11723 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_ruleTypedRefCS11773 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedTypeRefCS_in_ruleTypedRefCS11803 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_entryRuleUnrestrictedName11839 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleUnrestrictedName11850 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEnumerationLiteralName_in_ruleUnrestrictedName11897 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_59_in_ruleUnrestrictedName11921 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_74_in_ruleUnrestrictedName11940 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_54_in_ruleUnrestrictedName11959 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_75_in_ruleUnrestrictedName11978 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_72_in_ruleUnrestrictedName11997 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_80_in_ruleUnrestrictedName12016 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEssentialOCLUnaryOperatorName_in_entryRuleEssentialOCLUnaryOperatorName12061 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLUnaryOperatorName12072 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_18_in_ruleEssentialOCLUnaryOperatorName12110 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_83_in_ruleEssentialOCLUnaryOperatorName12129 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEssentialOCLInfixOperatorName_in_entryRuleEssentialOCLInfixOperatorName12170 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLInfixOperatorName12181 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_84_in_ruleEssentialOCLInfixOperatorName12219 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_85_in_ruleEssentialOCLInfixOperatorName12238 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_86_in_ruleEssentialOCLInfixOperatorName12257 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_18_in_ruleEssentialOCLInfixOperatorName12276 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_82_in_ruleEssentialOCLInfixOperatorName12295 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_81_in_ruleEssentialOCLInfixOperatorName12314 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_87_in_ruleEssentialOCLInfixOperatorName12333 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_88_in_ruleEssentialOCLInfixOperatorName12352 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_63_in_ruleEssentialOCLInfixOperatorName12371 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_89_in_ruleEssentialOCLInfixOperatorName12390 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_90_in_ruleEssentialOCLInfixOperatorName12409 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_91_in_ruleEssentialOCLInfixOperatorName12428 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_92_in_ruleEssentialOCLInfixOperatorName12447 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_93_in_ruleEssentialOCLInfixOperatorName12466 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEssentialOCLNavigationOperatorName_in_entryRuleEssentialOCLNavigationOperatorName12507 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLNavigationOperatorName12518 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_94_in_ruleEssentialOCLNavigationOperatorName12556 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_95_in_ruleEssentialOCLNavigationOperatorName12575 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_96_in_ruleEssentialOCLNavigationOperatorName12594 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_97_in_ruleEssentialOCLNavigationOperatorName12613 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleBinaryOperatorName_in_entryRuleBinaryOperatorName12654 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleBinaryOperatorName12665 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInfixOperatorName_in_ruleBinaryOperatorName12712 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigationOperatorName_in_ruleBinaryOperatorName12745 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInfixOperatorName_in_entryRuleInfixOperatorName12791 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleInfixOperatorName12802 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEssentialOCLInfixOperatorName_in_ruleInfixOperatorName12848 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigationOperatorName_in_entryRuleNavigationOperatorName12893 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNavigationOperatorName12904 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEssentialOCLNavigationOperatorName_in_ruleNavigationOperatorName12950 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_entryRuleUnaryOperatorName12995 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleUnaryOperatorName13006 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEssentialOCLUnaryOperatorName_in_ruleUnaryOperatorName13052 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEssentialOCLUnrestrictedName_in_entryRuleEssentialOCLUnrestrictedName13097 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLUnrestrictedName13108 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleIdentifier_in_ruleEssentialOCLUnrestrictedName13154 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEssentialOCLUnreservedName_in_entryRuleEssentialOCLUnreservedName13199 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleEssentialOCLUnreservedName13210 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleEssentialOCLUnreservedName13257 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_ruleEssentialOCLUnreservedName13290 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_ruleEssentialOCLUnreservedName13323 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_98_in_ruleEssentialOCLUnreservedName13347 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnreservedName_in_entryRuleUnreservedName13388 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleUnreservedName13399 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEssentialOCLUnreservedName_in_ruleUnreservedName13445 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleURIPathNameCS_in_entryRuleURIPathNameCS13489 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleURIPathNameCS13499 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleURIFirstPathElementCS_in_ruleURIPathNameCS13545 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+        public static final BitSet FOLLOW_99_in_ruleURIPathNameCS13558 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0001FFF400010D00L});
+        public static final BitSet FOLLOW_ruleNextPathElementCS_in_ruleURIPathNameCS13579 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+        public static final BitSet FOLLOW_ruleURIFirstPathElementCS_in_entryRuleURIFirstPathElementCS13617 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleURIFirstPathElementCS13627 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleURIFirstPathElementCS13679 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleURI_in_ruleURIFirstPathElementCS13725 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_entryRulePrimitiveTypeIdentifier13763 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePrimitiveTypeIdentifier13774 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_100_in_rulePrimitiveTypeIdentifier13812 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_101_in_rulePrimitiveTypeIdentifier13831 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_102_in_rulePrimitiveTypeIdentifier13850 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_103_in_rulePrimitiveTypeIdentifier13869 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_104_in_rulePrimitiveTypeIdentifier13888 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_105_in_rulePrimitiveTypeIdentifier13907 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_106_in_rulePrimitiveTypeIdentifier13926 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_107_in_rulePrimitiveTypeIdentifier13945 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveTypeCS_in_entryRulePrimitiveTypeCS13985 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePrimitiveTypeCS13995 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveTypeIdentifier_in_rulePrimitiveTypeCS14040 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_entryRuleCollectionTypeIdentifier14076 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionTypeIdentifier14087 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_108_in_ruleCollectionTypeIdentifier14125 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_109_in_ruleCollectionTypeIdentifier14144 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_110_in_ruleCollectionTypeIdentifier14163 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_111_in_ruleCollectionTypeIdentifier14182 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_112_in_ruleCollectionTypeIdentifier14201 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_entryRuleCollectionTypeCS14241 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionTypeCS14251 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeIdentifier_in_ruleCollectionTypeCS14297 = new BitSet(new long[]{0x0080000000000002L});
+        public static final BitSet FOLLOW_55_in_ruleCollectionTypeCS14310 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleCollectionTypeCS14331 = new BitSet(new long[]{0x0100000000000000L});
+        public static final BitSet FOLLOW_56_in_ruleCollectionTypeCS14343 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleTypeCS_in_entryRuleTupleTypeCS14381 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTupleTypeCS14391 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_98_in_ruleTupleTypeCS14434 = new BitSet(new long[]{0x0080000000000002L});
+        public static final BitSet FOLLOW_55_in_ruleTupleTypeCS14460 = new BitSet(new long[]{0x097FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleTuplePartCS_in_ruleTupleTypeCS14482 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleTupleTypeCS14495 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleTuplePartCS_in_ruleTupleTypeCS14516 = new BitSet(new long[]{0x1100000000000000L});
+        public static final BitSet FOLLOW_56_in_ruleTupleTypeCS14532 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTuplePartCS_in_entryRuleTuplePartCS14570 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTuplePartCS14580 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleTuplePartCS14626 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleTuplePartCS14638 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleTuplePartCS14659 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_entryRuleCollectionLiteralExpCS14695 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionLiteralExpCS14705 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_ruleCollectionLiteralExpCS14751 = new BitSet(new long[]{0x2000000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleCollectionLiteralExpCS14763 = new BitSet(new long[]{0x4AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_ruleCollectionLiteralExpCS14785 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleCollectionLiteralExpCS14798 = new BitSet(new long[]{0x0AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_ruleCollectionLiteralExpCS14819 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleCollectionLiteralExpCS14835 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralPartCS_in_entryRuleCollectionLiteralPartCS14871 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionLiteralPartCS14881 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleCollectionLiteralPartCS14928 = new BitSet(new long[]{0x0000000000000002L,0x0002000000000000L});
+        public static final BitSet FOLLOW_113_in_ruleCollectionLiteralPartCS14941 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleCollectionLiteralPartCS14962 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleCollectionLiteralPartCS14992 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionPatternCS_in_entryRuleCollectionPatternCS15028 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionPatternCS15038 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_ruleCollectionPatternCS15084 = new BitSet(new long[]{0x2000000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleCollectionPatternCS15096 = new BitSet(new long[]{0x4AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleCollectionPatternCS15118 = new BitSet(new long[]{0x1000000000000000L,0x0004000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleCollectionPatternCS15131 = new BitSet(new long[]{0x0AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleCollectionPatternCS15152 = new BitSet(new long[]{0x1000000000000000L,0x0004000000000000L});
+        public static final BitSet FOLLOW_114_in_ruleCollectionPatternCS15167 = new BitSet(new long[]{0x0000000000000300L});
+        public static final BitSet FOLLOW_ruleIdentifier_in_ruleCollectionPatternCS15188 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleCollectionPatternCS15203 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleConstructorPartCS_in_entryRuleConstructorPartCS15239 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleConstructorPartCS15249 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleConstructorPartCS15301 = new BitSet(new long[]{0x8000000000000000L});
+        public static final BitSet FOLLOW_63_in_ruleConstructorPartCS15313 = new BitSet(new long[]{0x0AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleConstructorPartCS15336 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleConstructorPartCS15355 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_entryRulePatternExpCS15394 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePatternExpCS15404 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_rulePatternExpCS15450 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_rulePatternExpCS15463 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_rulePatternExpCS15484 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLambdaLiteralExpCS_in_entryRuleLambdaLiteralExpCS15520 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleLambdaLiteralExpCS15530 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_115_in_ruleLambdaLiteralExpCS15567 = new BitSet(new long[]{0x2000000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleLambdaLiteralExpCS15579 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleLambdaLiteralExpCS15600 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleLambdaLiteralExpCS15612 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveLiteralExpCS_in_entryRulePrimitiveLiteralExpCS15648 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePrimitiveLiteralExpCS15658 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNumberLiteralExpCS_in_rulePrimitiveLiteralExpCS15708 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStringLiteralExpCS_in_rulePrimitiveLiteralExpCS15738 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleBooleanLiteralExpCS_in_rulePrimitiveLiteralExpCS15768 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_rulePrimitiveLiteralExpCS15798 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInvalidLiteralExpCS_in_rulePrimitiveLiteralExpCS15828 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNullLiteralExpCS_in_rulePrimitiveLiteralExpCS15858 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_entryRuleTupleLiteralExpCS15893 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTupleLiteralExpCS15903 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_98_in_ruleTupleLiteralExpCS15940 = new BitSet(new long[]{0x2000000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleTupleLiteralExpCS15952 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_ruleTupleLiteralExpCS15973 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleTupleLiteralExpCS15986 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_ruleTupleLiteralExpCS16007 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleTupleLiteralExpCS16021 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleLiteralPartCS_in_entryRuleTupleLiteralPartCS16057 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTupleLiteralPartCS16067 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleTupleLiteralPartCS16113 = new BitSet(new long[]{0x8200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleTupleLiteralPartCS16126 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleTupleLiteralPartCS16147 = new BitSet(new long[]{0x8000000000000000L});
+        public static final BitSet FOLLOW_63_in_ruleTupleLiteralPartCS16161 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleTupleLiteralPartCS16182 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNumberLiteralExpCS_in_entryRuleNumberLiteralExpCS16218 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNumberLiteralExpCS16228 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNUMBER_LITERAL_in_ruleNumberLiteralExpCS16273 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStringLiteralExpCS_in_entryRuleStringLiteralExpCS16308 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleStringLiteralExpCS16318 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStringLiteral_in_ruleStringLiteralExpCS16363 = new BitSet(new long[]{0x0000000000000022L});
+        public static final BitSet FOLLOW_ruleBooleanLiteralExpCS_in_entryRuleBooleanLiteralExpCS16399 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleBooleanLiteralExpCS16409 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_116_in_ruleBooleanLiteralExpCS16452 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_117_in_ruleBooleanLiteralExpCS16489 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnlimitedNaturalLiteralExpCS_in_entryRuleUnlimitedNaturalLiteralExpCS16538 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleUnlimitedNaturalLiteralExpCS16548 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_84_in_ruleUnlimitedNaturalLiteralExpCS16597 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInvalidLiteralExpCS_in_entryRuleInvalidLiteralExpCS16633 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleInvalidLiteralExpCS16643 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_118_in_ruleInvalidLiteralExpCS16692 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNullLiteralExpCS_in_entryRuleNullLiteralExpCS16728 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNullLiteralExpCS16738 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_119_in_ruleNullLiteralExpCS16787 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_entryRuleTypeLiteralCS16823 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypeLiteralCS16833 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveTypeCS_in_ruleTypeLiteralCS16883 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionTypeCS_in_ruleTypeLiteralCS16913 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleTypeCS_in_ruleTypeLiteralCS16943 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_entryRuleTypeLiteralWithMultiplicityCS16978 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypeLiteralWithMultiplicityCS16988 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_ruleTypeLiteralWithMultiplicityCS17038 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
+        public static final BitSet FOLLOW_ruleMultiplicityCS_in_ruleTypeLiteralWithMultiplicityCS17058 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_entryRuleTypeLiteralExpCS17095 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypeLiteralExpCS17105 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralWithMultiplicityCS_in_ruleTypeLiteralExpCS17150 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeNameExpCS_in_entryRuleTypeNameExpCS17185 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypeNameExpCS17195 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePathNameCS_in_ruleTypeNameExpCS17241 = new BitSet(new long[]{0x2000000000000002L});
+        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_ruleTypeNameExpCS17263 = new BitSet(new long[]{0x2000000000000002L});
+        public static final BitSet FOLLOW_61_in_ruleTypeNameExpCS17276 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleTypeNameExpCS17297 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleTypeNameExpCS17309 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_entryRuleTypeExpCS17349 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypeExpCS17359 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeNameExpCS_in_ruleTypeExpCS17410 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
+        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_ruleTypeExpCS17440 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
+        public static final BitSet FOLLOW_ruleCollectionPatternCS_in_ruleTypeExpCS17470 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
+        public static final BitSet FOLLOW_ruleMultiplicityCS_in_ruleTypeExpCS17491 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_entryRuleExpCS17528 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleExpCS17538 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_ruleExpCS17589 = new BitSet(new long[]{0x8000000000040002L,0x00000003FFF60000L});
+        public static final BitSet FOLLOW_ruleBinaryOperatorName_in_ruleExpCS17622 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleExpCS17643 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_ruleExpCS17677 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_entryRulePrefixedLetExpCS17712 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePrefixedLetExpCS17722 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_rulePrefixedLetExpCS17781 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_rulePrefixedLetExpCS_in_rulePrefixedLetExpCS17802 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLetExpCS_in_rulePrefixedLetExpCS17834 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_entryRulePrefixedPrimaryExpCS17869 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePrefixedPrimaryExpCS17879 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnaryOperatorName_in_rulePrefixedPrimaryExpCS17938 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_rulePrefixedPrimaryExpCS17959 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimaryExpCS_in_rulePrefixedPrimaryExpCS17991 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimaryExpCS_in_entryRulePrimaryExpCS18026 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePrimaryExpCS18036 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNestedExpCS_in_rulePrimaryExpCS18086 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleIfExpCS_in_rulePrimaryExpCS18116 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSelfExpCS_in_rulePrimaryExpCS18146 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveLiteralExpCS_in_rulePrimaryExpCS18176 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_rulePrimaryExpCS18206 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_rulePrimaryExpCS18236 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLambdaLiteralExpCS_in_rulePrimaryExpCS18266 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_rulePrimaryExpCS18296 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNameExpCS_in_rulePrimaryExpCS18326 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNameExpCS_in_entryRuleNameExpCS18361 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNameExpCS18371 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePathNameCS_in_ruleNameExpCS18417 = new BitSet(new long[]{0x2080000000000002L,0x0500000000000000L});
+        public static final BitSet FOLLOW_ruleSquareBracketedClauseCS_in_ruleNameExpCS18438 = new BitSet(new long[]{0x2080000000000002L,0x0500000000000000L});
+        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_ruleNameExpCS18460 = new BitSet(new long[]{0x2000000000000002L,0x0100000000000000L});
+        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_ruleNameExpCS18482 = new BitSet(new long[]{0x0000000000000002L,0x0100000000000000L});
+        public static final BitSet FOLLOW_120_in_ruleNameExpCS18502 = new BitSet(new long[]{0x0000000000000000L,0x0200000000000000L});
+        public static final BitSet FOLLOW_121_in_ruleNameExpCS18527 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCurlyBracketedClauseCS_in_entryRuleCurlyBracketedClauseCS18565 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleCurlyBracketedClauseCS18575 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_ruleCurlyBracketedClauseCS18624 = new BitSet(new long[]{0x487FFFFFFFFA0320L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleConstructorPartCS_in_ruleCurlyBracketedClauseCS18647 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleCurlyBracketedClauseCS18660 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleConstructorPartCS_in_ruleCurlyBracketedClauseCS18681 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_ruleStringLiteral_in_ruleCurlyBracketedClauseCS18712 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleCurlyBracketedClauseCS18725 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_entryRuleRoundBracketedClauseCS18761 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleRoundBracketedClauseCS18771 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_55_in_ruleRoundBracketedClauseCS18820 = new BitSet(new long[]{0x0BFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleNavigatingArgCS_in_ruleRoundBracketedClauseCS18842 = new BitSet(new long[]{0x1500000000000000L,0x2000000000000000L});
+        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS18863 = new BitSet(new long[]{0x1500000000000000L,0x2000000000000000L});
+        public static final BitSet FOLLOW_ruleNavigatingSemiArgCS_in_ruleRoundBracketedClauseCS18886 = new BitSet(new long[]{0x1100000000000000L,0x2000000000000000L});
+        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS18907 = new BitSet(new long[]{0x1100000000000000L,0x2000000000000000L});
+        public static final BitSet FOLLOW_ruleNavigatingBarArgCS_in_ruleRoundBracketedClauseCS18932 = new BitSet(new long[]{0x1100000000000000L,0x2000000000000000L});
+        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_ruleRoundBracketedClauseCS18953 = new BitSet(new long[]{0x1100000000000000L,0x2000000000000000L});
+        public static final BitSet FOLLOW_56_in_ruleRoundBracketedClauseCS18970 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSquareBracketedClauseCS_in_entryRuleSquareBracketedClauseCS19006 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleSquareBracketedClauseCS19016 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_122_in_ruleSquareBracketedClauseCS19053 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleSquareBracketedClauseCS19074 = new BitSet(new long[]{0x1000000000000000L,0x0800000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleSquareBracketedClauseCS19087 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleSquareBracketedClauseCS19108 = new BitSet(new long[]{0x1000000000000000L,0x0800000000000000L});
+        public static final BitSet FOLLOW_123_in_ruleSquareBracketedClauseCS19122 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingArgCS_in_entryRuleNavigatingArgCS19158 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingArgCS19168 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingArgCS19215 = new BitSet(new long[]{0x0200000000000002L,0x1000000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleNavigatingArgCS19229 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingArgCS19250 = new BitSet(new long[]{0x8000000000000002L});
+        public static final BitSet FOLLOW_63_in_ruleNavigatingArgCS19263 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingArgCS19284 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_124_in_ruleNavigatingArgCS19306 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingArgCS19327 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_57_in_ruleNavigatingArgCS19350 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingArgCS19371 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingBarArgCS_in_entryRuleNavigatingBarArgCS19408 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingBarArgCS19418 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_125_in_ruleNavigatingBarArgCS19461 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingBarArgCS19495 = new BitSet(new long[]{0x0200000000000002L});
+        public static final BitSet FOLLOW_57_in_ruleNavigatingBarArgCS19508 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingBarArgCS19529 = new BitSet(new long[]{0x8000000000000002L});
+        public static final BitSet FOLLOW_63_in_ruleNavigatingBarArgCS19542 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingBarArgCS19563 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingCommaArgCS_in_entryRuleNavigatingCommaArgCS19603 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingCommaArgCS19613 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_60_in_ruleNavigatingCommaArgCS19656 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingCommaArgCS19690 = new BitSet(new long[]{0x0200000000000002L,0x1000000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleNavigatingCommaArgCS19704 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingCommaArgCS19725 = new BitSet(new long[]{0x8000000000000002L});
+        public static final BitSet FOLLOW_63_in_ruleNavigatingCommaArgCS19738 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingCommaArgCS19759 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_124_in_ruleNavigatingCommaArgCS19781 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingCommaArgCS19802 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingSemiArgCS_in_entryRuleNavigatingSemiArgCS19841 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingSemiArgCS19851 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_58_in_ruleNavigatingSemiArgCS19894 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_ruleNavigatingSemiArgCS19928 = new BitSet(new long[]{0x0200000000000002L});
+        public static final BitSet FOLLOW_57_in_ruleNavigatingSemiArgCS19941 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleNavigatingSemiArgCS19962 = new BitSet(new long[]{0x8000000000000002L});
+        public static final BitSet FOLLOW_63_in_ruleNavigatingSemiArgCS19975 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingSemiArgCS19996 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNavigatingArgExpCS_in_entryRuleNavigatingArgExpCS20036 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNavigatingArgExpCS20046 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleNavigatingArgExpCS20095 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleIfExpCS_in_entryRuleIfExpCS20129 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleIfExpCS20139 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_126_in_ruleIfExpCS20176 = new BitSet(new long[]{0x0AFFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleIfExpCS20199 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
+        public static final BitSet FOLLOW_rulePatternExpCS_in_ruleIfExpCS20218 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
+        public static final BitSet FOLLOW_127_in_ruleIfExpCS20233 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleIfExpCS20254 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000005L});
+        public static final BitSet FOLLOW_ruleElseIfThenExpCS_in_ruleIfExpCS20275 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000005L});
+        public static final BitSet FOLLOW_128_in_ruleIfExpCS20288 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleIfExpCS20309 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
+        public static final BitSet FOLLOW_129_in_ruleIfExpCS20321 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleElseIfThenExpCS_in_entryRuleElseIfThenExpCS20357 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleElseIfThenExpCS20367 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_130_in_ruleElseIfThenExpCS20404 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleElseIfThenExpCS20425 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
+        public static final BitSet FOLLOW_127_in_ruleElseIfThenExpCS20437 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleElseIfThenExpCS20458 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLetExpCS_in_entryRuleLetExpCS20494 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleLetExpCS20504 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_131_in_ruleLetExpCS20541 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleLetVariableCS_in_ruleLetExpCS20562 = new BitSet(new long[]{0x1000000000000000L,0x1000000000000000L});
+        public static final BitSet FOLLOW_60_in_ruleLetExpCS20575 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0000000000010D00L});
+        public static final BitSet FOLLOW_ruleLetVariableCS_in_ruleLetExpCS20596 = new BitSet(new long[]{0x1000000000000000L,0x1000000000000000L});
+        public static final BitSet FOLLOW_124_in_ruleLetExpCS20610 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleLetExpCS20631 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLetVariableCS_in_entryRuleLetVariableCS20667 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleLetVariableCS20677 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleLetVariableCS20723 = new BitSet(new long[]{0x8280000000000000L});
+        public static final BitSet FOLLOW_ruleRoundBracketedClauseCS_in_ruleLetVariableCS20744 = new BitSet(new long[]{0x8200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleLetVariableCS20758 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypeExpCS_in_ruleLetVariableCS20779 = new BitSet(new long[]{0x8000000000000000L});
+        public static final BitSet FOLLOW_63_in_ruleLetVariableCS20793 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleLetVariableCS20814 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNestedExpCS_in_entryRuleNestedExpCS20850 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNestedExpCS20860 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_55_in_ruleNestedExpCS20897 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_ruleNestedExpCS20918 = new BitSet(new long[]{0x0100000000000000L});
+        public static final BitSet FOLLOW_56_in_ruleNestedExpCS20930 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSelfExpCS_in_entryRuleSelfExpCS20966 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleSelfExpCS20976 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_132_in_ruleSelfExpCS21025 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleMultiplicityBoundsCS_in_entryRuleMultiplicityBoundsCS21061 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleMultiplicityBoundsCS21071 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLOWER_in_ruleMultiplicityBoundsCS21117 = new BitSet(new long[]{0x0000000000000002L,0x0002000000000000L});
+        public static final BitSet FOLLOW_113_in_ruleMultiplicityBoundsCS21130 = new BitSet(new long[]{0x0000000000000010L,0x0000000000100000L});
+        public static final BitSet FOLLOW_ruleUPPER_in_ruleMultiplicityBoundsCS21151 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleMultiplicityCS_in_entryRuleMultiplicityCS21189 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleMultiplicityCS21199 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_122_in_ruleMultiplicityCS21236 = new BitSet(new long[]{0x0000000000000010L,0x0000000000500000L,0x0000000000000020L});
+        public static final BitSet FOLLOW_ruleMultiplicityBoundsCS_in_ruleMultiplicityCS21262 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L});
+        public static final BitSet FOLLOW_ruleMultiplicityStringCS_in_ruleMultiplicityCS21292 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L});
+        public static final BitSet FOLLOW_123_in_ruleMultiplicityCS21304 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleMultiplicityStringCS_in_entryRuleMultiplicityStringCS21340 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleMultiplicityStringCS21350 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_84_in_ruleMultiplicityStringCS21394 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_86_in_ruleMultiplicityStringCS21423 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_133_in_ruleMultiplicityStringCS21452 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePathNameCS_in_entryRulePathNameCS21503 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePathNameCS21513 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleFirstPathElementCS_in_rulePathNameCS21559 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+        public static final BitSet FOLLOW_99_in_rulePathNameCS21572 = new BitSet(new long[]{0x087FFFFFFFFA0300L,0x0001FFF400010D00L});
+        public static final BitSet FOLLOW_ruleNextPathElementCS_in_rulePathNameCS21593 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+        public static final BitSet FOLLOW_ruleFirstPathElementCS_in_entryRuleFirstPathElementCS21631 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleFirstPathElementCS21641 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleFirstPathElementCS21692 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNextPathElementCS_in_entryRuleNextPathElementCS21727 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNextPathElementCS21737 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnreservedName_in_ruleNextPathElementCS21788 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTemplateParameterSubstitutionCS_in_entryRuleTemplateParameterSubstitutionCS21823 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTemplateParameterSubstitutionCS21833 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeRefCS_in_ruleTemplateParameterSubstitutionCS21878 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeParameterCS_in_entryRuleTypeParameterCS21913 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypeParameterCS21923 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUnrestrictedName_in_ruleTypeParameterCS21969 = new BitSet(new long[]{0x0001000040000002L});
+        public static final BitSet FOLLOW_30_in_ruleTypeParameterCS21983 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS22004 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000040L});
+        public static final BitSet FOLLOW_134_in_ruleTypeParameterCS22017 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS22038 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000040L});
+        public static final BitSet FOLLOW_48_in_ruleTypeParameterCS22060 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypeParameterCS22081 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeRefCS_in_entryRuleTypeRefCS22120 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypeRefCS22130 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleTypeRefCS22180 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleWildcardTypeRefCS_in_ruleTypeRefCS22210 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypedTypeRefCS_in_entryRuleTypedTypeRefCS22245 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleTypedTypeRefCS22255 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePathNameCS_in_ruleTypedTypeRefCS22301 = new BitSet(new long[]{0x0080000000000002L,0x0000000000020000L});
+        public static final BitSet FOLLOW_ruleTemplateBindingCS_in_ruleTypedTypeRefCS22322 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleWildcardTypeRefCS_in_entryRuleWildcardTypeRefCS22359 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleWildcardTypeRefCS22369 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_133_in_ruleWildcardTypeRefCS22418 = new BitSet(new long[]{0x0001000040000002L});
+        public static final BitSet FOLLOW_30_in_ruleWildcardTypeRefCS22432 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleWildcardTypeRefCS22453 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_48_in_ruleWildcardTypeRefCS22473 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000010L});
+        public static final BitSet FOLLOW_ruleTypedRefCS_in_ruleWildcardTypeRefCS22494 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleID_in_entryRuleID22534 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleID22545 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SIMPLE_ID_in_ruleID22585 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_ESCAPED_ID_in_ruleID22611 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleIdentifier_in_entryRuleIdentifier22657 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleIdentifier22668 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleID_in_ruleIdentifier22714 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleLOWER_in_entryRuleLOWER22759 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleLOWER22770 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_INT_in_ruleLOWER22809 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleNUMBER_LITERAL_in_entryRuleNUMBER_LITERAL22854 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleNUMBER_LITERAL22865 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_INT_in_ruleNUMBER_LITERAL22904 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleStringLiteral_in_entryRuleStringLiteral22949 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleStringLiteral22960 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleStringLiteral22999 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleUPPER_in_entryRuleUPPER23044 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleUPPER23055 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_INT_in_ruleUPPER23095 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_84_in_ruleUPPER23119 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleURI_in_entryRuleURI23160 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleURI23171 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_SINGLE_QUOTED_STRING_in_ruleURI23210 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_47_in_synpred63_InternalOCLinEcore2493 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_26_in_synpred64_InternalOCLinEcore2578 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_synpred70_InternalOCLinEcore2795 = new BitSet(new long[]{0x0000000010000002L,0x0000000000000001L});
+        public static final BitSet FOLLOW_28_in_synpred70_InternalOCLinEcore2815 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_64_in_synpred70_InternalOCLinEcore2846 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred70_InternalOCLinEcore2860 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_31_in_synpred73_InternalOCLinEcore2939 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_65_in_synpred73_InternalOCLinEcore2970 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred73_InternalOCLinEcore2984 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_38_in_synpred76_InternalOCLinEcore3061 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_66_in_synpred76_InternalOCLinEcore3092 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred76_InternalOCLinEcore3106 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_44_in_synpred79_InternalOCLinEcore3183 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_67_in_synpred79_InternalOCLinEcore3214 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred79_InternalOCLinEcore3228 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_50_in_synpred82_InternalOCLinEcore3305 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_68_in_synpred82_InternalOCLinEcore3336 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred82_InternalOCLinEcore3350 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_69_in_synpred85_InternalOCLinEcore3427 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_51_in_synpred85_InternalOCLinEcore3458 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred85_InternalOCLinEcore3472 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_52_in_synpred88_InternalOCLinEcore3549 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_70_in_synpred88_InternalOCLinEcore3580 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred88_InternalOCLinEcore3594 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_synpred92_InternalOCLinEcore3672 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_71_in_synpred92_InternalOCLinEcore3703 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_synpred92_InternalOCLinEcore3717 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_synpred92_InternalOCLinEcore3733 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_synpred93_InternalOCLinEcore2795 = new BitSet(new long[]{0x603C104090000002L,0x00000000000000FFL});
+        public static final BitSet FOLLOW_28_in_synpred93_InternalOCLinEcore2815 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_64_in_synpred93_InternalOCLinEcore2846 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_synpred93_InternalOCLinEcore2860 = new BitSet(new long[]{0x603C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_31_in_synpred93_InternalOCLinEcore2939 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_65_in_synpred93_InternalOCLinEcore2970 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_synpred93_InternalOCLinEcore2984 = new BitSet(new long[]{0x603C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_38_in_synpred93_InternalOCLinEcore3061 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_66_in_synpred93_InternalOCLinEcore3092 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_synpred93_InternalOCLinEcore3106 = new BitSet(new long[]{0x603C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_44_in_synpred93_InternalOCLinEcore3183 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_67_in_synpred93_InternalOCLinEcore3214 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_synpred93_InternalOCLinEcore3228 = new BitSet(new long[]{0x603C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_50_in_synpred93_InternalOCLinEcore3305 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_68_in_synpred93_InternalOCLinEcore3336 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_synpred93_InternalOCLinEcore3350 = new BitSet(new long[]{0x603C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_69_in_synpred93_InternalOCLinEcore3427 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_51_in_synpred93_InternalOCLinEcore3458 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_synpred93_InternalOCLinEcore3472 = new BitSet(new long[]{0x603C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_52_in_synpred93_InternalOCLinEcore3549 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_70_in_synpred93_InternalOCLinEcore3580 = new BitSet(new long[]{0x703C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_60_in_synpred93_InternalOCLinEcore3594 = new BitSet(new long[]{0x603C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_53_in_synpred93_InternalOCLinEcore3672 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_71_in_synpred93_InternalOCLinEcore3703 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_synpred93_InternalOCLinEcore3717 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_synpred93_InternalOCLinEcore3733 = new BitSet(new long[]{0x603C104080000002L,0x00000000000000FEL});
+        public static final BitSet FOLLOW_47_in_synpred139_InternalOCLinEcore6368 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_26_in_synpred140_InternalOCLinEcore6453 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_synpred150_InternalOCLinEcore6811 = new BitSet(new long[]{0x0000000010000002L,0x0000000000000001L});
+        public static final BitSet FOLLOW_28_in_synpred150_InternalOCLinEcore6831 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_64_in_synpred150_InternalOCLinEcore6862 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred150_InternalOCLinEcore6876 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_38_in_synpred153_InternalOCLinEcore6955 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_66_in_synpred153_InternalOCLinEcore6986 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred153_InternalOCLinEcore7000 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_69_in_synpred157_InternalOCLinEcore7078 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_51_in_synpred157_InternalOCLinEcore7109 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_synpred157_InternalOCLinEcore7123 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_synpred157_InternalOCLinEcore7139 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_synpred158_InternalOCLinEcore6811 = new BitSet(new long[]{0x6008004010000002L,0x0000000000000025L});
+        public static final BitSet FOLLOW_28_in_synpred158_InternalOCLinEcore6831 = new BitSet(new long[]{0x7008004000000002L,0x0000000000000024L});
+        public static final BitSet FOLLOW_64_in_synpred158_InternalOCLinEcore6862 = new BitSet(new long[]{0x7008004000000002L,0x0000000000000024L});
+        public static final BitSet FOLLOW_60_in_synpred158_InternalOCLinEcore6876 = new BitSet(new long[]{0x6008004000000002L,0x0000000000000024L});
+        public static final BitSet FOLLOW_38_in_synpred158_InternalOCLinEcore6955 = new BitSet(new long[]{0x7008004000000002L,0x0000000000000024L});
+        public static final BitSet FOLLOW_66_in_synpred158_InternalOCLinEcore6986 = new BitSet(new long[]{0x7008004000000002L,0x0000000000000024L});
+        public static final BitSet FOLLOW_60_in_synpred158_InternalOCLinEcore7000 = new BitSet(new long[]{0x6008004000000002L,0x0000000000000024L});
+        public static final BitSet FOLLOW_69_in_synpred158_InternalOCLinEcore7078 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_51_in_synpred158_InternalOCLinEcore7109 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_synpred158_InternalOCLinEcore7123 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_synpred158_InternalOCLinEcore7139 = new BitSet(new long[]{0x6008004000000002L,0x0000000000000024L});
+        public static final BitSet FOLLOW_60_in_synpred174_InternalOCLinEcore7963 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_synpred176_InternalOCLinEcore7898 = new BitSet(new long[]{0x0000004000000002L,0x0000000000000004L});
+        public static final BitSet FOLLOW_38_in_synpred176_InternalOCLinEcore7918 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_66_in_synpred176_InternalOCLinEcore7949 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred176_InternalOCLinEcore7963 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_69_in_synpred180_InternalOCLinEcore8043 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_51_in_synpred180_InternalOCLinEcore8074 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_synpred180_InternalOCLinEcore8088 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_synpred180_InternalOCLinEcore8104 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_synpred181_InternalOCLinEcore7898 = new BitSet(new long[]{0x6008004000000002L,0x0000000000000024L});
+        public static final BitSet FOLLOW_38_in_synpred181_InternalOCLinEcore7918 = new BitSet(new long[]{0x7008000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_66_in_synpred181_InternalOCLinEcore7949 = new BitSet(new long[]{0x7008000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_60_in_synpred181_InternalOCLinEcore7963 = new BitSet(new long[]{0x6008000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_69_in_synpred181_InternalOCLinEcore8043 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_51_in_synpred181_InternalOCLinEcore8074 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_synpred181_InternalOCLinEcore8088 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_synpred181_InternalOCLinEcore8104 = new BitSet(new long[]{0x6008000000000002L,0x0000000000000020L});
+        public static final BitSet FOLLOW_47_in_synpred184_InternalOCLinEcore8349 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_26_in_synpred185_InternalOCLinEcore8434 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_synpred192_InternalOCLinEcore8693 = new BitSet(new long[]{0x0000000001000002L,0x0000000000004000L});
+        public static final BitSet FOLLOW_24_in_synpred192_InternalOCLinEcore8713 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_78_in_synpred192_InternalOCLinEcore8744 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred192_InternalOCLinEcore8758 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_28_in_synpred195_InternalOCLinEcore8837 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_64_in_synpred195_InternalOCLinEcore8868 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred195_InternalOCLinEcore8882 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_38_in_synpred198_InternalOCLinEcore8959 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_66_in_synpred198_InternalOCLinEcore8990 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred198_InternalOCLinEcore9004 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_44_in_synpred201_InternalOCLinEcore9081 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_67_in_synpred201_InternalOCLinEcore9112 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred201_InternalOCLinEcore9126 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_46_in_synpred204_InternalOCLinEcore9203 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_79_in_synpred204_InternalOCLinEcore9234 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred204_InternalOCLinEcore9248 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_50_in_synpred207_InternalOCLinEcore9325 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_68_in_synpred207_InternalOCLinEcore9356 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred207_InternalOCLinEcore9370 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_69_in_synpred210_InternalOCLinEcore9447 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_51_in_synpred210_InternalOCLinEcore9478 = new BitSet(new long[]{0x1000000000000002L});
+    }
+
+    private static class FollowSets001 {
+        public static final BitSet FOLLOW_60_in_synpred210_InternalOCLinEcore9492 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_52_in_synpred213_InternalOCLinEcore9569 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_70_in_synpred213_InternalOCLinEcore9600 = new BitSet(new long[]{0x1000000000000002L});
+        public static final BitSet FOLLOW_60_in_synpred213_InternalOCLinEcore9614 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_53_in_synpred217_InternalOCLinEcore9692 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_71_in_synpred217_InternalOCLinEcore9723 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_synpred217_InternalOCLinEcore9737 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_synpred217_InternalOCLinEcore9753 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_61_in_synpred218_InternalOCLinEcore8693 = new BitSet(new long[]{0x603C504011000002L,0x000000000000C0FDL});
+        public static final BitSet FOLLOW_24_in_synpred218_InternalOCLinEcore8713 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_78_in_synpred218_InternalOCLinEcore8744 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_synpred218_InternalOCLinEcore8758 = new BitSet(new long[]{0x603C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_28_in_synpred218_InternalOCLinEcore8837 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_64_in_synpred218_InternalOCLinEcore8868 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_synpred218_InternalOCLinEcore8882 = new BitSet(new long[]{0x603C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_38_in_synpred218_InternalOCLinEcore8959 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_66_in_synpred218_InternalOCLinEcore8990 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_synpred218_InternalOCLinEcore9004 = new BitSet(new long[]{0x603C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_44_in_synpred218_InternalOCLinEcore9081 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_67_in_synpred218_InternalOCLinEcore9112 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_synpred218_InternalOCLinEcore9126 = new BitSet(new long[]{0x603C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_46_in_synpred218_InternalOCLinEcore9203 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_79_in_synpred218_InternalOCLinEcore9234 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_synpred218_InternalOCLinEcore9248 = new BitSet(new long[]{0x603C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_50_in_synpred218_InternalOCLinEcore9325 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_68_in_synpred218_InternalOCLinEcore9356 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_synpred218_InternalOCLinEcore9370 = new BitSet(new long[]{0x603C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_69_in_synpred218_InternalOCLinEcore9447 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_51_in_synpred218_InternalOCLinEcore9478 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_synpred218_InternalOCLinEcore9492 = new BitSet(new long[]{0x603C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_52_in_synpred218_InternalOCLinEcore9569 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_70_in_synpred218_InternalOCLinEcore9600 = new BitSet(new long[]{0x703C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_60_in_synpred218_InternalOCLinEcore9614 = new BitSet(new long[]{0x603C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_53_in_synpred218_InternalOCLinEcore9692 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_71_in_synpred218_InternalOCLinEcore9723 = new BitSet(new long[]{0x5000000000000000L});
+        public static final BitSet FOLLOW_60_in_synpred218_InternalOCLinEcore9737 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_synpred218_InternalOCLinEcore9753 = new BitSet(new long[]{0x603C504010000002L,0x00000000000080FDL});
+        public static final BitSet FOLLOW_ruleTypeLiteralCS_in_synpred320_InternalOCLinEcore17440 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrefixedPrimaryExpCS_in_synpred323_InternalOCLinEcore17589 = new BitSet(new long[]{0x8000000000040002L,0x00000003FFF60000L});
+        public static final BitSet FOLLOW_ruleBinaryOperatorName_in_synpred323_InternalOCLinEcore17622 = new BitSet(new long[]{0x08FFFFFFFFFE0330L,0x40F9FFF400190D00L,0x0000000000000018L});
+        public static final BitSet FOLLOW_ruleExpCS_in_synpred323_InternalOCLinEcore17643 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTupleLiteralExpCS_in_synpred330_InternalOCLinEcore18206 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionLiteralExpCS_in_synpred331_InternalOCLinEcore18236 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleTypeLiteralExpCS_in_synpred333_InternalOCLinEcore18296 = new BitSet(new long[]{0x0000000000000002L});
     }
 
 
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/serializer/AbstractOCLinEcoreSemanticSequencer.java b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/serializer/AbstractOCLinEcoreSemanticSequencer.java
index 0763f0e..ca5dff4 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/serializer/AbstractOCLinEcoreSemanticSequencer.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/serializer/AbstractOCLinEcoreSemanticSequencer.java
@@ -695,28 +695,21 @@
 	/**
 	 * Constraint:
 	 *     (
-	 *         ((qualifiers+='static' qualifiers+='definition'?) | (qualifiers+='definition' qualifiers+='static'?))? 
+	 *         isStatic?='static'? 
+	 *         isDefinition?='definition'? 
 	 *         name=UnrestrictedName 
 	 *         ownedType=TypedMultiplicityRefCS? 
 	 *         default=SINGLE_QUOTED_STRING? 
 	 *         (
-	 *             qualifiers+='derived' | 
-	 *             qualifiers+='!derived' | 
-	 *             qualifiers+='id' | 
-	 *             qualifiers+='!id' | 
-	 *             qualifiers+='ordered' | 
-	 *             qualifiers+='!ordered' | 
-	 *             qualifiers+='readonly' | 
-	 *             qualifiers+='!readonly' | 
-	 *             qualifiers+='transient' | 
-	 *             qualifiers+='!transient' | 
-	 *             qualifiers+='unique' | 
-	 *             qualifiers+='!unique' | 
-	 *             qualifiers+='unsettable' | 
-	 *             qualifiers+='!unsettable' | 
-	 *             qualifiers+='volatile' | 
-	 *             qualifiers+='!volatile'
-	 *         )* 
+	 *             isDerived?='derived'? 
+	 *             isId?='id'? 
+	 *             isOrdered?='ordered'? 
+	 *             isReadonly?='readonly'? 
+	 *             isTransient?='transient'? 
+	 *             isNotUnique?='!unique'? 
+	 *             isUnsettable?='unsettable'? 
+	 *             isVolatile?='volatile'?
+	 *         )? 
 	 *         (ownedAnnotations+=AnnotationElementCS | ownedDefaultExpressions+=SpecificationCS? | ownedDefaultExpressions+=SpecificationCS?)*
 	 *     )
 	 */
@@ -836,20 +829,14 @@
 	/**
 	 * Constraint:
 	 *     (
-	 *         ((qualifiers+='static' qualifiers+='definition'?) | (qualifiers+='definition' qualifiers+='static'?))? 
+	 *         isStatic?='static'? 
+	 *         isDefinition?='definition'? 
 	 *         ownedSignature=TemplateSignatureCS? 
 	 *         name=UnrestrictedName 
 	 *         (ownedParameters+=ParameterCS ownedParameters+=ParameterCS*)? 
 	 *         ownedType=TypedMultiplicityRefCS? 
 	 *         (ownedExceptions+=TypedRefCS ownedExceptions+=TypedRefCS*)? 
-	 *         (
-	 *             qualifiers+='derived' | 
-	 *             qualifiers+='!derived' | 
-	 *             qualifiers+='ordered' | 
-	 *             qualifiers+='!ordered' | 
-	 *             qualifiers+='unique' | 
-	 *             qualifiers+='!unique'
-	 *         )* 
+	 *         (isDerived?='derived'? isOrdered?='ordered'? isNotUnique?='!unique'?)? 
 	 *         (
 	 *             ownedAnnotations+=AnnotationElementCS | 
 	 *             ownedPreconditions+=PreconditionConstraintCS | 
@@ -879,12 +866,7 @@
 	
 	/**
 	 * Constraint:
-	 *     (
-	 *         name=UnrestrictedName 
-	 *         ownedType=TypedMultiplicityRefCS? 
-	 *         (qualifiers+='ordered' | qualifiers+='!ordered' | qualifiers+='unique' | qualifiers+='!unique')* 
-	 *         ownedAnnotations+=AnnotationElementCS*
-	 *     )
+	 *     (name=UnrestrictedName ownedType=TypedMultiplicityRefCS? (isOrdered?='ordered'? isNotUnique?='!unique'?)? ownedAnnotations+=AnnotationElementCS*)
 	 */
 	protected void sequence_ParameterCS(EObject context, ParameterCS semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
@@ -921,31 +903,23 @@
 	/**
 	 * Constraint:
 	 *     (
-	 *         ((qualifiers+='static' qualifiers+='definition'?) | (qualifiers+='definition' qualifiers+='static'?))? 
+	 *         isStatic?='static'? 
+	 *         isDefinition?='definition'? 
 	 *         name=UnrestrictedName 
 	 *         referredOpposite=[Property|UnrestrictedName]? 
 	 *         ownedType=TypedMultiplicityRefCS? 
 	 *         default=SINGLE_QUOTED_STRING? 
 	 *         (
-	 *             qualifiers+='composes' | 
-	 *             qualifiers+='!composes' | 
-	 *             qualifiers+='derived' | 
-	 *             qualifiers+='!derived' | 
-	 *             qualifiers+='ordered' | 
-	 *             qualifiers+='!ordered' | 
-	 *             qualifiers+='readonly' | 
-	 *             qualifiers+='!readonly' | 
-	 *             qualifiers+='resolve' | 
-	 *             qualifiers+='!resolve' | 
-	 *             qualifiers+='transient' | 
-	 *             qualifiers+='!transient' | 
-	 *             qualifiers+='unique' | 
-	 *             qualifiers+='!unique' | 
-	 *             qualifiers+='unsettable' | 
-	 *             qualifiers+='!unsettable' | 
-	 *             qualifiers+='volatile' | 
-	 *             qualifiers+='!volatile'
-	 *         )* 
+	 *             isComposes?='composes'? 
+	 *             isDerived?='derived'? 
+	 *             isOrdered?='ordered'? 
+	 *             isReadonly?='readonly'? 
+	 *             isResolve?='resolve'? 
+	 *             isTransient?='transient'? 
+	 *             isNotUnique?='!unique'? 
+	 *             isUnsettable?='unsettable'? 
+	 *             isVolatile?='volatile'?
+	 *         )? 
 	 *         (
 	 *             ownedAnnotations+=AnnotationElementCS | 
 	 *             (referredKeys+=[Property|UnrestrictedName] referredKeys+=[Property|UnrestrictedName]*) | 
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/serializer/AbstractOCLinEcoreSyntacticSequencer.java b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/serializer/AbstractOCLinEcoreSyntacticSequencer.java
index 3d7c33d..815d4d5 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/serializer/AbstractOCLinEcoreSyntacticSequencer.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/serializer/AbstractOCLinEcoreSyntacticSequencer.java
@@ -19,21 +19,49 @@
 public abstract class AbstractOCLinEcoreSyntacticSequencer extends AbstractSyntacticSequencer {
 
 	protected OCLinEcoreGrammarAccess grammarAccess;
+	protected AbstractElementAlias match_AttributeCS_CommaKeyword_5_0_1_1_q;
 	protected AbstractElementAlias match_AttributeCS_CommaKeyword_5_1_1_q;
+	protected AbstractElementAlias match_AttributeCS_CommaKeyword_5_2_1_q;
+	protected AbstractElementAlias match_AttributeCS_CommaKeyword_5_3_1_q;
+	protected AbstractElementAlias match_AttributeCS_CommaKeyword_5_4_1_q;
+	protected AbstractElementAlias match_AttributeCS_CommaKeyword_5_5_1_q;
+	protected AbstractElementAlias match_AttributeCS_CommaKeyword_5_6_1_q;
+	protected AbstractElementAlias match_AttributeCS_IsDerivedDerivedKeyword_5_0_1_0_0_0;
+	protected AbstractElementAlias match_AttributeCS_IsVolatileVolatileKeyword_5_7_0_0_0_0;
 	protected AbstractElementAlias match_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a_RightCurlyBracketKeyword_6_0_2__;
 	protected AbstractElementAlias match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q;
 	protected AbstractElementAlias match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_2_1_q;
+	protected AbstractElementAlias match_AttributeCS___CommaKeyword_5_1_1_q_IdKeyword_5_1_0_1__a;
+	protected AbstractElementAlias match_AttributeCS___CommaKeyword_5_2_1_q_OrderedKeyword_5_2_0_1__a;
+	protected AbstractElementAlias match_AttributeCS___CommaKeyword_5_3_1_q_ReadonlyKeyword_5_3_0_1__a;
+	protected AbstractElementAlias match_AttributeCS___CommaKeyword_5_4_1_q_TransientKeyword_5_4_0_1__a;
+	protected AbstractElementAlias match_AttributeCS___CommaKeyword_5_5_1_q_UniqueKeyword_5_5_0_1__a;
+	protected AbstractElementAlias match_AttributeCS___CommaKeyword_5_6_1_q_UnsettableKeyword_5_6_0_1__a;
 	protected AbstractElementAlias match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a__a;
 	protected AbstractElementAlias match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a;
 	protected AbstractElementAlias match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___or_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a_SemicolonKeyword_6_0_1_1_4__q___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a__a__;
+	protected AbstractElementAlias match_AttributeCS___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a;
 	protected AbstractElementAlias match_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a;
 	protected AbstractElementAlias match_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a;
 	protected AbstractElementAlias match_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a___or_____InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a_SemicolonKeyword_6_0_1_2_4__q___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a__a__;
+	protected AbstractElementAlias match_AttributeCS___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a;
+	protected AbstractElementAlias match_AttributeCS___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a;
+	protected AbstractElementAlias match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a;
+	protected AbstractElementAlias match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a;
+	protected AbstractElementAlias match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a;
+	protected AbstractElementAlias match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a;
+	protected AbstractElementAlias match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a;
+	protected AbstractElementAlias match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a;
+	protected AbstractElementAlias match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a;
 	protected AbstractElementAlias match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a;
 	protected AbstractElementAlias match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__p;
 	protected AbstractElementAlias match_AttributeCS___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a;
 	protected AbstractElementAlias match_AttributeCS___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__p;
+	protected AbstractElementAlias match_AttributeCS___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a;
+	protected AbstractElementAlias match_AttributeCS___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a;
+	protected AbstractElementAlias match_AttributeCS___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a;
 	protected AbstractElementAlias match_AttributeCS_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a;
+	protected AbstractElementAlias match_AttributeCS_______LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q___or___RightCurlyBracketKeyword_5_7_1___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q_________IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___or___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___or___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___or___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___or___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___or___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q____a__p;
 	protected AbstractElementAlias match_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_2__;
 	protected AbstractElementAlias match_DataTypeCS___LeftCurlyBracketKeyword_5_0_SerializableKeyword_5_1_1_q_RightCurlyBracketKeyword_5_2__q;
 	protected AbstractElementAlias match_EnumerationCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__;
@@ -41,29 +69,72 @@
 	protected AbstractElementAlias match_EnumerationLiteralCS_SemicolonKeyword_2_1_or___LeftCurlyBracketKeyword_2_0_0_RightCurlyBracketKeyword_2_0_2__;
 	protected AbstractElementAlias match_InvariantConstraintCS_SemicolonKeyword_3_1_or___ColonKeyword_3_0_0_SemicolonKeyword_3_0_2__;
 	protected AbstractElementAlias match_OperationCS_CommaKeyword_9_1_1_q;
+	protected AbstractElementAlias match_OperationCS_IsDerivedDerivedKeyword_9_0_1_0_0_0;
+	protected AbstractElementAlias match_OperationCS_IsNotUniqueUniqueKeyword_9_2_0_0_0_0;
 	protected AbstractElementAlias match_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2_SemicolonKeyword_10_0_1_2_4__a_RightCurlyBracketKeyword_10_0_2__;
 	protected AbstractElementAlias match_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_2_1_q;
 	protected AbstractElementAlias match_OperationCS___BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2_SemicolonKeyword_10_0_1_2_4__a;
+	protected AbstractElementAlias match_OperationCS___CommaKeyword_9_1_1_q_____LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1__a;
+	protected AbstractElementAlias match_OperationCS___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a__a;
+	protected AbstractElementAlias match_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a;
+	protected AbstractElementAlias match_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a;
 	protected AbstractElementAlias match_OperationCS___SemicolonKeyword_10_0_1_2_4_BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2__a;
 	protected AbstractElementAlias match_OperationCS___SemicolonKeyword_10_0_1_2_4_BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2__p;
+	protected AbstractElementAlias match_OperationCS_______LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a;
 	protected AbstractElementAlias match_PackageCS_SemicolonKeyword_4_1_or___LeftCurlyBracketKeyword_4_0_0_RightCurlyBracketKeyword_4_0_2__;
-	protected AbstractElementAlias match_ParameterCS_CommaKeyword_2_1_1_q;
+	protected AbstractElementAlias match_ParameterCS_IsNotUniqueUniqueKeyword_2_1_0_0_0_0;
+	protected AbstractElementAlias match_ParameterCS_IsOrderedOrderedKeyword_2_0_1_0_0_0;
+	protected AbstractElementAlias match_ParameterCS___CommaKeyword_2_1_0_1_q___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a__p_UniqueKeyword_2_1_0_0_1__a;
 	protected AbstractElementAlias match_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q;
+	protected AbstractElementAlias match_ParameterCS___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q__a;
+	protected AbstractElementAlias match_ParameterCS_____LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q___or___RightCurlyBracketKeyword_2_1_1___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q____p;
+	protected AbstractElementAlias match_ReferenceCS_CommaKeyword_6_0_1_1_q;
 	protected AbstractElementAlias match_ReferenceCS_CommaKeyword_6_1_1_q;
+	protected AbstractElementAlias match_ReferenceCS_CommaKeyword_6_2_1_q;
+	protected AbstractElementAlias match_ReferenceCS_CommaKeyword_6_3_1_q;
+	protected AbstractElementAlias match_ReferenceCS_CommaKeyword_6_4_1_q;
+	protected AbstractElementAlias match_ReferenceCS_CommaKeyword_6_5_1_q;
+	protected AbstractElementAlias match_ReferenceCS_CommaKeyword_6_6_1_q;
+	protected AbstractElementAlias match_ReferenceCS_CommaKeyword_6_7_1_q;
+	protected AbstractElementAlias match_ReferenceCS_IsComposesComposesKeyword_6_0_1_0_0_0;
+	protected AbstractElementAlias match_ReferenceCS_IsVolatileVolatileKeyword_6_8_0_0_0_0;
 	protected AbstractElementAlias match_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a_RightCurlyBracketKeyword_7_0_2__;
 	protected AbstractElementAlias match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_2_1_q;
 	protected AbstractElementAlias match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_3_1_q;
+	protected AbstractElementAlias match_ReferenceCS___CommaKeyword_6_1_1_q_DerivedKeyword_6_1_0_1__a;
+	protected AbstractElementAlias match_ReferenceCS___CommaKeyword_6_2_1_q_OrderedKeyword_6_2_0_1__a;
+	protected AbstractElementAlias match_ReferenceCS___CommaKeyword_6_3_1_q_ReadonlyKeyword_6_3_0_1__a;
+	protected AbstractElementAlias match_ReferenceCS___CommaKeyword_6_4_1_q_ResolveKeyword_6_4_0_1__a;
+	protected AbstractElementAlias match_ReferenceCS___CommaKeyword_6_5_1_q_TransientKeyword_6_5_0_1__a;
+	protected AbstractElementAlias match_ReferenceCS___CommaKeyword_6_6_1_q_UniqueKeyword_6_6_0_1__a;
+	protected AbstractElementAlias match_ReferenceCS___CommaKeyword_6_7_1_q_UnsettableKeyword_6_7_0_1__a;
 	protected AbstractElementAlias match_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a__a;
 	protected AbstractElementAlias match_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a;
 	protected AbstractElementAlias match_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a___or_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a_SemicolonKeyword_7_0_1_2_4__q___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__p_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__p_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a__a__;
+	protected AbstractElementAlias match_ReferenceCS___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a;
 	protected AbstractElementAlias match_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a__a;
 	protected AbstractElementAlias match_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a;
 	protected AbstractElementAlias match_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a___or_____InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a_SemicolonKeyword_7_0_1_3_4__q___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__p_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__p_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a__a__;
+	protected AbstractElementAlias match_ReferenceCS___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a;
+	protected AbstractElementAlias match_ReferenceCS___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a;
+	protected AbstractElementAlias match_ReferenceCS___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a;
+	protected AbstractElementAlias match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a;
+	protected AbstractElementAlias match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a;
+	protected AbstractElementAlias match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a;
+	protected AbstractElementAlias match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a;
+	protected AbstractElementAlias match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a;
+	protected AbstractElementAlias match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a;
+	protected AbstractElementAlias match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a;
+	protected AbstractElementAlias match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a;
 	protected AbstractElementAlias match_ReferenceCS___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a;
 	protected AbstractElementAlias match_ReferenceCS___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__p;
 	protected AbstractElementAlias match_ReferenceCS___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a;
 	protected AbstractElementAlias match_ReferenceCS___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__p;
+	protected AbstractElementAlias match_ReferenceCS___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a;
+	protected AbstractElementAlias match_ReferenceCS___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a;
+	protected AbstractElementAlias match_ReferenceCS___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a;
 	protected AbstractElementAlias match_ReferenceCS_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a;
+	protected AbstractElementAlias match_ReferenceCS_______LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q___or___RightCurlyBracketKeyword_6_8_1___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q_________DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___or___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___or___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___or___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___or___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___or___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___or___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q____a__p;
 	protected AbstractElementAlias match_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__;
 	protected AbstractElementAlias match_StructuredClassCS___LeftCurlyBracketKeyword_6_0_RightCurlyBracketKeyword_6_2__q;
 	protected AbstractElementAlias match_TopLevelCS___ModuleKeyword_1_0_UnrestrictedNameParserRuleCall_1_1__q;
@@ -72,21 +143,49 @@
 	@Inject
 	protected void init(IGrammarAccess access) {
 		grammarAccess = (OCLinEcoreGrammarAccess) access;
+		match_AttributeCS_CommaKeyword_5_0_1_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1());
 		match_AttributeCS_CommaKeyword_5_1_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1());
+		match_AttributeCS_CommaKeyword_5_2_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1());
+		match_AttributeCS_CommaKeyword_5_3_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1());
+		match_AttributeCS_CommaKeyword_5_4_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1());
+		match_AttributeCS_CommaKeyword_5_5_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1());
+		match_AttributeCS_CommaKeyword_5_6_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1());
+		match_AttributeCS_IsDerivedDerivedKeyword_5_0_1_0_0_0 = new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIsDerivedDerivedKeyword_5_0_1_0_0_0());
+		match_AttributeCS_IsVolatileVolatileKeyword_5_7_0_0_0_0 = new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIsVolatileVolatileKeyword_5_7_0_0_0_0());
 		match_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a_RightCurlyBracketKeyword_6_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()))), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_6_0_2())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_1()));
 		match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1());
 		match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_2_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1());
+		match_AttributeCS___CommaKeyword_5_1_1_q_IdKeyword_5_1_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()));
+		match_AttributeCS___CommaKeyword_5_2_1_q_OrderedKeyword_5_2_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()));
+		match_AttributeCS___CommaKeyword_5_3_1_q_ReadonlyKeyword_5_3_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()));
+		match_AttributeCS___CommaKeyword_5_4_1_q_TransientKeyword_5_4_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()));
+		match_AttributeCS___CommaKeyword_5_5_1_q_UniqueKeyword_5_5_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()));
+		match_AttributeCS___CommaKeyword_5_6_1_q_UnsettableKeyword_5_6_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()));
 		match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4())));
 		match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()));
 		match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___or_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a_SemicolonKeyword_6_0_1_1_4__q___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a__a__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2())))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()))));
+		match_AttributeCS___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()))));
 		match_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())));
 		match_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()));
 		match_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a___or_____InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a_SemicolonKeyword_6_0_1_2_4__q___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a__a__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4())), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2())))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()))));
+		match_AttributeCS___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()))));
+		match_AttributeCS___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()))));
+		match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1())));
+		match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1())));
+		match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1())));
+		match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1())));
+		match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1())));
+		match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1())));
+		match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1())));
 		match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()));
 		match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()));
 		match_AttributeCS___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()));
 		match_AttributeCS___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()));
+		match_AttributeCS___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()))));
+		match_AttributeCS___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()))));
+		match_AttributeCS___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1()))));
 		match_AttributeCS_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a = new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_2_4())));
+		match_AttributeCS_______LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q___or___RightCurlyBracketKeyword_5_7_1___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q_________IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___or___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___or___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___or___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___or___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___or___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q____a__p = new GroupAlias(true, false, new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivedKeyword_5_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_0_1_1()))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_5_7_1()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getVolatileKeyword_5_7_0_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_7_0_1())))), new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getIdKeyword_5_1_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getOrderedKeyword_5_2_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_2_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getReadonlyKeyword_5_3_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_3_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getTransientKeyword_5_4_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_4_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUniqueKeyword_5_5_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_5_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getUnsettableKeyword_5_6_0_1()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_6_1()))));
 		match_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_6_0_2())), new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getSemicolonKeyword_6_1()));
 		match_DataTypeCS___LeftCurlyBracketKeyword_5_0_SerializableKeyword_5_1_1_q_RightCurlyBracketKeyword_5_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_5_0()), new TokenAlias(false, true, grammarAccess.getDataTypeCSAccess().getSerializableKeyword_5_1_1()), new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_5_2()));
 		match_EnumerationCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getEnumerationCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new TokenAlias(false, false, grammarAccess.getEnumerationCSAccess().getRightCurlyBracketKeyword_5_0_2())), new TokenAlias(false, false, grammarAccess.getEnumerationCSAccess().getSemicolonKeyword_5_1()));
@@ -94,29 +193,72 @@
 		match_EnumerationLiteralCS_SemicolonKeyword_2_1_or___LeftCurlyBracketKeyword_2_0_0_RightCurlyBracketKeyword_2_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getEnumerationLiteralCSAccess().getLeftCurlyBracketKeyword_2_0_0()), new TokenAlias(false, false, grammarAccess.getEnumerationLiteralCSAccess().getRightCurlyBracketKeyword_2_0_2())), new TokenAlias(false, false, grammarAccess.getEnumerationLiteralCSAccess().getSemicolonKeyword_2_1()));
 		match_InvariantConstraintCS_SemicolonKeyword_3_1_or___ColonKeyword_3_0_0_SemicolonKeyword_3_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getInvariantConstraintCSAccess().getColonKeyword_3_0_0()), new TokenAlias(false, false, grammarAccess.getInvariantConstraintCSAccess().getSemicolonKeyword_3_0_2())), new TokenAlias(false, false, grammarAccess.getInvariantConstraintCSAccess().getSemicolonKeyword_3_1()));
 		match_OperationCS_CommaKeyword_9_1_1_q = new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1());
+		match_OperationCS_IsDerivedDerivedKeyword_9_0_1_0_0_0 = new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getIsDerivedDerivedKeyword_9_0_1_0_0_0());
+		match_OperationCS_IsNotUniqueUniqueKeyword_9_2_0_0_0_0 = new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getIsNotUniqueUniqueKeyword_9_2_0_0_0_0());
 		match_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2_SemicolonKeyword_10_0_1_2_4__a_RightCurlyBracketKeyword_10_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_10_0_0()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4())), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_10_0_2())), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_1()));
 		match_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_2_1_q = new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_2_1());
 		match_OperationCS___BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2_SemicolonKeyword_10_0_1_2_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4()));
+		match_OperationCS___CommaKeyword_9_1_1_q_____LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1()), new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1()))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1())))), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1()));
+		match_OperationCS___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1()))), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1()))));
+		match_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1())));
+		match_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1()))), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1())));
 		match_OperationCS___SemicolonKeyword_10_0_1_2_4_BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2()));
 		match_OperationCS___SemicolonKeyword_10_0_1_2_4_BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2_2()));
+		match_OperationCS_______LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_9_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getDerivedKeyword_9_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_0_1_1()))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_9_2_1()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getUniqueKeyword_9_2_0_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_2_0_1())))), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getOrderedKeyword_9_1_0_1()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1()));
 		match_PackageCS_SemicolonKeyword_4_1_or___LeftCurlyBracketKeyword_4_0_0_RightCurlyBracketKeyword_4_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getPackageCSAccess().getLeftCurlyBracketKeyword_4_0_0()), new TokenAlias(false, false, grammarAccess.getPackageCSAccess().getRightCurlyBracketKeyword_4_0_2())), new TokenAlias(false, false, grammarAccess.getPackageCSAccess().getSemicolonKeyword_4_1()));
-		match_ParameterCS_CommaKeyword_2_1_1_q = new TokenAlias(false, true, grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_1());
+		match_ParameterCS_IsNotUniqueUniqueKeyword_2_1_0_0_0_0 = new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getIsNotUniqueUniqueKeyword_2_1_0_0_0_0());
+		match_ParameterCS_IsOrderedOrderedKeyword_2_0_1_0_0_0 = new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getIsOrderedOrderedKeyword_2_0_1_0_0_0());
+		match_ParameterCS___CommaKeyword_2_1_0_1_q___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a__p_UniqueKeyword_2_1_0_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_0_1()), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_1_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getOrderedKeyword_2_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getParameterCSAccess().getCommaKeyword_2_0_1_1())))), new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getUniqueKeyword_2_1_0_0_1()));
 		match_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_3_0()), new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_3_2()));
+		match_ParameterCS___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_1_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getOrderedKeyword_2_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getParameterCSAccess().getCommaKeyword_2_0_1_1()))), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getUniqueKeyword_2_1_0_0_1()), new TokenAlias(false, true, grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_0_1())));
+		match_ParameterCS_____LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q___or___RightCurlyBracketKeyword_2_1_1___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q____p = new AlternativeAlias(true, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_2_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getOrderedKeyword_2_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getParameterCSAccess().getCommaKeyword_2_0_1_1()))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_2_1_1()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getUniqueKeyword_2_1_0_0_1()), new TokenAlias(false, true, grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_0_1()))));
+		match_ReferenceCS_CommaKeyword_6_0_1_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1());
 		match_ReferenceCS_CommaKeyword_6_1_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1());
+		match_ReferenceCS_CommaKeyword_6_2_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1());
+		match_ReferenceCS_CommaKeyword_6_3_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1());
+		match_ReferenceCS_CommaKeyword_6_4_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1());
+		match_ReferenceCS_CommaKeyword_6_5_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1());
+		match_ReferenceCS_CommaKeyword_6_6_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1());
+		match_ReferenceCS_CommaKeyword_6_7_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1());
+		match_ReferenceCS_IsComposesComposesKeyword_6_0_1_0_0_0 = new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getIsComposesComposesKeyword_6_0_1_0_0_0());
+		match_ReferenceCS_IsVolatileVolatileKeyword_6_8_0_0_0_0 = new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getIsVolatileVolatileKeyword_6_8_0_0_0_0());
 		match_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a_RightCurlyBracketKeyword_7_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_7_0_0()), new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()))), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_7_0_2())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_1()));
 		match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_2_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1());
 		match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_3_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1());
+		match_ReferenceCS___CommaKeyword_6_1_1_q_DerivedKeyword_6_1_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()));
+		match_ReferenceCS___CommaKeyword_6_2_1_q_OrderedKeyword_6_2_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()));
+		match_ReferenceCS___CommaKeyword_6_3_1_q_ReadonlyKeyword_6_3_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()));
+		match_ReferenceCS___CommaKeyword_6_4_1_q_ResolveKeyword_6_4_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()));
+		match_ReferenceCS___CommaKeyword_6_5_1_q_TransientKeyword_6_5_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()));
+		match_ReferenceCS___CommaKeyword_6_6_1_q_UniqueKeyword_6_6_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()));
+		match_ReferenceCS___CommaKeyword_6_7_1_q_UnsettableKeyword_6_7_0_1__a = new GroupAlias(true, true, new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()));
 		match_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4())));
 		match_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()));
 		match_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a___or_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a_SemicolonKeyword_7_0_1_2_4__q___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__p_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__p_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a__a__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4())), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2())))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()))));
+		match_ReferenceCS___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()))));
 		match_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4())));
 		match_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()));
 		match_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a___or_____InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a_SemicolonKeyword_7_0_1_3_4__q___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__p_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__p_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a__a__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4())), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2())))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()))));
+		match_ReferenceCS___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()))));
+		match_ReferenceCS___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()))));
+		match_ReferenceCS___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()))));
+		match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1())));
+		match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1())));
+		match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1())));
+		match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1())));
+		match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1())));
+		match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1())));
+		match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1())));
+		match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1())));
 		match_ReferenceCS___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()));
 		match_ReferenceCS___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()));
 		match_ReferenceCS___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()));
 		match_ReferenceCS___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()));
+		match_ReferenceCS___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()))));
+		match_ReferenceCS___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()))));
+		match_ReferenceCS___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1()))));
 		match_ReferenceCS_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a = new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_2_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_2_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_2_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_2_4())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_3_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_3_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_3_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_3_4())));
+		match_ReferenceCS_______LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q___or___RightCurlyBracketKeyword_6_8_1___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q_________DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___or___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___or___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___or___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___or___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___or___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___or___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q____a__p = new GroupAlias(true, false, new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getComposesKeyword_6_0_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_0_1_1()))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_6_8_1()), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getVolatileKeyword_6_8_0_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_8_0_1())))), new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivedKeyword_6_1_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getOrderedKeyword_6_2_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_2_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getReadonlyKeyword_6_3_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_3_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getResolveKeyword_6_4_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_4_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getTransientKeyword_6_5_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_5_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUniqueKeyword_6_6_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_6_1())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getUnsettableKeyword_6_7_0_1()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_7_1()))));
 		match_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_7_0_0()), new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_7_0_2())), new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getSemicolonKeyword_7_1()));
 		match_StructuredClassCS___LeftCurlyBracketKeyword_6_0_RightCurlyBracketKeyword_6_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_6_0()), new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_6_2()));
 		match_TopLevelCS___ModuleKeyword_1_0_UnrestrictedNameParserRuleCall_1_1__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getTopLevelCSAccess().getModuleKeyword_1_0()), new TokenAlias(false, false, grammarAccess.getTopLevelCSAccess().getUnrestrictedNameParserRuleCall_1_1()));
@@ -153,26 +295,74 @@
 		List<INode> transitionNodes = collectNodes(fromNode, toNode);
 		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
 			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
-			if(match_AttributeCS_CommaKeyword_5_1_1_q.equals(syntax))
+			if(match_AttributeCS_CommaKeyword_5_0_1_1_q.equals(syntax))
+				emit_AttributeCS_CommaKeyword_5_0_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS_CommaKeyword_5_1_1_q.equals(syntax))
 				emit_AttributeCS_CommaKeyword_5_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS_CommaKeyword_5_2_1_q.equals(syntax))
+				emit_AttributeCS_CommaKeyword_5_2_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS_CommaKeyword_5_3_1_q.equals(syntax))
+				emit_AttributeCS_CommaKeyword_5_3_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS_CommaKeyword_5_4_1_q.equals(syntax))
+				emit_AttributeCS_CommaKeyword_5_4_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS_CommaKeyword_5_5_1_q.equals(syntax))
+				emit_AttributeCS_CommaKeyword_5_5_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS_CommaKeyword_5_6_1_q.equals(syntax))
+				emit_AttributeCS_CommaKeyword_5_6_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS_IsDerivedDerivedKeyword_5_0_1_0_0_0.equals(syntax))
+				emit_AttributeCS_IsDerivedDerivedKeyword_5_0_1_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS_IsVolatileVolatileKeyword_5_7_0_0_0_0.equals(syntax))
+				emit_AttributeCS_IsVolatileVolatileKeyword_5_7_0_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a_RightCurlyBracketKeyword_6_0_2__.equals(syntax))
 				emit_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a_RightCurlyBracketKeyword_6_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q.equals(syntax))
 				emit_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_2_1_q.equals(syntax))
 				emit_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_2_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___CommaKeyword_5_1_1_q_IdKeyword_5_1_0_1__a.equals(syntax))
+				emit_AttributeCS___CommaKeyword_5_1_1_q_IdKeyword_5_1_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___CommaKeyword_5_2_1_q_OrderedKeyword_5_2_0_1__a.equals(syntax))
+				emit_AttributeCS___CommaKeyword_5_2_1_q_OrderedKeyword_5_2_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___CommaKeyword_5_3_1_q_ReadonlyKeyword_5_3_0_1__a.equals(syntax))
+				emit_AttributeCS___CommaKeyword_5_3_1_q_ReadonlyKeyword_5_3_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___CommaKeyword_5_4_1_q_TransientKeyword_5_4_0_1__a.equals(syntax))
+				emit_AttributeCS___CommaKeyword_5_4_1_q_TransientKeyword_5_4_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___CommaKeyword_5_5_1_q_UniqueKeyword_5_5_0_1__a.equals(syntax))
+				emit_AttributeCS___CommaKeyword_5_5_1_q_UniqueKeyword_5_5_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___CommaKeyword_5_6_1_q_UnsettableKeyword_5_6_0_1__a.equals(syntax))
+				emit_AttributeCS___CommaKeyword_5_6_1_q_UnsettableKeyword_5_6_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a__a.equals(syntax))
 				emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a.equals(syntax))
 				emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___or_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a_SemicolonKeyword_6_0_1_1_4__q___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a__a__.equals(syntax))
 				emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___or_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a_SemicolonKeyword_6_0_1_1_4__q___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a__a__(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a.equals(syntax))
+				emit_AttributeCS___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a.equals(syntax))
 				emit_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a.equals(syntax))
 				emit_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a___or_____InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a_SemicolonKeyword_6_0_1_2_4__q___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a__a__.equals(syntax))
 				emit_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a___or_____InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a_SemicolonKeyword_6_0_1_2_4__q___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2___SemicolonKeyword_6_0_1_2_4_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a__a__(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a.equals(syntax))
+				emit_AttributeCS___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a.equals(syntax))
+				emit_AttributeCS___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a.equals(syntax))
+				emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a.equals(syntax))
+				emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a.equals(syntax))
+				emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a.equals(syntax))
+				emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a.equals(syntax))
+				emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a.equals(syntax))
+				emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a.equals(syntax))
+				emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a.equals(syntax))
 				emit_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__p.equals(syntax))
@@ -181,8 +371,16 @@
 				emit_AttributeCS___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__p.equals(syntax))
 				emit_AttributeCS___SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2__p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a.equals(syntax))
+				emit_AttributeCS___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a.equals(syntax))
+				emit_AttributeCS___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a.equals(syntax))
+				emit_AttributeCS___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_AttributeCS_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a.equals(syntax))
 				emit_AttributeCS_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_AttributeCS_______LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q___or___RightCurlyBracketKeyword_5_7_1___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q_________IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___or___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___or___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___or___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___or___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___or___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q____a__p.equals(syntax))
+				emit_AttributeCS_______LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q___or___RightCurlyBracketKeyword_5_7_1___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q_________IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___or___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___or___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___or___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___or___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___or___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q____a__p(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_2__.equals(syntax))
 				emit_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_DataTypeCS___LeftCurlyBracketKeyword_5_0_SerializableKeyword_5_1_1_q_RightCurlyBracketKeyword_5_2__q.equals(syntax))
@@ -197,42 +395,120 @@
 				emit_InvariantConstraintCS_SemicolonKeyword_3_1_or___ColonKeyword_3_0_0_SemicolonKeyword_3_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_OperationCS_CommaKeyword_9_1_1_q.equals(syntax))
 				emit_OperationCS_CommaKeyword_9_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_OperationCS_IsDerivedDerivedKeyword_9_0_1_0_0_0.equals(syntax))
+				emit_OperationCS_IsDerivedDerivedKeyword_9_0_1_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_OperationCS_IsNotUniqueUniqueKeyword_9_2_0_0_0_0.equals(syntax))
+				emit_OperationCS_IsNotUniqueUniqueKeyword_9_2_0_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2_SemicolonKeyword_10_0_1_2_4__a_RightCurlyBracketKeyword_10_0_2__.equals(syntax))
 				emit_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2_SemicolonKeyword_10_0_1_2_4__a_RightCurlyBracketKeyword_10_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_2_1_q.equals(syntax))
 				emit_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_2_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_OperationCS___BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2_SemicolonKeyword_10_0_1_2_4__a.equals(syntax))
 				emit_OperationCS___BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2_SemicolonKeyword_10_0_1_2_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_OperationCS___CommaKeyword_9_1_1_q_____LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1__a.equals(syntax))
+				emit_OperationCS___CommaKeyword_9_1_1_q_____LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_OperationCS___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a__a.equals(syntax))
+				emit_OperationCS___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a.equals(syntax))
+				emit_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a.equals(syntax))
+				emit_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_OperationCS___SemicolonKeyword_10_0_1_2_4_BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2__a.equals(syntax))
 				emit_OperationCS___SemicolonKeyword_10_0_1_2_4_BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_OperationCS___SemicolonKeyword_10_0_1_2_4_BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2__p.equals(syntax))
 				emit_OperationCS___SemicolonKeyword_10_0_1_2_4_BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2__p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_OperationCS_______LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a.equals(syntax))
+				emit_OperationCS_______LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_PackageCS_SemicolonKeyword_4_1_or___LeftCurlyBracketKeyword_4_0_0_RightCurlyBracketKeyword_4_0_2__.equals(syntax))
 				emit_PackageCS_SemicolonKeyword_4_1_or___LeftCurlyBracketKeyword_4_0_0_RightCurlyBracketKeyword_4_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if(match_ParameterCS_CommaKeyword_2_1_1_q.equals(syntax))
-				emit_ParameterCS_CommaKeyword_2_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ParameterCS_IsNotUniqueUniqueKeyword_2_1_0_0_0_0.equals(syntax))
+				emit_ParameterCS_IsNotUniqueUniqueKeyword_2_1_0_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ParameterCS_IsOrderedOrderedKeyword_2_0_1_0_0_0.equals(syntax))
+				emit_ParameterCS_IsOrderedOrderedKeyword_2_0_1_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ParameterCS___CommaKeyword_2_1_0_1_q___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a__p_UniqueKeyword_2_1_0_0_1__a.equals(syntax))
+				emit_ParameterCS___CommaKeyword_2_1_0_1_q___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a__p_UniqueKeyword_2_1_0_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q.equals(syntax))
 				emit_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ParameterCS___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q__a.equals(syntax))
+				emit_ParameterCS___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ParameterCS_____LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q___or___RightCurlyBracketKeyword_2_1_1___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q____p.equals(syntax))
+				emit_ParameterCS_____LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q___or___RightCurlyBracketKeyword_2_1_1___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q____p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_CommaKeyword_6_0_1_1_q.equals(syntax))
+				emit_ReferenceCS_CommaKeyword_6_0_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS_CommaKeyword_6_1_1_q.equals(syntax))
 				emit_ReferenceCS_CommaKeyword_6_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_CommaKeyword_6_2_1_q.equals(syntax))
+				emit_ReferenceCS_CommaKeyword_6_2_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_CommaKeyword_6_3_1_q.equals(syntax))
+				emit_ReferenceCS_CommaKeyword_6_3_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_CommaKeyword_6_4_1_q.equals(syntax))
+				emit_ReferenceCS_CommaKeyword_6_4_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_CommaKeyword_6_5_1_q.equals(syntax))
+				emit_ReferenceCS_CommaKeyword_6_5_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_CommaKeyword_6_6_1_q.equals(syntax))
+				emit_ReferenceCS_CommaKeyword_6_6_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_CommaKeyword_6_7_1_q.equals(syntax))
+				emit_ReferenceCS_CommaKeyword_6_7_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_IsComposesComposesKeyword_6_0_1_0_0_0.equals(syntax))
+				emit_ReferenceCS_IsComposesComposesKeyword_6_0_1_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_IsVolatileVolatileKeyword_6_8_0_0_0_0.equals(syntax))
+				emit_ReferenceCS_IsVolatileVolatileKeyword_6_8_0_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a_RightCurlyBracketKeyword_7_0_2__.equals(syntax))
 				emit_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a_RightCurlyBracketKeyword_7_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_2_1_q.equals(syntax))
 				emit_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_2_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_3_1_q.equals(syntax))
 				emit_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_3_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___CommaKeyword_6_1_1_q_DerivedKeyword_6_1_0_1__a.equals(syntax))
+				emit_ReferenceCS___CommaKeyword_6_1_1_q_DerivedKeyword_6_1_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___CommaKeyword_6_2_1_q_OrderedKeyword_6_2_0_1__a.equals(syntax))
+				emit_ReferenceCS___CommaKeyword_6_2_1_q_OrderedKeyword_6_2_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___CommaKeyword_6_3_1_q_ReadonlyKeyword_6_3_0_1__a.equals(syntax))
+				emit_ReferenceCS___CommaKeyword_6_3_1_q_ReadonlyKeyword_6_3_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___CommaKeyword_6_4_1_q_ResolveKeyword_6_4_0_1__a.equals(syntax))
+				emit_ReferenceCS___CommaKeyword_6_4_1_q_ResolveKeyword_6_4_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___CommaKeyword_6_5_1_q_TransientKeyword_6_5_0_1__a.equals(syntax))
+				emit_ReferenceCS___CommaKeyword_6_5_1_q_TransientKeyword_6_5_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___CommaKeyword_6_6_1_q_UniqueKeyword_6_6_0_1__a.equals(syntax))
+				emit_ReferenceCS___CommaKeyword_6_6_1_q_UniqueKeyword_6_6_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___CommaKeyword_6_7_1_q_UnsettableKeyword_6_7_0_1__a.equals(syntax))
+				emit_ReferenceCS___CommaKeyword_6_7_1_q_UnsettableKeyword_6_7_0_1__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a__a.equals(syntax))
 				emit_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a.equals(syntax))
 				emit_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a___or_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a_SemicolonKeyword_7_0_1_2_4__q___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__p_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__p_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a__a__.equals(syntax))
 				emit_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a___or_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a_SemicolonKeyword_7_0_1_2_4__q___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__p_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__p_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2___SemicolonKeyword_7_0_1_2_4_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a__a__(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a.equals(syntax))
+				emit_ReferenceCS___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a__a.equals(syntax))
 				emit_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a.equals(syntax))
 				emit_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a___or_____InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a_SemicolonKeyword_7_0_1_3_4__q___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__p_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__p_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a__a__.equals(syntax))
 				emit_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a___or_____InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a_SemicolonKeyword_7_0_1_3_4__q___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__p_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__p_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2___SemicolonKeyword_7_0_1_3_4_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a__a__(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a.equals(syntax))
+				emit_ReferenceCS___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a.equals(syntax))
+				emit_ReferenceCS___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a.equals(syntax))
+				emit_ReferenceCS___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a.equals(syntax))
+				emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a.equals(syntax))
+				emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a.equals(syntax))
+				emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a.equals(syntax))
+				emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a.equals(syntax))
+				emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a.equals(syntax))
+				emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a.equals(syntax))
+				emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a.equals(syntax))
+				emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a.equals(syntax))
 				emit_ReferenceCS___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__p.equals(syntax))
@@ -241,8 +517,16 @@
 				emit_ReferenceCS___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__p.equals(syntax))
 				emit_ReferenceCS___SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a_InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2__p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a.equals(syntax))
+				emit_ReferenceCS___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a.equals(syntax))
+				emit_ReferenceCS___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a.equals(syntax))
+				emit_ReferenceCS___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_ReferenceCS_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a.equals(syntax))
 				emit_ReferenceCS_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ReferenceCS_______LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q___or___RightCurlyBracketKeyword_6_8_1___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q_________DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___or___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___or___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___or___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___or___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___or___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___or___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q____a__p.equals(syntax))
+				emit_ReferenceCS_______LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q___or___RightCurlyBracketKeyword_6_8_1___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q_________DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___or___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___or___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___or___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___or___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___or___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___or___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q____a__p(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__.equals(syntax))
 				emit_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if(match_StructuredClassCS___LeftCurlyBracketKeyword_6_0_RightCurlyBracketKeyword_6_2__q.equals(syntax))
@@ -259,12 +543,76 @@
 	 * Syntax:
 	 *     ','?
 	 */
+	protected void emit_AttributeCS_CommaKeyword_5_0_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
 	protected void emit_AttributeCS_CommaKeyword_5_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
 	}
 	
 	/**
 	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_AttributeCS_CommaKeyword_5_2_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_AttributeCS_CommaKeyword_5_3_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_AttributeCS_CommaKeyword_5_4_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_AttributeCS_CommaKeyword_5_5_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_AttributeCS_CommaKeyword_5_6_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     isDerived?='derived'
+	 */
+	protected void emit_AttributeCS_IsDerivedDerivedKeyword_5_0_1_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     isVolatile?='volatile'
+	 */
+	protected void emit_AttributeCS_IsVolatileVolatileKeyword_5_7_0_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ';' | ('{' (('derivation' UnrestrictedName? ':' ';') | ('initial' UnrestrictedName? ':' ';'))* '}')
 	 */
 	protected void emit_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a_RightCurlyBracketKeyword_6_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -289,6 +637,54 @@
 	
 	/**
 	 * Syntax:
+	 *     (','? '!id')*
+	 */
+	protected void emit_AttributeCS___CommaKeyword_5_1_1_q_IdKeyword_5_1_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? '!ordered')*
+	 */
+	protected void emit_AttributeCS___CommaKeyword_5_2_1_q_OrderedKeyword_5_2_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? '!readonly')*
+	 */
+	protected void emit_AttributeCS___CommaKeyword_5_3_1_q_ReadonlyKeyword_5_3_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? '!transient')*
+	 */
+	protected void emit_AttributeCS___CommaKeyword_5_4_1_q_TransientKeyword_5_4_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? 'unique')*
+	 */
+	protected void emit_AttributeCS___CommaKeyword_5_5_1_q_UniqueKeyword_5_5_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? '!unsettable')*
+	 */
+	protected void emit_AttributeCS___CommaKeyword_5_6_1_q_UnsettableKeyword_5_6_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ('derivation' UnrestrictedName? ':' ';' ('initial' UnrestrictedName? ':' ';')*)*
 	 */
 	protected void emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -331,6 +727,27 @@
 	
 	/**
 	 * Syntax:
+	 *     (
+	     '!id' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!derived' ','?)?)* 
+	         ('!ordered' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!transient' ','?)* 
+	         ('unique' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_AttributeCS___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ('initial' UnrestrictedName? ':' ';' ('derivation' UnrestrictedName? ':' ';')*)*
 	 */
 	protected void emit_AttributeCS___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -373,6 +790,168 @@
 	
 	/**
 	 * Syntax:
+	 *     (
+	     '!ordered' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!derived' ','?)?)* 
+	         ('!id' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!transient' ','?)* 
+	         ('unique' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_AttributeCS___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '!readonly' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!derived' ','?)?)* 
+	         ('!id' ','?)* 
+	         ('!ordered' ','?)* 
+	         ('!transient' ','?)* 
+	         ('unique' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_AttributeCS___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!derived' ','?)?)* 
+	     ('!id' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!derived' ','?)?)* 
+	     ('!id' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!derived' ','?)?)* 
+	     ('!id' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!transient' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!derived' ','?)?)* 
+	     ('!id' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!derived' ','?)?)* 
+	     ('!id' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!derived' ','?)?)* 
+	     ('!id' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!derived' ','?)?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_AttributeCS___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
 	 */
 	protected void emit_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -405,6 +984,69 @@
 	
 	/**
 	 * Syntax:
+	 *     (
+	     '!transient' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!derived' ','?)?)* 
+	         ('!id' ','?)* 
+	         ('!ordered' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('unique' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_AttributeCS___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     'unique' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!derived' ','?)?)* 
+	         ('!id' ','?)* 
+	         ('!ordered' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!transient' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_AttributeCS___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '!unsettable' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!derived' ','?)?)* 
+	         ('!id' ','?)* 
+	         ('!ordered' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!transient' ','?)* 
+	         ('unique' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_AttributeCS___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q___RightCurlyBracketKeyword_5_7_1___LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q__a___IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q__a___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q__a___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q__a___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q__a___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q__a___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     (('derivation' UnrestrictedName? ':' ';') | ('initial' UnrestrictedName? ':' ';'))*
 	 */
 	protected void emit_AttributeCS_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_2_0_UnrestrictedNameParserRuleCall_6_0_1_2_1_q_ColonKeyword_6_0_1_2_2_SemicolonKeyword_6_0_1_2_4____a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -413,6 +1055,24 @@
 	
 	/**
 	 * Syntax:
+	 *     (
+	     (('}' ('!volatile' ','?)?) | ('{' ('!derived' ','?)?)) 
+	     (
+	         ('!id' ','?) | 
+	         ('!ordered' ','?) | 
+	         ('!readonly' ','?) | 
+	         ('!transient' ','?) | 
+	         ('unique' ','?) | 
+	         ('!unsettable' ','?)
+	     )*
+	 )+
+	 */
+	protected void emit_AttributeCS_______LeftCurlyBracketKeyword_5_0_0___DerivedKeyword_5_0_1_0_1_CommaKeyword_5_0_1_1_q__q___or___RightCurlyBracketKeyword_5_7_1___VolatileKeyword_5_7_0_0_1_CommaKeyword_5_7_0_1_q__q_________IdKeyword_5_1_0_1_CommaKeyword_5_1_1_q___or___OrderedKeyword_5_2_0_1_CommaKeyword_5_2_1_q___or___ReadonlyKeyword_5_3_0_1_CommaKeyword_5_3_1_q___or___TransientKeyword_5_4_0_1_CommaKeyword_5_4_1_q___or___UniqueKeyword_5_5_0_1_CommaKeyword_5_5_1_q___or___UnsettableKeyword_5_6_0_1_CommaKeyword_5_6_1_q____a__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ';' | ('{' '}')
 	 */
 	protected void emit_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -469,6 +1129,22 @@
 	
 	/**
 	 * Syntax:
+	 *     isDerived?='derived'
+	 */
+	protected void emit_OperationCS_IsDerivedDerivedKeyword_9_0_1_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     isNotUnique?='!unique'
+	 */
+	protected void emit_OperationCS_IsNotUniqueUniqueKeyword_9_2_0_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ';' | ('{' ('body' UnrestrictedName? ':' ';')* '}')
 	 */
 	protected void emit_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2_SemicolonKeyword_10_0_1_2_4__a_RightCurlyBracketKeyword_10_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -493,6 +1169,38 @@
 	
 	/**
 	 * Syntax:
+	 *     (','? (('}' ('unique' ','?)?) | ('{' ('!derived' ','?)?))* '!ordered')*
+	 */
+	protected void emit_OperationCS___CommaKeyword_9_1_1_q_____LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ('!ordered' ','? ('}' ('{' ('!derived' ','?)?)* ('unique' ','?)?)*)*
+	 */
+	protected void emit_OperationCS___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ('}' ('{' ('!derived' ','?)?)* ('!ordered' ','?)* ('unique' ','?)?)*
+	 */
+	protected void emit_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ('}' ('{' ('!derived' ','?)?)* ('unique' ','?)?)*
+	 */
+	protected void emit_OperationCS___RightCurlyBracketKeyword_9_2_1___LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q__a___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     (';' 'body' UnrestrictedName? ':')*
 	 */
 	protected void emit_OperationCS___SemicolonKeyword_10_0_1_2_4_BodyKeyword_10_0_1_2_0_UnrestrictedNameParserRuleCall_10_0_1_2_1_q_ColonKeyword_10_0_1_2_2__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -509,6 +1217,14 @@
 	
 	/**
 	 * Syntax:
+	 *     ((('}' ('unique' ','?)?) | ('{' ('!derived' ','?)?))* '!ordered' ','?)*
+	 */
+	protected void emit_OperationCS_______LeftCurlyBracketKeyword_9_0_0___DerivedKeyword_9_0_1_0_1_CommaKeyword_9_0_1_1_q__q___or___RightCurlyBracketKeyword_9_2_1___UniqueKeyword_9_2_0_0_1_CommaKeyword_9_2_0_1_q__q____a_OrderedKeyword_9_1_0_1_CommaKeyword_9_1_1_q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ';' | ('{' '}')
 	 */
 	protected void emit_PackageCS_SemicolonKeyword_4_1_or___LeftCurlyBracketKeyword_4_0_0_RightCurlyBracketKeyword_4_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -517,9 +1233,25 @@
 	
 	/**
 	 * Syntax:
-	 *     ','?
+	 *     isNotUnique?='!unique'
 	 */
-	protected void emit_ParameterCS_CommaKeyword_2_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+	protected void emit_ParameterCS_IsNotUniqueUniqueKeyword_2_1_0_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     isOrdered?='ordered'
+	 */
+	protected void emit_ParameterCS_IsOrderedOrderedKeyword_2_0_1_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? ('}' ('{' ('!ordered' ','?)?)*)+ 'unique')*
+	 */
+	protected void emit_ParameterCS___CommaKeyword_2_1_0_1_q___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a__p_UniqueKeyword_2_1_0_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
 	}
 	
@@ -533,6 +1265,30 @@
 	
 	/**
 	 * Syntax:
+	 *     ('}' ('{' ('!ordered' ','?)?)* ('unique' ','?)?)*
+	 */
+	protected void emit_ParameterCS___RightCurlyBracketKeyword_2_1_1___LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q__a___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (('}' ('unique' ','?)?) | ('{' ('!ordered' ','?)?))+
+	 */
+	protected void emit_ParameterCS_____LeftCurlyBracketKeyword_2_0_0___OrderedKeyword_2_0_1_0_1_CommaKeyword_2_0_1_1_q__q___or___RightCurlyBracketKeyword_2_1_1___UniqueKeyword_2_1_0_0_1_CommaKeyword_2_1_0_1_q__q____p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_ReferenceCS_CommaKeyword_6_0_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ','?
 	 */
 	protected void emit_ReferenceCS_CommaKeyword_6_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -541,6 +1297,70 @@
 	
 	/**
 	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_ReferenceCS_CommaKeyword_6_2_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_ReferenceCS_CommaKeyword_6_3_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_ReferenceCS_CommaKeyword_6_4_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_ReferenceCS_CommaKeyword_6_5_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_ReferenceCS_CommaKeyword_6_6_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ','?
+	 */
+	protected void emit_ReferenceCS_CommaKeyword_6_7_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     isComposes?='composes'
+	 */
+	protected void emit_ReferenceCS_IsComposesComposesKeyword_6_0_1_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     isVolatile?='volatile'
+	 */
+	protected void emit_ReferenceCS_IsVolatileVolatileKeyword_6_8_0_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ';' | ('{' (('derivation' UnrestrictedName? ':' ';') | ('initial' UnrestrictedName? ':' ';'))* '}')
 	 */
 	protected void emit_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a_RightCurlyBracketKeyword_7_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -565,6 +1385,62 @@
 	
 	/**
 	 * Syntax:
+	 *     (','? '!derived')*
+	 */
+	protected void emit_ReferenceCS___CommaKeyword_6_1_1_q_DerivedKeyword_6_1_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? '!ordered')*
+	 */
+	protected void emit_ReferenceCS___CommaKeyword_6_2_1_q_OrderedKeyword_6_2_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? '!readonly')*
+	 */
+	protected void emit_ReferenceCS___CommaKeyword_6_3_1_q_ReadonlyKeyword_6_3_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? '!resolve')*
+	 */
+	protected void emit_ReferenceCS___CommaKeyword_6_4_1_q_ResolveKeyword_6_4_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? '!transient')*
+	 */
+	protected void emit_ReferenceCS___CommaKeyword_6_5_1_q_TransientKeyword_6_5_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? 'unique')*
+	 */
+	protected void emit_ReferenceCS___CommaKeyword_6_6_1_q_UniqueKeyword_6_6_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (','? '!unsettable')*
+	 */
+	protected void emit_ReferenceCS___CommaKeyword_6_7_1_q_UnsettableKeyword_6_7_0_1__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ('derivation' UnrestrictedName? ':' ';' ('initial' UnrestrictedName? ':' ';')*)*
 	 */
 	protected void emit_ReferenceCS___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -607,6 +1483,28 @@
 	
 	/**
 	 * Syntax:
+	 *     (
+	     '!derived' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!composes' ','?)?)* 
+	         ('!ordered' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!resolve' ','?)* 
+	         ('!transient' ','?)* 
+	         ('unique' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_ReferenceCS___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ('initial' UnrestrictedName? ':' ';' ('derivation' UnrestrictedName? ':' ';')*)*
 	 */
 	protected void emit_ReferenceCS___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4___DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -649,6 +1547,217 @@
 	
 	/**
 	 * Syntax:
+	 *     (
+	     '!ordered' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!composes' ','?)?)* 
+	         ('!derived' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!resolve' ','?)* 
+	         ('!transient' ','?)* 
+	         ('unique' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_ReferenceCS___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '!readonly' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!composes' ','?)?)* 
+	         ('!derived' ','?)* 
+	         ('!ordered' ','?)* 
+	         ('!resolve' ','?)* 
+	         ('!transient' ','?)* 
+	         ('unique' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_ReferenceCS___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '!resolve' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!composes' ','?)?)* 
+	         ('!derived' ','?)* 
+	         ('!ordered' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!transient' ','?)* 
+	         ('unique' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_ReferenceCS___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!composes' ','?)?)* 
+	     ('!derived' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!resolve' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!composes' ','?)?)* 
+	     ('!derived' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!resolve' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!composes' ','?)?)* 
+	     ('!derived' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!resolve' ','?)* 
+	     ('!transient' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!composes' ','?)?)* 
+	     ('!derived' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!resolve' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!composes' ','?)?)* 
+	     ('!derived' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!composes' ','?)?)* 
+	     ('!derived' ','?)* 
+	     ('!ordered' ','?)* 
+	     ('!resolve' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!composes' ','?)?)* 
+	     ('!derived' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!resolve' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '}' 
+	     ('{' ('!composes' ','?)?)* 
+	     ('!ordered' ','?)* 
+	     ('!readonly' ','?)* 
+	     ('!resolve' ','?)* 
+	     ('!transient' ','?)* 
+	     ('unique' ','?)* 
+	     ('!unsettable' ','?)* 
+	     ('!volatile' ','?)?
+	 )*
+	 */
+	protected void emit_ReferenceCS___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
 	 */
 	protected void emit_ReferenceCS___SemicolonKeyword_7_0_1_2_4___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4__a_DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -681,6 +1790,72 @@
 	
 	/**
 	 * Syntax:
+	 *     (
+	     '!transient' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!composes' ','?)?)* 
+	         ('!derived' ','?)* 
+	         ('!ordered' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!resolve' ','?)* 
+	         ('unique' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_ReferenceCS___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     'unique' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!composes' ','?)?)* 
+	         ('!derived' ','?)* 
+	         ('!ordered' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!resolve' ','?)* 
+	         ('!transient' ','?)* 
+	         ('!unsettable' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_ReferenceCS___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '!unsettable' 
+	     ','? 
+	     (
+	         '}' 
+	         ('{' ('!composes' ','?)?)* 
+	         ('!derived' ','?)* 
+	         ('!ordered' ','?)* 
+	         ('!readonly' ','?)* 
+	         ('!resolve' ','?)* 
+	         ('!transient' ','?)* 
+	         ('unique' ','?)* 
+	         ('!volatile' ','?)?
+	     )*
+	 )*
+	 */
+	protected void emit_ReferenceCS___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q___RightCurlyBracketKeyword_6_8_1___LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q__a___DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q__a___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q__a___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q__a___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q__a___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q__a___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q__a___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     (('derivation' UnrestrictedName? ':' ';') | ('initial' UnrestrictedName? ':' ';'))*
 	 */
 	protected void emit_ReferenceCS_____DerivationKeyword_7_0_1_2_0_UnrestrictedNameParserRuleCall_7_0_1_2_1_q_ColonKeyword_7_0_1_2_2_SemicolonKeyword_7_0_1_2_4___or___InitialKeyword_7_0_1_3_0_UnrestrictedNameParserRuleCall_7_0_1_3_1_q_ColonKeyword_7_0_1_3_2_SemicolonKeyword_7_0_1_3_4____a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
@@ -689,6 +1864,25 @@
 	
 	/**
 	 * Syntax:
+	 *     (
+	     (('}' ('!volatile' ','?)?) | ('{' ('!composes' ','?)?)) 
+	     (
+	         ('!derived' ','?) | 
+	         ('!ordered' ','?) | 
+	         ('!readonly' ','?) | 
+	         ('!resolve' ','?) | 
+	         ('!transient' ','?) | 
+	         ('unique' ','?) | 
+	         ('!unsettable' ','?)
+	     )*
+	 )+
+	 */
+	protected void emit_ReferenceCS_______LeftCurlyBracketKeyword_6_0_0___ComposesKeyword_6_0_1_0_1_CommaKeyword_6_0_1_1_q__q___or___RightCurlyBracketKeyword_6_8_1___VolatileKeyword_6_8_0_0_1_CommaKeyword_6_8_0_1_q__q_________DerivedKeyword_6_1_0_1_CommaKeyword_6_1_1_q___or___OrderedKeyword_6_2_0_1_CommaKeyword_6_2_1_q___or___ReadonlyKeyword_6_3_0_1_CommaKeyword_6_3_1_q___or___ResolveKeyword_6_4_0_1_CommaKeyword_6_4_1_q___or___TransientKeyword_6_5_0_1_CommaKeyword_6_5_1_q___or___UniqueKeyword_6_6_0_1_CommaKeyword_6_6_1_q___or___UnsettableKeyword_6_7_0_1_CommaKeyword_6_7_1_q____a__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
 	 *     ';' | ('{' '}')
 	 */
 	protected void emit_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/services/OCLinEcoreGrammarAccess.java b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/services/OCLinEcoreGrammarAccess.java
index ca3d127..3b67b31 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/services/OCLinEcoreGrammarAccess.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src-gen/org/eclipse/ocl/xtext/oclinecore/services/OCLinEcoreGrammarAccess.java
@@ -664,17 +664,11 @@
 	public class AttributeCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AttributeCS");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
-		private final Group cGroup_0_0 = (Group)cAlternatives_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_0_0_0 = (Assignment)cGroup_0_0.eContents().get(0);
-		private final Keyword cQualifiersStaticKeyword_0_0_0_0 = (Keyword)cQualifiersAssignment_0_0_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_0_0_1 = (Assignment)cGroup_0_0.eContents().get(1);
-		private final Keyword cQualifiersDefinitionKeyword_0_0_1_0 = (Keyword)cQualifiersAssignment_0_0_1.eContents().get(0);
-		private final Group cGroup_0_1 = (Group)cAlternatives_0.eContents().get(1);
-		private final Assignment cQualifiersAssignment_0_1_0 = (Assignment)cGroup_0_1.eContents().get(0);
-		private final Keyword cQualifiersDefinitionKeyword_0_1_0_0 = (Keyword)cQualifiersAssignment_0_1_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_0_1_1 = (Assignment)cGroup_0_1.eContents().get(1);
-		private final Keyword cQualifiersStaticKeyword_0_1_1_0 = (Keyword)cQualifiersAssignment_0_1_1.eContents().get(0);
+		private final UnorderedGroup cUnorderedGroup_0 = (UnorderedGroup)cGroup.eContents().get(0);
+		private final Assignment cIsStaticAssignment_0_0 = (Assignment)cUnorderedGroup_0.eContents().get(0);
+		private final Keyword cIsStaticStaticKeyword_0_0_0 = (Keyword)cIsStaticAssignment_0_0.eContents().get(0);
+		private final Assignment cIsDefinitionAssignment_0_1 = (Assignment)cUnorderedGroup_0.eContents().get(1);
+		private final Keyword cIsDefinitionDefinitionKeyword_0_1_0 = (Keyword)cIsDefinitionAssignment_0_1.eContents().get(0);
 		private final Keyword cAttributeKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cNameUnrestrictedNameParserRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
@@ -686,44 +680,59 @@
 		private final Keyword cEqualsSignKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
 		private final Assignment cDefaultAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
 		private final RuleCall cDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0 = (RuleCall)cDefaultAssignment_4_1.eContents().get(0);
-		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
-		private final Keyword cLeftCurlyBracketKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
-		private final Group cGroup_5_1 = (Group)cGroup_5.eContents().get(1);
+		private final UnorderedGroup cUnorderedGroup_5 = (UnorderedGroup)cGroup.eContents().get(5);
+		private final Group cGroup_5_0 = (Group)cUnorderedGroup_5.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_5_0_0 = (Keyword)cGroup_5_0.eContents().get(0);
+		private final Group cGroup_5_0_1 = (Group)cGroup_5_0.eContents().get(1);
+		private final Alternatives cAlternatives_5_0_1_0 = (Alternatives)cGroup_5_0_1.eContents().get(0);
+		private final Assignment cIsDerivedAssignment_5_0_1_0_0 = (Assignment)cAlternatives_5_0_1_0.eContents().get(0);
+		private final Keyword cIsDerivedDerivedKeyword_5_0_1_0_0_0 = (Keyword)cIsDerivedAssignment_5_0_1_0_0.eContents().get(0);
+		private final Keyword cDerivedKeyword_5_0_1_0_1 = (Keyword)cAlternatives_5_0_1_0.eContents().get(1);
+		private final Keyword cCommaKeyword_5_0_1_1 = (Keyword)cGroup_5_0_1.eContents().get(1);
+		private final Group cGroup_5_1 = (Group)cUnorderedGroup_5.eContents().get(1);
 		private final Alternatives cAlternatives_5_1_0 = (Alternatives)cGroup_5_1.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_0 = (Assignment)cAlternatives_5_1_0.eContents().get(0);
-		private final Keyword cQualifiersDerivedKeyword_5_1_0_0_0 = (Keyword)cQualifiersAssignment_5_1_0_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_1 = (Assignment)cAlternatives_5_1_0.eContents().get(1);
-		private final Keyword cQualifiersDerivedKeyword_5_1_0_1_0 = (Keyword)cQualifiersAssignment_5_1_0_1.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_2 = (Assignment)cAlternatives_5_1_0.eContents().get(2);
-		private final Keyword cQualifiersIdKeyword_5_1_0_2_0 = (Keyword)cQualifiersAssignment_5_1_0_2.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_3 = (Assignment)cAlternatives_5_1_0.eContents().get(3);
-		private final Keyword cQualifiersIdKeyword_5_1_0_3_0 = (Keyword)cQualifiersAssignment_5_1_0_3.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_4 = (Assignment)cAlternatives_5_1_0.eContents().get(4);
-		private final Keyword cQualifiersOrderedKeyword_5_1_0_4_0 = (Keyword)cQualifiersAssignment_5_1_0_4.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_5 = (Assignment)cAlternatives_5_1_0.eContents().get(5);
-		private final Keyword cQualifiersOrderedKeyword_5_1_0_5_0 = (Keyword)cQualifiersAssignment_5_1_0_5.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_6 = (Assignment)cAlternatives_5_1_0.eContents().get(6);
-		private final Keyword cQualifiersReadonlyKeyword_5_1_0_6_0 = (Keyword)cQualifiersAssignment_5_1_0_6.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_7 = (Assignment)cAlternatives_5_1_0.eContents().get(7);
-		private final Keyword cQualifiersReadonlyKeyword_5_1_0_7_0 = (Keyword)cQualifiersAssignment_5_1_0_7.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_8 = (Assignment)cAlternatives_5_1_0.eContents().get(8);
-		private final Keyword cQualifiersTransientKeyword_5_1_0_8_0 = (Keyword)cQualifiersAssignment_5_1_0_8.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_9 = (Assignment)cAlternatives_5_1_0.eContents().get(9);
-		private final Keyword cQualifiersTransientKeyword_5_1_0_9_0 = (Keyword)cQualifiersAssignment_5_1_0_9.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_10 = (Assignment)cAlternatives_5_1_0.eContents().get(10);
-		private final Keyword cQualifiersUniqueKeyword_5_1_0_10_0 = (Keyword)cQualifiersAssignment_5_1_0_10.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_11 = (Assignment)cAlternatives_5_1_0.eContents().get(11);
-		private final Keyword cQualifiersUniqueKeyword_5_1_0_11_0 = (Keyword)cQualifiersAssignment_5_1_0_11.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_12 = (Assignment)cAlternatives_5_1_0.eContents().get(12);
-		private final Keyword cQualifiersUnsettableKeyword_5_1_0_12_0 = (Keyword)cQualifiersAssignment_5_1_0_12.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_13 = (Assignment)cAlternatives_5_1_0.eContents().get(13);
-		private final Keyword cQualifiersUnsettableKeyword_5_1_0_13_0 = (Keyword)cQualifiersAssignment_5_1_0_13.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_14 = (Assignment)cAlternatives_5_1_0.eContents().get(14);
-		private final Keyword cQualifiersVolatileKeyword_5_1_0_14_0 = (Keyword)cQualifiersAssignment_5_1_0_14.eContents().get(0);
-		private final Assignment cQualifiersAssignment_5_1_0_15 = (Assignment)cAlternatives_5_1_0.eContents().get(15);
-		private final Keyword cQualifiersVolatileKeyword_5_1_0_15_0 = (Keyword)cQualifiersAssignment_5_1_0_15.eContents().get(0);
+		private final Assignment cIsIdAssignment_5_1_0_0 = (Assignment)cAlternatives_5_1_0.eContents().get(0);
+		private final Keyword cIsIdIdKeyword_5_1_0_0_0 = (Keyword)cIsIdAssignment_5_1_0_0.eContents().get(0);
+		private final Keyword cIdKeyword_5_1_0_1 = (Keyword)cAlternatives_5_1_0.eContents().get(1);
 		private final Keyword cCommaKeyword_5_1_1 = (Keyword)cGroup_5_1.eContents().get(1);
-		private final Keyword cRightCurlyBracketKeyword_5_2 = (Keyword)cGroup_5.eContents().get(2);
+		private final Group cGroup_5_2 = (Group)cUnorderedGroup_5.eContents().get(2);
+		private final Alternatives cAlternatives_5_2_0 = (Alternatives)cGroup_5_2.eContents().get(0);
+		private final Assignment cIsOrderedAssignment_5_2_0_0 = (Assignment)cAlternatives_5_2_0.eContents().get(0);
+		private final Keyword cIsOrderedOrderedKeyword_5_2_0_0_0 = (Keyword)cIsOrderedAssignment_5_2_0_0.eContents().get(0);
+		private final Keyword cOrderedKeyword_5_2_0_1 = (Keyword)cAlternatives_5_2_0.eContents().get(1);
+		private final Keyword cCommaKeyword_5_2_1 = (Keyword)cGroup_5_2.eContents().get(1);
+		private final Group cGroup_5_3 = (Group)cUnorderedGroup_5.eContents().get(3);
+		private final Alternatives cAlternatives_5_3_0 = (Alternatives)cGroup_5_3.eContents().get(0);
+		private final Assignment cIsReadonlyAssignment_5_3_0_0 = (Assignment)cAlternatives_5_3_0.eContents().get(0);
+		private final Keyword cIsReadonlyReadonlyKeyword_5_3_0_0_0 = (Keyword)cIsReadonlyAssignment_5_3_0_0.eContents().get(0);
+		private final Keyword cReadonlyKeyword_5_3_0_1 = (Keyword)cAlternatives_5_3_0.eContents().get(1);
+		private final Keyword cCommaKeyword_5_3_1 = (Keyword)cGroup_5_3.eContents().get(1);
+		private final Group cGroup_5_4 = (Group)cUnorderedGroup_5.eContents().get(4);
+		private final Alternatives cAlternatives_5_4_0 = (Alternatives)cGroup_5_4.eContents().get(0);
+		private final Assignment cIsTransientAssignment_5_4_0_0 = (Assignment)cAlternatives_5_4_0.eContents().get(0);
+		private final Keyword cIsTransientTransientKeyword_5_4_0_0_0 = (Keyword)cIsTransientAssignment_5_4_0_0.eContents().get(0);
+		private final Keyword cTransientKeyword_5_4_0_1 = (Keyword)cAlternatives_5_4_0.eContents().get(1);
+		private final Keyword cCommaKeyword_5_4_1 = (Keyword)cGroup_5_4.eContents().get(1);
+		private final Group cGroup_5_5 = (Group)cUnorderedGroup_5.eContents().get(5);
+		private final Alternatives cAlternatives_5_5_0 = (Alternatives)cGroup_5_5.eContents().get(0);
+		private final Assignment cIsNotUniqueAssignment_5_5_0_0 = (Assignment)cAlternatives_5_5_0.eContents().get(0);
+		private final Keyword cIsNotUniqueUniqueKeyword_5_5_0_0_0 = (Keyword)cIsNotUniqueAssignment_5_5_0_0.eContents().get(0);
+		private final Keyword cUniqueKeyword_5_5_0_1 = (Keyword)cAlternatives_5_5_0.eContents().get(1);
+		private final Keyword cCommaKeyword_5_5_1 = (Keyword)cGroup_5_5.eContents().get(1);
+		private final Group cGroup_5_6 = (Group)cUnorderedGroup_5.eContents().get(6);
+		private final Alternatives cAlternatives_5_6_0 = (Alternatives)cGroup_5_6.eContents().get(0);
+		private final Assignment cIsUnsettableAssignment_5_6_0_0 = (Assignment)cAlternatives_5_6_0.eContents().get(0);
+		private final Keyword cIsUnsettableUnsettableKeyword_5_6_0_0_0 = (Keyword)cIsUnsettableAssignment_5_6_0_0.eContents().get(0);
+		private final Keyword cUnsettableKeyword_5_6_0_1 = (Keyword)cAlternatives_5_6_0.eContents().get(1);
+		private final Keyword cCommaKeyword_5_6_1 = (Keyword)cGroup_5_6.eContents().get(1);
+		private final Group cGroup_5_7 = (Group)cUnorderedGroup_5.eContents().get(7);
+		private final Group cGroup_5_7_0 = (Group)cGroup_5_7.eContents().get(0);
+		private final Alternatives cAlternatives_5_7_0_0 = (Alternatives)cGroup_5_7_0.eContents().get(0);
+		private final Assignment cIsVolatileAssignment_5_7_0_0_0 = (Assignment)cAlternatives_5_7_0_0.eContents().get(0);
+		private final Keyword cIsVolatileVolatileKeyword_5_7_0_0_0_0 = (Keyword)cIsVolatileAssignment_5_7_0_0_0.eContents().get(0);
+		private final Keyword cVolatileKeyword_5_7_0_0_1 = (Keyword)cAlternatives_5_7_0_0.eContents().get(1);
+		private final Keyword cCommaKeyword_5_7_0_1 = (Keyword)cGroup_5_7_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_5_7_1 = (Keyword)cGroup_5_7.eContents().get(1);
 		private final Alternatives cAlternatives_6 = (Alternatives)cGroup.eContents().get(6);
 		private final Group cGroup_6_0 = (Group)cAlternatives_6.eContents().get(0);
 		private final Keyword cLeftCurlyBracketKeyword_6_0_0 = (Keyword)cGroup_6_0.eContents().get(0);
@@ -748,59 +757,39 @@
 		private final Keyword cSemicolonKeyword_6_1 = (Keyword)cAlternatives_6.eContents().get(1);
 		
 		//AttributeCS returns base::AttributeCS:
-		//	(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)? "attribute"
-		//	name=UnrestrictedName (":" ownedType=TypedMultiplicityRefCS)? ("=" default=SINGLE_QUOTED_STRING)? ("{"
-		//	((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="id" | qualifiers+="!id" | qualifiers+="ordered" |
-		//	qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" | qualifiers+="transient" |
-		//	qualifiers+="!transient" | qualifiers+="unique" | qualifiers+="!unique" | qualifiers+="unsettable" |
-		//	qualifiers+="!unsettable" | qualifiers+="volatile" | qualifiers+="!volatile") ","?)+ "}")? ("{"
+		//	(isStatic?="static"? & isDefinition?="definition"?) "attribute" name=UnrestrictedName (":"
+		//	ownedType=TypedMultiplicityRefCS)? ("=" default=SINGLE_QUOTED_STRING)? ("{" ((isDerived?="derived" | "!derived")
+		//	","?)? & ((isId?="id" | "!id") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? & ((isReadonly?="readonly" |
+		//	"!readonly") ","?)? & ((isTransient?="transient" | "!transient") ","?)? & ((isNotUnique?="!unique" | "unique") ","?)?
+		//	& ((isUnsettable?="unsettable" | "!unsettable") ","?)? & ((isVolatile?="volatile" | "!volatile") ","?)? "}")? ("{"
 		//	(ownedAnnotations+=AnnotationElementCS | "derivation" UnrestrictedName? ":" ownedDefaultExpressions+=SpecificationCS?
 		//	";" | "initial" UnrestrictedName? ":" ownedDefaultExpressions+=SpecificationCS? ";")* "}" | ";");
 		@Override
 		public ParserRule getRule() { return rule; }
 
-		//(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)? "attribute"
-		//name=UnrestrictedName (":" ownedType=TypedMultiplicityRefCS)? ("=" default=SINGLE_QUOTED_STRING)? ("{"
-		//((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="id" | qualifiers+="!id" | qualifiers+="ordered" |
-		//qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" | qualifiers+="transient" |
-		//qualifiers+="!transient" | qualifiers+="unique" | qualifiers+="!unique" | qualifiers+="unsettable" |
-		//qualifiers+="!unsettable" | qualifiers+="volatile" | qualifiers+="!volatile") ","?)+ "}")? ("{"
+		//(isStatic?="static"? & isDefinition?="definition"?) "attribute" name=UnrestrictedName (":"
+		//ownedType=TypedMultiplicityRefCS)? ("=" default=SINGLE_QUOTED_STRING)? ("{" ((isDerived?="derived" | "!derived")
+		//","?)? & ((isId?="id" | "!id") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? & ((isReadonly?="readonly" |
+		//"!readonly") ","?)? & ((isTransient?="transient" | "!transient") ","?)? & ((isNotUnique?="!unique" | "unique") ","?)?
+		//& ((isUnsettable?="unsettable" | "!unsettable") ","?)? & ((isVolatile?="volatile" | "!volatile") ","?)? "}")? ("{"
 		//(ownedAnnotations+=AnnotationElementCS | "derivation" UnrestrictedName? ":" ownedDefaultExpressions+=SpecificationCS?
 		//";" | "initial" UnrestrictedName? ":" ownedDefaultExpressions+=SpecificationCS? ";")* "}" | ";")
 		public Group getGroup() { return cGroup; }
 
-		//(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)?
-		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+		//isStatic?="static"? & isDefinition?="definition"?
+		public UnorderedGroup getUnorderedGroup_0() { return cUnorderedGroup_0; }
 
-		//qualifiers+="static" qualifiers+="definition"?
-		public Group getGroup_0_0() { return cGroup_0_0; }
-
-		//qualifiers+="static"
-		public Assignment getQualifiersAssignment_0_0_0() { return cQualifiersAssignment_0_0_0; }
+		//isStatic?="static"?
+		public Assignment getIsStaticAssignment_0_0() { return cIsStaticAssignment_0_0; }
 
 		//"static"
-		public Keyword getQualifiersStaticKeyword_0_0_0_0() { return cQualifiersStaticKeyword_0_0_0_0; }
+		public Keyword getIsStaticStaticKeyword_0_0_0() { return cIsStaticStaticKeyword_0_0_0; }
 
-		//qualifiers+="definition"?
-		public Assignment getQualifiersAssignment_0_0_1() { return cQualifiersAssignment_0_0_1; }
+		//isDefinition?="definition"?
+		public Assignment getIsDefinitionAssignment_0_1() { return cIsDefinitionAssignment_0_1; }
 
 		//"definition"
-		public Keyword getQualifiersDefinitionKeyword_0_0_1_0() { return cQualifiersDefinitionKeyword_0_0_1_0; }
-
-		//qualifiers+="definition" qualifiers+="static"?
-		public Group getGroup_0_1() { return cGroup_0_1; }
-
-		//qualifiers+="definition"
-		public Assignment getQualifiersAssignment_0_1_0() { return cQualifiersAssignment_0_1_0; }
-
-		//"definition"
-		public Keyword getQualifiersDefinitionKeyword_0_1_0_0() { return cQualifiersDefinitionKeyword_0_1_0_0; }
-
-		//qualifiers+="static"?
-		public Assignment getQualifiersAssignment_0_1_1() { return cQualifiersAssignment_0_1_1; }
-
-		//"static"
-		public Keyword getQualifiersStaticKeyword_0_1_1_0() { return cQualifiersStaticKeyword_0_1_1_0; }
+		public Keyword getIsDefinitionDefinitionKeyword_0_1_0() { return cIsDefinitionDefinitionKeyword_0_1_0; }
 
 		//"attribute"
 		public Keyword getAttributeKeyword_1() { return cAttributeKeyword_1; }
@@ -835,128 +824,167 @@
 		//SINGLE_QUOTED_STRING
 		public RuleCall getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0() { return cDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_4_1_0; }
 
-		//("{" ((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="id" | qualifiers+="!id" | qualifiers+="ordered" |
-		//qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" | qualifiers+="transient" |
-		//qualifiers+="!transient" | qualifiers+="unique" | qualifiers+="!unique" | qualifiers+="unsettable" |
-		//qualifiers+="!unsettable" | qualifiers+="volatile" | qualifiers+="!volatile") ","?)+ "}")?
-		public Group getGroup_5() { return cGroup_5; }
+		//("{" ((isDerived?="derived" | "!derived") ","?)? & ((isId?="id" | "!id") ","?)? & ((isOrdered?="ordered" | "!ordered")
+		//","?)? & ((isReadonly?="readonly" | "!readonly") ","?)? & ((isTransient?="transient" | "!transient") ","?)? &
+		//((isNotUnique?="!unique" | "unique") ","?)? & ((isUnsettable?="unsettable" | "!unsettable") ","?)? &
+		//((isVolatile?="volatile" | "!volatile") ","?)? "}")?
+		public UnorderedGroup getUnorderedGroup_5() { return cUnorderedGroup_5; }
+
+		//"{" ((isDerived?="derived" | "!derived") ","?)?
+		public Group getGroup_5_0() { return cGroup_5_0; }
 
 		//"{"
-		public Keyword getLeftCurlyBracketKeyword_5_0() { return cLeftCurlyBracketKeyword_5_0; }
+		public Keyword getLeftCurlyBracketKeyword_5_0_0() { return cLeftCurlyBracketKeyword_5_0_0; }
 
-		//((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="id" | qualifiers+="!id" | qualifiers+="ordered" |
-		//qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" | qualifiers+="transient" |
-		//qualifiers+="!transient" | qualifiers+="unique" | qualifiers+="!unique" | qualifiers+="unsettable" |
-		//qualifiers+="!unsettable" | qualifiers+="volatile" | qualifiers+="!volatile") ","?)+
-		public Group getGroup_5_1() { return cGroup_5_1; }
+		//((isDerived?="derived" | "!derived") ","?)?
+		public Group getGroup_5_0_1() { return cGroup_5_0_1; }
 
-		//qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="id" | qualifiers+="!id" | qualifiers+="ordered" |
-		//qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" | qualifiers+="transient" |
-		//qualifiers+="!transient" | qualifiers+="unique" | qualifiers+="!unique" | qualifiers+="unsettable" |
-		//qualifiers+="!unsettable" | qualifiers+="volatile" | qualifiers+="!volatile"
-		public Alternatives getAlternatives_5_1_0() { return cAlternatives_5_1_0; }
+		//isDerived?="derived" | "!derived"
+		public Alternatives getAlternatives_5_0_1_0() { return cAlternatives_5_0_1_0; }
 
-		//qualifiers+="derived"
-		public Assignment getQualifiersAssignment_5_1_0_0() { return cQualifiersAssignment_5_1_0_0; }
+		//isDerived?="derived"
+		public Assignment getIsDerivedAssignment_5_0_1_0_0() { return cIsDerivedAssignment_5_0_1_0_0; }
 
 		//"derived"
-		public Keyword getQualifiersDerivedKeyword_5_1_0_0_0() { return cQualifiersDerivedKeyword_5_1_0_0_0; }
-
-		//qualifiers+="!derived"
-		public Assignment getQualifiersAssignment_5_1_0_1() { return cQualifiersAssignment_5_1_0_1; }
+		public Keyword getIsDerivedDerivedKeyword_5_0_1_0_0_0() { return cIsDerivedDerivedKeyword_5_0_1_0_0_0; }
 
 		//"!derived"
-		public Keyword getQualifiersDerivedKeyword_5_1_0_1_0() { return cQualifiersDerivedKeyword_5_1_0_1_0; }
+		public Keyword getDerivedKeyword_5_0_1_0_1() { return cDerivedKeyword_5_0_1_0_1; }
 
-		//qualifiers+="id"
-		public Assignment getQualifiersAssignment_5_1_0_2() { return cQualifiersAssignment_5_1_0_2; }
+		//","?
+		public Keyword getCommaKeyword_5_0_1_1() { return cCommaKeyword_5_0_1_1; }
+
+		//((isId?="id" | "!id") ","?)?
+		public Group getGroup_5_1() { return cGroup_5_1; }
+
+		//isId?="id" | "!id"
+		public Alternatives getAlternatives_5_1_0() { return cAlternatives_5_1_0; }
+
+		//isId?="id"
+		public Assignment getIsIdAssignment_5_1_0_0() { return cIsIdAssignment_5_1_0_0; }
 
 		//"id"
-		public Keyword getQualifiersIdKeyword_5_1_0_2_0() { return cQualifiersIdKeyword_5_1_0_2_0; }
-
-		//qualifiers+="!id"
-		public Assignment getQualifiersAssignment_5_1_0_3() { return cQualifiersAssignment_5_1_0_3; }
+		public Keyword getIsIdIdKeyword_5_1_0_0_0() { return cIsIdIdKeyword_5_1_0_0_0; }
 
 		//"!id"
-		public Keyword getQualifiersIdKeyword_5_1_0_3_0() { return cQualifiersIdKeyword_5_1_0_3_0; }
-
-		//qualifiers+="ordered"
-		public Assignment getQualifiersAssignment_5_1_0_4() { return cQualifiersAssignment_5_1_0_4; }
-
-		//"ordered"
-		public Keyword getQualifiersOrderedKeyword_5_1_0_4_0() { return cQualifiersOrderedKeyword_5_1_0_4_0; }
-
-		//qualifiers+="!ordered"
-		public Assignment getQualifiersAssignment_5_1_0_5() { return cQualifiersAssignment_5_1_0_5; }
-
-		//"!ordered"
-		public Keyword getQualifiersOrderedKeyword_5_1_0_5_0() { return cQualifiersOrderedKeyword_5_1_0_5_0; }
-
-		//qualifiers+="readonly"
-		public Assignment getQualifiersAssignment_5_1_0_6() { return cQualifiersAssignment_5_1_0_6; }
-
-		//"readonly"
-		public Keyword getQualifiersReadonlyKeyword_5_1_0_6_0() { return cQualifiersReadonlyKeyword_5_1_0_6_0; }
-
-		//qualifiers+="!readonly"
-		public Assignment getQualifiersAssignment_5_1_0_7() { return cQualifiersAssignment_5_1_0_7; }
-
-		//"!readonly"
-		public Keyword getQualifiersReadonlyKeyword_5_1_0_7_0() { return cQualifiersReadonlyKeyword_5_1_0_7_0; }
-
-		//qualifiers+="transient"
-		public Assignment getQualifiersAssignment_5_1_0_8() { return cQualifiersAssignment_5_1_0_8; }
-
-		//"transient"
-		public Keyword getQualifiersTransientKeyword_5_1_0_8_0() { return cQualifiersTransientKeyword_5_1_0_8_0; }
-
-		//qualifiers+="!transient"
-		public Assignment getQualifiersAssignment_5_1_0_9() { return cQualifiersAssignment_5_1_0_9; }
-
-		//"!transient"
-		public Keyword getQualifiersTransientKeyword_5_1_0_9_0() { return cQualifiersTransientKeyword_5_1_0_9_0; }
-
-		//qualifiers+="unique"
-		public Assignment getQualifiersAssignment_5_1_0_10() { return cQualifiersAssignment_5_1_0_10; }
-
-		//"unique"
-		public Keyword getQualifiersUniqueKeyword_5_1_0_10_0() { return cQualifiersUniqueKeyword_5_1_0_10_0; }
-
-		//qualifiers+="!unique"
-		public Assignment getQualifiersAssignment_5_1_0_11() { return cQualifiersAssignment_5_1_0_11; }
-
-		//"!unique"
-		public Keyword getQualifiersUniqueKeyword_5_1_0_11_0() { return cQualifiersUniqueKeyword_5_1_0_11_0; }
-
-		//qualifiers+="unsettable"
-		public Assignment getQualifiersAssignment_5_1_0_12() { return cQualifiersAssignment_5_1_0_12; }
-
-		//"unsettable"
-		public Keyword getQualifiersUnsettableKeyword_5_1_0_12_0() { return cQualifiersUnsettableKeyword_5_1_0_12_0; }
-
-		//qualifiers+="!unsettable"
-		public Assignment getQualifiersAssignment_5_1_0_13() { return cQualifiersAssignment_5_1_0_13; }
-
-		//"!unsettable"
-		public Keyword getQualifiersUnsettableKeyword_5_1_0_13_0() { return cQualifiersUnsettableKeyword_5_1_0_13_0; }
-
-		//qualifiers+="volatile"
-		public Assignment getQualifiersAssignment_5_1_0_14() { return cQualifiersAssignment_5_1_0_14; }
-
-		//"volatile"
-		public Keyword getQualifiersVolatileKeyword_5_1_0_14_0() { return cQualifiersVolatileKeyword_5_1_0_14_0; }
-
-		//qualifiers+="!volatile"
-		public Assignment getQualifiersAssignment_5_1_0_15() { return cQualifiersAssignment_5_1_0_15; }
-
-		//"!volatile"
-		public Keyword getQualifiersVolatileKeyword_5_1_0_15_0() { return cQualifiersVolatileKeyword_5_1_0_15_0; }
+		public Keyword getIdKeyword_5_1_0_1() { return cIdKeyword_5_1_0_1; }
 
 		//","?
 		public Keyword getCommaKeyword_5_1_1() { return cCommaKeyword_5_1_1; }
 
+		//((isOrdered?="ordered" | "!ordered") ","?)?
+		public Group getGroup_5_2() { return cGroup_5_2; }
+
+		//isOrdered?="ordered" | "!ordered"
+		public Alternatives getAlternatives_5_2_0() { return cAlternatives_5_2_0; }
+
+		//isOrdered?="ordered"
+		public Assignment getIsOrderedAssignment_5_2_0_0() { return cIsOrderedAssignment_5_2_0_0; }
+
+		//"ordered"
+		public Keyword getIsOrderedOrderedKeyword_5_2_0_0_0() { return cIsOrderedOrderedKeyword_5_2_0_0_0; }
+
+		//"!ordered"
+		public Keyword getOrderedKeyword_5_2_0_1() { return cOrderedKeyword_5_2_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_5_2_1() { return cCommaKeyword_5_2_1; }
+
+		//((isReadonly?="readonly" | "!readonly") ","?)?
+		public Group getGroup_5_3() { return cGroup_5_3; }
+
+		//isReadonly?="readonly" | "!readonly"
+		public Alternatives getAlternatives_5_3_0() { return cAlternatives_5_3_0; }
+
+		//isReadonly?="readonly"
+		public Assignment getIsReadonlyAssignment_5_3_0_0() { return cIsReadonlyAssignment_5_3_0_0; }
+
+		//"readonly"
+		public Keyword getIsReadonlyReadonlyKeyword_5_3_0_0_0() { return cIsReadonlyReadonlyKeyword_5_3_0_0_0; }
+
+		//"!readonly"
+		public Keyword getReadonlyKeyword_5_3_0_1() { return cReadonlyKeyword_5_3_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_5_3_1() { return cCommaKeyword_5_3_1; }
+
+		//((isTransient?="transient" | "!transient") ","?)?
+		public Group getGroup_5_4() { return cGroup_5_4; }
+
+		//isTransient?="transient" | "!transient"
+		public Alternatives getAlternatives_5_4_0() { return cAlternatives_5_4_0; }
+
+		//isTransient?="transient"
+		public Assignment getIsTransientAssignment_5_4_0_0() { return cIsTransientAssignment_5_4_0_0; }
+
+		//"transient"
+		public Keyword getIsTransientTransientKeyword_5_4_0_0_0() { return cIsTransientTransientKeyword_5_4_0_0_0; }
+
+		//"!transient"
+		public Keyword getTransientKeyword_5_4_0_1() { return cTransientKeyword_5_4_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_5_4_1() { return cCommaKeyword_5_4_1; }
+
+		//((isNotUnique?="!unique" | "unique") ","?)?
+		public Group getGroup_5_5() { return cGroup_5_5; }
+
+		//isNotUnique?="!unique" | "unique"
+		public Alternatives getAlternatives_5_5_0() { return cAlternatives_5_5_0; }
+
+		//isNotUnique?="!unique"
+		public Assignment getIsNotUniqueAssignment_5_5_0_0() { return cIsNotUniqueAssignment_5_5_0_0; }
+
+		//"!unique"
+		public Keyword getIsNotUniqueUniqueKeyword_5_5_0_0_0() { return cIsNotUniqueUniqueKeyword_5_5_0_0_0; }
+
+		//"unique"
+		public Keyword getUniqueKeyword_5_5_0_1() { return cUniqueKeyword_5_5_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_5_5_1() { return cCommaKeyword_5_5_1; }
+
+		//((isUnsettable?="unsettable" | "!unsettable") ","?)?
+		public Group getGroup_5_6() { return cGroup_5_6; }
+
+		//isUnsettable?="unsettable" | "!unsettable"
+		public Alternatives getAlternatives_5_6_0() { return cAlternatives_5_6_0; }
+
+		//isUnsettable?="unsettable"
+		public Assignment getIsUnsettableAssignment_5_6_0_0() { return cIsUnsettableAssignment_5_6_0_0; }
+
+		//"unsettable"
+		public Keyword getIsUnsettableUnsettableKeyword_5_6_0_0_0() { return cIsUnsettableUnsettableKeyword_5_6_0_0_0; }
+
+		//"!unsettable"
+		public Keyword getUnsettableKeyword_5_6_0_1() { return cUnsettableKeyword_5_6_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_5_6_1() { return cCommaKeyword_5_6_1; }
+
+		//((isVolatile?="volatile" | "!volatile") ","?)? "}"
+		public Group getGroup_5_7() { return cGroup_5_7; }
+
+		//((isVolatile?="volatile" | "!volatile") ","?)?
+		public Group getGroup_5_7_0() { return cGroup_5_7_0; }
+
+		//isVolatile?="volatile" | "!volatile"
+		public Alternatives getAlternatives_5_7_0_0() { return cAlternatives_5_7_0_0; }
+
+		//isVolatile?="volatile"
+		public Assignment getIsVolatileAssignment_5_7_0_0_0() { return cIsVolatileAssignment_5_7_0_0_0; }
+
+		//"volatile"
+		public Keyword getIsVolatileVolatileKeyword_5_7_0_0_0_0() { return cIsVolatileVolatileKeyword_5_7_0_0_0_0; }
+
+		//"!volatile"
+		public Keyword getVolatileKeyword_5_7_0_0_1() { return cVolatileKeyword_5_7_0_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_5_7_0_1() { return cCommaKeyword_5_7_0_1; }
+
 		//"}"
-		public Keyword getRightCurlyBracketKeyword_5_2() { return cRightCurlyBracketKeyword_5_2; }
+		public Keyword getRightCurlyBracketKeyword_5_7_1() { return cRightCurlyBracketKeyword_5_7_1; }
 
 		//"{" (ownedAnnotations+=AnnotationElementCS | "derivation" UnrestrictedName? ":"
 		//ownedDefaultExpressions+=SpecificationCS? ";" | "initial" UnrestrictedName? ":"
@@ -1689,17 +1717,11 @@
 	public class OperationCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "OperationCS");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
-		private final Group cGroup_0_0 = (Group)cAlternatives_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_0_0_0 = (Assignment)cGroup_0_0.eContents().get(0);
-		private final Keyword cQualifiersStaticKeyword_0_0_0_0 = (Keyword)cQualifiersAssignment_0_0_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_0_0_1 = (Assignment)cGroup_0_0.eContents().get(1);
-		private final Keyword cQualifiersDefinitionKeyword_0_0_1_0 = (Keyword)cQualifiersAssignment_0_0_1.eContents().get(0);
-		private final Group cGroup_0_1 = (Group)cAlternatives_0.eContents().get(1);
-		private final Assignment cQualifiersAssignment_0_1_0 = (Assignment)cGroup_0_1.eContents().get(0);
-		private final Keyword cQualifiersDefinitionKeyword_0_1_0_0 = (Keyword)cQualifiersAssignment_0_1_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_0_1_1 = (Assignment)cGroup_0_1.eContents().get(1);
-		private final Keyword cQualifiersStaticKeyword_0_1_1_0 = (Keyword)cQualifiersAssignment_0_1_1.eContents().get(0);
+		private final UnorderedGroup cUnorderedGroup_0 = (UnorderedGroup)cGroup.eContents().get(0);
+		private final Assignment cIsStaticAssignment_0_0 = (Assignment)cUnorderedGroup_0.eContents().get(0);
+		private final Keyword cIsStaticStaticKeyword_0_0_0 = (Keyword)cIsStaticAssignment_0_0.eContents().get(0);
+		private final Assignment cIsDefinitionAssignment_0_1 = (Assignment)cUnorderedGroup_0.eContents().get(1);
+		private final Keyword cIsDefinitionDefinitionKeyword_0_1_0 = (Keyword)cIsDefinitionAssignment_0_1.eContents().get(0);
 		private final Keyword cOperationKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		private final Assignment cOwnedSignatureAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cOwnedSignatureTemplateSignatureCSParserRuleCall_2_0 = (RuleCall)cOwnedSignatureAssignment_2.eContents().get(0);
@@ -1726,24 +1748,29 @@
 		private final Keyword cCommaKeyword_8_2_0 = (Keyword)cGroup_8_2.eContents().get(0);
 		private final Assignment cOwnedExceptionsAssignment_8_2_1 = (Assignment)cGroup_8_2.eContents().get(1);
 		private final RuleCall cOwnedExceptionsTypedRefCSParserRuleCall_8_2_1_0 = (RuleCall)cOwnedExceptionsAssignment_8_2_1.eContents().get(0);
-		private final Group cGroup_9 = (Group)cGroup.eContents().get(9);
-		private final Keyword cLeftCurlyBracketKeyword_9_0 = (Keyword)cGroup_9.eContents().get(0);
-		private final Group cGroup_9_1 = (Group)cGroup_9.eContents().get(1);
+		private final UnorderedGroup cUnorderedGroup_9 = (UnorderedGroup)cGroup.eContents().get(9);
+		private final Group cGroup_9_0 = (Group)cUnorderedGroup_9.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_9_0_0 = (Keyword)cGroup_9_0.eContents().get(0);
+		private final Group cGroup_9_0_1 = (Group)cGroup_9_0.eContents().get(1);
+		private final Alternatives cAlternatives_9_0_1_0 = (Alternatives)cGroup_9_0_1.eContents().get(0);
+		private final Assignment cIsDerivedAssignment_9_0_1_0_0 = (Assignment)cAlternatives_9_0_1_0.eContents().get(0);
+		private final Keyword cIsDerivedDerivedKeyword_9_0_1_0_0_0 = (Keyword)cIsDerivedAssignment_9_0_1_0_0.eContents().get(0);
+		private final Keyword cDerivedKeyword_9_0_1_0_1 = (Keyword)cAlternatives_9_0_1_0.eContents().get(1);
+		private final Keyword cCommaKeyword_9_0_1_1 = (Keyword)cGroup_9_0_1.eContents().get(1);
+		private final Group cGroup_9_1 = (Group)cUnorderedGroup_9.eContents().get(1);
 		private final Alternatives cAlternatives_9_1_0 = (Alternatives)cGroup_9_1.eContents().get(0);
-		private final Assignment cQualifiersAssignment_9_1_0_0 = (Assignment)cAlternatives_9_1_0.eContents().get(0);
-		private final Keyword cQualifiersDerivedKeyword_9_1_0_0_0 = (Keyword)cQualifiersAssignment_9_1_0_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_9_1_0_1 = (Assignment)cAlternatives_9_1_0.eContents().get(1);
-		private final Keyword cQualifiersDerivedKeyword_9_1_0_1_0 = (Keyword)cQualifiersAssignment_9_1_0_1.eContents().get(0);
-		private final Assignment cQualifiersAssignment_9_1_0_2 = (Assignment)cAlternatives_9_1_0.eContents().get(2);
-		private final Keyword cQualifiersOrderedKeyword_9_1_0_2_0 = (Keyword)cQualifiersAssignment_9_1_0_2.eContents().get(0);
-		private final Assignment cQualifiersAssignment_9_1_0_3 = (Assignment)cAlternatives_9_1_0.eContents().get(3);
-		private final Keyword cQualifiersOrderedKeyword_9_1_0_3_0 = (Keyword)cQualifiersAssignment_9_1_0_3.eContents().get(0);
-		private final Assignment cQualifiersAssignment_9_1_0_4 = (Assignment)cAlternatives_9_1_0.eContents().get(4);
-		private final Keyword cQualifiersUniqueKeyword_9_1_0_4_0 = (Keyword)cQualifiersAssignment_9_1_0_4.eContents().get(0);
-		private final Assignment cQualifiersAssignment_9_1_0_5 = (Assignment)cAlternatives_9_1_0.eContents().get(5);
-		private final Keyword cQualifiersUniqueKeyword_9_1_0_5_0 = (Keyword)cQualifiersAssignment_9_1_0_5.eContents().get(0);
+		private final Assignment cIsOrderedAssignment_9_1_0_0 = (Assignment)cAlternatives_9_1_0.eContents().get(0);
+		private final Keyword cIsOrderedOrderedKeyword_9_1_0_0_0 = (Keyword)cIsOrderedAssignment_9_1_0_0.eContents().get(0);
+		private final Keyword cOrderedKeyword_9_1_0_1 = (Keyword)cAlternatives_9_1_0.eContents().get(1);
 		private final Keyword cCommaKeyword_9_1_1 = (Keyword)cGroup_9_1.eContents().get(1);
-		private final Keyword cRightCurlyBracketKeyword_9_2 = (Keyword)cGroup_9.eContents().get(2);
+		private final Group cGroup_9_2 = (Group)cUnorderedGroup_9.eContents().get(2);
+		private final Group cGroup_9_2_0 = (Group)cGroup_9_2.eContents().get(0);
+		private final Alternatives cAlternatives_9_2_0_0 = (Alternatives)cGroup_9_2_0.eContents().get(0);
+		private final Assignment cIsNotUniqueAssignment_9_2_0_0_0 = (Assignment)cAlternatives_9_2_0_0.eContents().get(0);
+		private final Keyword cIsNotUniqueUniqueKeyword_9_2_0_0_0_0 = (Keyword)cIsNotUniqueAssignment_9_2_0_0_0.eContents().get(0);
+		private final Keyword cUniqueKeyword_9_2_0_0_1 = (Keyword)cAlternatives_9_2_0_0.eContents().get(1);
+		private final Keyword cCommaKeyword_9_2_0_1 = (Keyword)cGroup_9_2_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_9_2_1 = (Keyword)cGroup_9_2.eContents().get(1);
 		private final Alternatives cAlternatives_10 = (Alternatives)cGroup.eContents().get(10);
 		private final Group cGroup_10_0 = (Group)cAlternatives_10.eContents().get(0);
 		private final Keyword cLeftCurlyBracketKeyword_10_0_0 = (Keyword)cGroup_10_0.eContents().get(0);
@@ -1765,57 +1792,39 @@
 		private final Keyword cSemicolonKeyword_10_1 = (Keyword)cAlternatives_10.eContents().get(1);
 		
 		//OperationCS returns base::OperationCS:
-		//	(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)? "operation"
-		//	ownedSignature=TemplateSignatureCS? name=UnrestrictedName "(" (ownedParameters+=ParameterCS (","
-		//	ownedParameters+=ParameterCS)*)? ")" (":" ownedType=TypedMultiplicityRefCS)? ("throws" ownedExceptions+=TypedRefCS
-		//	("," ownedExceptions+=TypedRefCS)*)? ("{" ((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="ordered" |
-		//	qualifiers+="!ordered" | qualifiers+="unique" | qualifiers+="!unique") ","?)+ "}")? ("{"
-		//	(ownedAnnotations+=AnnotationElementCS | ownedPreconditions+=PreconditionConstraintCS | "body" UnrestrictedName? ":"
-		//	ownedBodyExpressions+=SpecificationCS? ";" | ownedPostconditions+=PostconditionConstraintCS)* "}" | ";");
+		//	(isStatic?="static"? & isDefinition?="definition"?) "operation" ownedSignature=TemplateSignatureCS?
+		//	name=UnrestrictedName "(" (ownedParameters+=ParameterCS ("," ownedParameters+=ParameterCS)*)? ")" (":"
+		//	ownedType=TypedMultiplicityRefCS)? ("throws" ownedExceptions+=TypedRefCS ("," ownedExceptions+=TypedRefCS)*)? ("{"
+		//	((isDerived?="derived" | "!derived") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? & ((isNotUnique?="!unique"
+		//	| "unique") ","?)? "}")? ("{" (ownedAnnotations+=AnnotationElementCS | ownedPreconditions+=PreconditionConstraintCS |
+		//	"body" UnrestrictedName? ":" ownedBodyExpressions+=SpecificationCS? ";" |
+		//	ownedPostconditions+=PostconditionConstraintCS)* "}" | ";");
 		@Override
 		public ParserRule getRule() { return rule; }
 
-		//(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)? "operation"
-		//ownedSignature=TemplateSignatureCS? name=UnrestrictedName "(" (ownedParameters+=ParameterCS (","
-		//ownedParameters+=ParameterCS)*)? ")" (":" ownedType=TypedMultiplicityRefCS)? ("throws" ownedExceptions+=TypedRefCS
-		//("," ownedExceptions+=TypedRefCS)*)? ("{" ((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="ordered" |
-		//qualifiers+="!ordered" | qualifiers+="unique" | qualifiers+="!unique") ","?)+ "}")? ("{"
-		//(ownedAnnotations+=AnnotationElementCS | ownedPreconditions+=PreconditionConstraintCS | "body" UnrestrictedName? ":"
-		//ownedBodyExpressions+=SpecificationCS? ";" | ownedPostconditions+=PostconditionConstraintCS)* "}" | ";")
+		//(isStatic?="static"? & isDefinition?="definition"?) "operation" ownedSignature=TemplateSignatureCS?
+		//name=UnrestrictedName "(" (ownedParameters+=ParameterCS ("," ownedParameters+=ParameterCS)*)? ")" (":"
+		//ownedType=TypedMultiplicityRefCS)? ("throws" ownedExceptions+=TypedRefCS ("," ownedExceptions+=TypedRefCS)*)? ("{"
+		//((isDerived?="derived" | "!derived") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? & ((isNotUnique?="!unique" |
+		//"unique") ","?)? "}")? ("{" (ownedAnnotations+=AnnotationElementCS | ownedPreconditions+=PreconditionConstraintCS |
+		//"body" UnrestrictedName? ":" ownedBodyExpressions+=SpecificationCS? ";" |
+		//ownedPostconditions+=PostconditionConstraintCS)* "}" | ";")
 		public Group getGroup() { return cGroup; }
 
-		//(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)?
-		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+		//isStatic?="static"? & isDefinition?="definition"?
+		public UnorderedGroup getUnorderedGroup_0() { return cUnorderedGroup_0; }
 
-		//qualifiers+="static" qualifiers+="definition"?
-		public Group getGroup_0_0() { return cGroup_0_0; }
-
-		//qualifiers+="static"
-		public Assignment getQualifiersAssignment_0_0_0() { return cQualifiersAssignment_0_0_0; }
+		//isStatic?="static"?
+		public Assignment getIsStaticAssignment_0_0() { return cIsStaticAssignment_0_0; }
 
 		//"static"
-		public Keyword getQualifiersStaticKeyword_0_0_0_0() { return cQualifiersStaticKeyword_0_0_0_0; }
+		public Keyword getIsStaticStaticKeyword_0_0_0() { return cIsStaticStaticKeyword_0_0_0; }
 
-		//qualifiers+="definition"?
-		public Assignment getQualifiersAssignment_0_0_1() { return cQualifiersAssignment_0_0_1; }
+		//isDefinition?="definition"?
+		public Assignment getIsDefinitionAssignment_0_1() { return cIsDefinitionAssignment_0_1; }
 
 		//"definition"
-		public Keyword getQualifiersDefinitionKeyword_0_0_1_0() { return cQualifiersDefinitionKeyword_0_0_1_0; }
-
-		//qualifiers+="definition" qualifiers+="static"?
-		public Group getGroup_0_1() { return cGroup_0_1; }
-
-		//qualifiers+="definition"
-		public Assignment getQualifiersAssignment_0_1_0() { return cQualifiersAssignment_0_1_0; }
-
-		//"definition"
-		public Keyword getQualifiersDefinitionKeyword_0_1_0_0() { return cQualifiersDefinitionKeyword_0_1_0_0; }
-
-		//qualifiers+="static"?
-		public Assignment getQualifiersAssignment_0_1_1() { return cQualifiersAssignment_0_1_1; }
-
-		//"static"
-		public Keyword getQualifiersStaticKeyword_0_1_1_0() { return cQualifiersStaticKeyword_0_1_1_0; }
+		public Keyword getIsDefinitionDefinitionKeyword_0_1_0() { return cIsDefinitionDefinitionKeyword_0_1_0; }
 
 		//"operation"
 		public Keyword getOperationKeyword_1() { return cOperationKeyword_1; }
@@ -1895,62 +1904,75 @@
 		//TypedRefCS
 		public RuleCall getOwnedExceptionsTypedRefCSParserRuleCall_8_2_1_0() { return cOwnedExceptionsTypedRefCSParserRuleCall_8_2_1_0; }
 
-		//("{" ((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="ordered" | qualifiers+="!ordered" |
-		//qualifiers+="unique" | qualifiers+="!unique") ","?)+ "}")?
-		public Group getGroup_9() { return cGroup_9; }
+		//("{" ((isDerived?="derived" | "!derived") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? &
+		//((isNotUnique?="!unique" | "unique") ","?)? "}")?
+		public UnorderedGroup getUnorderedGroup_9() { return cUnorderedGroup_9; }
+
+		//"{" ((isDerived?="derived" | "!derived") ","?)?
+		public Group getGroup_9_0() { return cGroup_9_0; }
 
 		//"{"
-		public Keyword getLeftCurlyBracketKeyword_9_0() { return cLeftCurlyBracketKeyword_9_0; }
+		public Keyword getLeftCurlyBracketKeyword_9_0_0() { return cLeftCurlyBracketKeyword_9_0_0; }
 
-		//((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="ordered" | qualifiers+="!ordered" | qualifiers+="unique"
-		//| qualifiers+="!unique") ","?)+
-		public Group getGroup_9_1() { return cGroup_9_1; }
+		//((isDerived?="derived" | "!derived") ","?)?
+		public Group getGroup_9_0_1() { return cGroup_9_0_1; }
 
-		//qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="ordered" | qualifiers+="!ordered" | qualifiers+="unique" |
-		//qualifiers+="!unique"
-		public Alternatives getAlternatives_9_1_0() { return cAlternatives_9_1_0; }
+		//isDerived?="derived" | "!derived"
+		public Alternatives getAlternatives_9_0_1_0() { return cAlternatives_9_0_1_0; }
 
-		//qualifiers+="derived"
-		public Assignment getQualifiersAssignment_9_1_0_0() { return cQualifiersAssignment_9_1_0_0; }
+		//isDerived?="derived"
+		public Assignment getIsDerivedAssignment_9_0_1_0_0() { return cIsDerivedAssignment_9_0_1_0_0; }
 
 		//"derived"
-		public Keyword getQualifiersDerivedKeyword_9_1_0_0_0() { return cQualifiersDerivedKeyword_9_1_0_0_0; }
-
-		//qualifiers+="!derived"
-		public Assignment getQualifiersAssignment_9_1_0_1() { return cQualifiersAssignment_9_1_0_1; }
+		public Keyword getIsDerivedDerivedKeyword_9_0_1_0_0_0() { return cIsDerivedDerivedKeyword_9_0_1_0_0_0; }
 
 		//"!derived"
-		public Keyword getQualifiersDerivedKeyword_9_1_0_1_0() { return cQualifiersDerivedKeyword_9_1_0_1_0; }
+		public Keyword getDerivedKeyword_9_0_1_0_1() { return cDerivedKeyword_9_0_1_0_1; }
 
-		//qualifiers+="ordered"
-		public Assignment getQualifiersAssignment_9_1_0_2() { return cQualifiersAssignment_9_1_0_2; }
+		//","?
+		public Keyword getCommaKeyword_9_0_1_1() { return cCommaKeyword_9_0_1_1; }
+
+		//((isOrdered?="ordered" | "!ordered") ","?)?
+		public Group getGroup_9_1() { return cGroup_9_1; }
+
+		//isOrdered?="ordered" | "!ordered"
+		public Alternatives getAlternatives_9_1_0() { return cAlternatives_9_1_0; }
+
+		//isOrdered?="ordered"
+		public Assignment getIsOrderedAssignment_9_1_0_0() { return cIsOrderedAssignment_9_1_0_0; }
 
 		//"ordered"
-		public Keyword getQualifiersOrderedKeyword_9_1_0_2_0() { return cQualifiersOrderedKeyword_9_1_0_2_0; }
-
-		//qualifiers+="!ordered"
-		public Assignment getQualifiersAssignment_9_1_0_3() { return cQualifiersAssignment_9_1_0_3; }
+		public Keyword getIsOrderedOrderedKeyword_9_1_0_0_0() { return cIsOrderedOrderedKeyword_9_1_0_0_0; }
 
 		//"!ordered"
-		public Keyword getQualifiersOrderedKeyword_9_1_0_3_0() { return cQualifiersOrderedKeyword_9_1_0_3_0; }
-
-		//qualifiers+="unique"
-		public Assignment getQualifiersAssignment_9_1_0_4() { return cQualifiersAssignment_9_1_0_4; }
-
-		//"unique"
-		public Keyword getQualifiersUniqueKeyword_9_1_0_4_0() { return cQualifiersUniqueKeyword_9_1_0_4_0; }
-
-		//qualifiers+="!unique"
-		public Assignment getQualifiersAssignment_9_1_0_5() { return cQualifiersAssignment_9_1_0_5; }
-
-		//"!unique"
-		public Keyword getQualifiersUniqueKeyword_9_1_0_5_0() { return cQualifiersUniqueKeyword_9_1_0_5_0; }
+		public Keyword getOrderedKeyword_9_1_0_1() { return cOrderedKeyword_9_1_0_1; }
 
 		//","?
 		public Keyword getCommaKeyword_9_1_1() { return cCommaKeyword_9_1_1; }
 
+		//((isNotUnique?="!unique" | "unique") ","?)? "}"
+		public Group getGroup_9_2() { return cGroup_9_2; }
+
+		//((isNotUnique?="!unique" | "unique") ","?)?
+		public Group getGroup_9_2_0() { return cGroup_9_2_0; }
+
+		//isNotUnique?="!unique" | "unique"
+		public Alternatives getAlternatives_9_2_0_0() { return cAlternatives_9_2_0_0; }
+
+		//isNotUnique?="!unique"
+		public Assignment getIsNotUniqueAssignment_9_2_0_0_0() { return cIsNotUniqueAssignment_9_2_0_0_0; }
+
+		//"!unique"
+		public Keyword getIsNotUniqueUniqueKeyword_9_2_0_0_0_0() { return cIsNotUniqueUniqueKeyword_9_2_0_0_0_0; }
+
+		//"unique"
+		public Keyword getUniqueKeyword_9_2_0_0_1() { return cUniqueKeyword_9_2_0_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_9_2_0_1() { return cCommaKeyword_9_2_0_1; }
+
 		//"}"
-		public Keyword getRightCurlyBracketKeyword_9_2() { return cRightCurlyBracketKeyword_9_2; }
+		public Keyword getRightCurlyBracketKeyword_9_2_1() { return cRightCurlyBracketKeyword_9_2_1; }
 
 		//"{" (ownedAnnotations+=AnnotationElementCS | ownedPreconditions+=PreconditionConstraintCS | "body" UnrestrictedName? ":"
 		//ownedBodyExpressions+=SpecificationCS? ";" | ownedPostconditions+=PostconditionConstraintCS)* "}" | ";"
@@ -2129,20 +2151,23 @@
 		private final Keyword cColonKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
 		private final Assignment cOwnedTypeAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
 		private final RuleCall cOwnedTypeTypedMultiplicityRefCSParserRuleCall_1_1_0 = (RuleCall)cOwnedTypeAssignment_1_1.eContents().get(0);
-		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
-		private final Keyword cLeftCurlyBracketKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
-		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
-		private final Alternatives cAlternatives_2_1_0 = (Alternatives)cGroup_2_1.eContents().get(0);
-		private final Assignment cQualifiersAssignment_2_1_0_0 = (Assignment)cAlternatives_2_1_0.eContents().get(0);
-		private final Keyword cQualifiersOrderedKeyword_2_1_0_0_0 = (Keyword)cQualifiersAssignment_2_1_0_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_2_1_0_1 = (Assignment)cAlternatives_2_1_0.eContents().get(1);
-		private final Keyword cQualifiersOrderedKeyword_2_1_0_1_0 = (Keyword)cQualifiersAssignment_2_1_0_1.eContents().get(0);
-		private final Assignment cQualifiersAssignment_2_1_0_2 = (Assignment)cAlternatives_2_1_0.eContents().get(2);
-		private final Keyword cQualifiersUniqueKeyword_2_1_0_2_0 = (Keyword)cQualifiersAssignment_2_1_0_2.eContents().get(0);
-		private final Assignment cQualifiersAssignment_2_1_0_3 = (Assignment)cAlternatives_2_1_0.eContents().get(3);
-		private final Keyword cQualifiersUniqueKeyword_2_1_0_3_0 = (Keyword)cQualifiersAssignment_2_1_0_3.eContents().get(0);
-		private final Keyword cCommaKeyword_2_1_1 = (Keyword)cGroup_2_1.eContents().get(1);
-		private final Keyword cRightCurlyBracketKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
+		private final UnorderedGroup cUnorderedGroup_2 = (UnorderedGroup)cGroup.eContents().get(2);
+		private final Group cGroup_2_0 = (Group)cUnorderedGroup_2.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2_0_0 = (Keyword)cGroup_2_0.eContents().get(0);
+		private final Group cGroup_2_0_1 = (Group)cGroup_2_0.eContents().get(1);
+		private final Alternatives cAlternatives_2_0_1_0 = (Alternatives)cGroup_2_0_1.eContents().get(0);
+		private final Assignment cIsOrderedAssignment_2_0_1_0_0 = (Assignment)cAlternatives_2_0_1_0.eContents().get(0);
+		private final Keyword cIsOrderedOrderedKeyword_2_0_1_0_0_0 = (Keyword)cIsOrderedAssignment_2_0_1_0_0.eContents().get(0);
+		private final Keyword cOrderedKeyword_2_0_1_0_1 = (Keyword)cAlternatives_2_0_1_0.eContents().get(1);
+		private final Keyword cCommaKeyword_2_0_1_1 = (Keyword)cGroup_2_0_1.eContents().get(1);
+		private final Group cGroup_2_1 = (Group)cUnorderedGroup_2.eContents().get(1);
+		private final Group cGroup_2_1_0 = (Group)cGroup_2_1.eContents().get(0);
+		private final Alternatives cAlternatives_2_1_0_0 = (Alternatives)cGroup_2_1_0.eContents().get(0);
+		private final Assignment cIsNotUniqueAssignment_2_1_0_0_0 = (Assignment)cAlternatives_2_1_0_0.eContents().get(0);
+		private final Keyword cIsNotUniqueUniqueKeyword_2_1_0_0_0_0 = (Keyword)cIsNotUniqueAssignment_2_1_0_0_0.eContents().get(0);
+		private final Keyword cUniqueKeyword_2_1_0_0_1 = (Keyword)cAlternatives_2_1_0_0.eContents().get(1);
+		private final Keyword cCommaKeyword_2_1_0_1 = (Keyword)cGroup_2_1_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_2_1_1 = (Keyword)cGroup_2_1.eContents().get(1);
 		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
 		private final Keyword cLeftCurlyBracketKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
 		private final Assignment cOwnedAnnotationsAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
@@ -2150,13 +2175,13 @@
 		private final Keyword cRightCurlyBracketKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
 		
 		//ParameterCS returns base::ParameterCS:
-		//	name=UnrestrictedName (":" ownedType=TypedMultiplicityRefCS)? ("{" ((qualifiers+="ordered" | qualifiers+="!ordered" |
-		//	qualifiers+="unique" | qualifiers+="!unique") ","?)+ "}")? ("{" ownedAnnotations+=AnnotationElementCS* "}")?;
+		//	name=UnrestrictedName (":" ownedType=TypedMultiplicityRefCS)? ("{" ((isOrdered?="ordered" | "!ordered") ","?)? &
+		//	((isNotUnique?="!unique" | "unique") ","?)? "}")? ("{" ownedAnnotations+=AnnotationElementCS* "}")?;
 		@Override
 		public ParserRule getRule() { return rule; }
 
-		//name=UnrestrictedName (":" ownedType=TypedMultiplicityRefCS)? ("{" ((qualifiers+="ordered" | qualifiers+="!ordered" |
-		//qualifiers+="unique" | qualifiers+="!unique") ","?)+ "}")? ("{" ownedAnnotations+=AnnotationElementCS* "}")?
+		//name=UnrestrictedName (":" ownedType=TypedMultiplicityRefCS)? ("{" ((isOrdered?="ordered" | "!ordered") ","?)? &
+		//((isNotUnique?="!unique" | "unique") ","?)? "}")? ("{" ownedAnnotations+=AnnotationElementCS* "}")?
 		public Group getGroup() { return cGroup; }
 
 		//name=UnrestrictedName
@@ -2177,47 +2202,56 @@
 		//TypedMultiplicityRefCS
 		public RuleCall getOwnedTypeTypedMultiplicityRefCSParserRuleCall_1_1_0() { return cOwnedTypeTypedMultiplicityRefCSParserRuleCall_1_1_0; }
 
-		//("{" ((qualifiers+="ordered" | qualifiers+="!ordered" | qualifiers+="unique" | qualifiers+="!unique") ","?)+ "}")?
-		public Group getGroup_2() { return cGroup_2; }
+		//("{" ((isOrdered?="ordered" | "!ordered") ","?)? & ((isNotUnique?="!unique" | "unique") ","?)? "}")?
+		public UnorderedGroup getUnorderedGroup_2() { return cUnorderedGroup_2; }
+
+		//"{" ((isOrdered?="ordered" | "!ordered") ","?)?
+		public Group getGroup_2_0() { return cGroup_2_0; }
 
 		//"{"
-		public Keyword getLeftCurlyBracketKeyword_2_0() { return cLeftCurlyBracketKeyword_2_0; }
+		public Keyword getLeftCurlyBracketKeyword_2_0_0() { return cLeftCurlyBracketKeyword_2_0_0; }
 
-		//((qualifiers+="ordered" | qualifiers+="!ordered" | qualifiers+="unique" | qualifiers+="!unique") ","?)+
-		public Group getGroup_2_1() { return cGroup_2_1; }
+		//((isOrdered?="ordered" | "!ordered") ","?)?
+		public Group getGroup_2_0_1() { return cGroup_2_0_1; }
 
-		//qualifiers+="ordered" | qualifiers+="!ordered" | qualifiers+="unique" | qualifiers+="!unique"
-		public Alternatives getAlternatives_2_1_0() { return cAlternatives_2_1_0; }
+		//isOrdered?="ordered" | "!ordered"
+		public Alternatives getAlternatives_2_0_1_0() { return cAlternatives_2_0_1_0; }
 
-		//qualifiers+="ordered"
-		public Assignment getQualifiersAssignment_2_1_0_0() { return cQualifiersAssignment_2_1_0_0; }
+		//isOrdered?="ordered"
+		public Assignment getIsOrderedAssignment_2_0_1_0_0() { return cIsOrderedAssignment_2_0_1_0_0; }
 
 		//"ordered"
-		public Keyword getQualifiersOrderedKeyword_2_1_0_0_0() { return cQualifiersOrderedKeyword_2_1_0_0_0; }
-
-		//qualifiers+="!ordered"
-		public Assignment getQualifiersAssignment_2_1_0_1() { return cQualifiersAssignment_2_1_0_1; }
+		public Keyword getIsOrderedOrderedKeyword_2_0_1_0_0_0() { return cIsOrderedOrderedKeyword_2_0_1_0_0_0; }
 
 		//"!ordered"
-		public Keyword getQualifiersOrderedKeyword_2_1_0_1_0() { return cQualifiersOrderedKeyword_2_1_0_1_0; }
-
-		//qualifiers+="unique"
-		public Assignment getQualifiersAssignment_2_1_0_2() { return cQualifiersAssignment_2_1_0_2; }
-
-		//"unique"
-		public Keyword getQualifiersUniqueKeyword_2_1_0_2_0() { return cQualifiersUniqueKeyword_2_1_0_2_0; }
-
-		//qualifiers+="!unique"
-		public Assignment getQualifiersAssignment_2_1_0_3() { return cQualifiersAssignment_2_1_0_3; }
-
-		//"!unique"
-		public Keyword getQualifiersUniqueKeyword_2_1_0_3_0() { return cQualifiersUniqueKeyword_2_1_0_3_0; }
+		public Keyword getOrderedKeyword_2_0_1_0_1() { return cOrderedKeyword_2_0_1_0_1; }
 
 		//","?
-		public Keyword getCommaKeyword_2_1_1() { return cCommaKeyword_2_1_1; }
+		public Keyword getCommaKeyword_2_0_1_1() { return cCommaKeyword_2_0_1_1; }
+
+		//((isNotUnique?="!unique" | "unique") ","?)? "}"
+		public Group getGroup_2_1() { return cGroup_2_1; }
+
+		//((isNotUnique?="!unique" | "unique") ","?)?
+		public Group getGroup_2_1_0() { return cGroup_2_1_0; }
+
+		//isNotUnique?="!unique" | "unique"
+		public Alternatives getAlternatives_2_1_0_0() { return cAlternatives_2_1_0_0; }
+
+		//isNotUnique?="!unique"
+		public Assignment getIsNotUniqueAssignment_2_1_0_0_0() { return cIsNotUniqueAssignment_2_1_0_0_0; }
+
+		//"!unique"
+		public Keyword getIsNotUniqueUniqueKeyword_2_1_0_0_0_0() { return cIsNotUniqueUniqueKeyword_2_1_0_0_0_0; }
+
+		//"unique"
+		public Keyword getUniqueKeyword_2_1_0_0_1() { return cUniqueKeyword_2_1_0_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_2_1_0_1() { return cCommaKeyword_2_1_0_1; }
 
 		//"}"
-		public Keyword getRightCurlyBracketKeyword_2_2() { return cRightCurlyBracketKeyword_2_2; }
+		public Keyword getRightCurlyBracketKeyword_2_1_1() { return cRightCurlyBracketKeyword_2_1_1; }
 
 		//("{" ownedAnnotations+=AnnotationElementCS* "}")?
 		public Group getGroup_3() { return cGroup_3; }
@@ -2238,17 +2272,11 @@
 	public class ReferenceCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ReferenceCS");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
-		private final Group cGroup_0_0 = (Group)cAlternatives_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_0_0_0 = (Assignment)cGroup_0_0.eContents().get(0);
-		private final Keyword cQualifiersStaticKeyword_0_0_0_0 = (Keyword)cQualifiersAssignment_0_0_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_0_0_1 = (Assignment)cGroup_0_0.eContents().get(1);
-		private final Keyword cQualifiersDefinitionKeyword_0_0_1_0 = (Keyword)cQualifiersAssignment_0_0_1.eContents().get(0);
-		private final Group cGroup_0_1 = (Group)cAlternatives_0.eContents().get(1);
-		private final Assignment cQualifiersAssignment_0_1_0 = (Assignment)cGroup_0_1.eContents().get(0);
-		private final Keyword cQualifiersDefinitionKeyword_0_1_0_0 = (Keyword)cQualifiersAssignment_0_1_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_0_1_1 = (Assignment)cGroup_0_1.eContents().get(1);
-		private final Keyword cQualifiersStaticKeyword_0_1_1_0 = (Keyword)cQualifiersAssignment_0_1_1.eContents().get(0);
+		private final UnorderedGroup cUnorderedGroup_0 = (UnorderedGroup)cGroup.eContents().get(0);
+		private final Assignment cIsStaticAssignment_0_0 = (Assignment)cUnorderedGroup_0.eContents().get(0);
+		private final Keyword cIsStaticStaticKeyword_0_0_0 = (Keyword)cIsStaticAssignment_0_0.eContents().get(0);
+		private final Assignment cIsDefinitionAssignment_0_1 = (Assignment)cUnorderedGroup_0.eContents().get(1);
+		private final Keyword cIsDefinitionDefinitionKeyword_0_1_0 = (Keyword)cIsDefinitionAssignment_0_1.eContents().get(0);
 		private final Keyword cPropertyKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cNameUnrestrictedNameParserRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
@@ -2265,48 +2293,65 @@
 		private final Keyword cEqualsSignKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
 		private final Assignment cDefaultAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
 		private final RuleCall cDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0 = (RuleCall)cDefaultAssignment_5_1.eContents().get(0);
-		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
-		private final Keyword cLeftCurlyBracketKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
-		private final Group cGroup_6_1 = (Group)cGroup_6.eContents().get(1);
+		private final UnorderedGroup cUnorderedGroup_6 = (UnorderedGroup)cGroup.eContents().get(6);
+		private final Group cGroup_6_0 = (Group)cUnorderedGroup_6.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_6_0_0 = (Keyword)cGroup_6_0.eContents().get(0);
+		private final Group cGroup_6_0_1 = (Group)cGroup_6_0.eContents().get(1);
+		private final Alternatives cAlternatives_6_0_1_0 = (Alternatives)cGroup_6_0_1.eContents().get(0);
+		private final Assignment cIsComposesAssignment_6_0_1_0_0 = (Assignment)cAlternatives_6_0_1_0.eContents().get(0);
+		private final Keyword cIsComposesComposesKeyword_6_0_1_0_0_0 = (Keyword)cIsComposesAssignment_6_0_1_0_0.eContents().get(0);
+		private final Keyword cComposesKeyword_6_0_1_0_1 = (Keyword)cAlternatives_6_0_1_0.eContents().get(1);
+		private final Keyword cCommaKeyword_6_0_1_1 = (Keyword)cGroup_6_0_1.eContents().get(1);
+		private final Group cGroup_6_1 = (Group)cUnorderedGroup_6.eContents().get(1);
 		private final Alternatives cAlternatives_6_1_0 = (Alternatives)cGroup_6_1.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_0 = (Assignment)cAlternatives_6_1_0.eContents().get(0);
-		private final Keyword cQualifiersComposesKeyword_6_1_0_0_0 = (Keyword)cQualifiersAssignment_6_1_0_0.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_1 = (Assignment)cAlternatives_6_1_0.eContents().get(1);
-		private final Keyword cQualifiersComposesKeyword_6_1_0_1_0 = (Keyword)cQualifiersAssignment_6_1_0_1.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_2 = (Assignment)cAlternatives_6_1_0.eContents().get(2);
-		private final Keyword cQualifiersDerivedKeyword_6_1_0_2_0 = (Keyword)cQualifiersAssignment_6_1_0_2.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_3 = (Assignment)cAlternatives_6_1_0.eContents().get(3);
-		private final Keyword cQualifiersDerivedKeyword_6_1_0_3_0 = (Keyword)cQualifiersAssignment_6_1_0_3.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_4 = (Assignment)cAlternatives_6_1_0.eContents().get(4);
-		private final Keyword cQualifiersOrderedKeyword_6_1_0_4_0 = (Keyword)cQualifiersAssignment_6_1_0_4.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_5 = (Assignment)cAlternatives_6_1_0.eContents().get(5);
-		private final Keyword cQualifiersOrderedKeyword_6_1_0_5_0 = (Keyword)cQualifiersAssignment_6_1_0_5.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_6 = (Assignment)cAlternatives_6_1_0.eContents().get(6);
-		private final Keyword cQualifiersReadonlyKeyword_6_1_0_6_0 = (Keyword)cQualifiersAssignment_6_1_0_6.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_7 = (Assignment)cAlternatives_6_1_0.eContents().get(7);
-		private final Keyword cQualifiersReadonlyKeyword_6_1_0_7_0 = (Keyword)cQualifiersAssignment_6_1_0_7.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_8 = (Assignment)cAlternatives_6_1_0.eContents().get(8);
-		private final Keyword cQualifiersResolveKeyword_6_1_0_8_0 = (Keyword)cQualifiersAssignment_6_1_0_8.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_9 = (Assignment)cAlternatives_6_1_0.eContents().get(9);
-		private final Keyword cQualifiersResolveKeyword_6_1_0_9_0 = (Keyword)cQualifiersAssignment_6_1_0_9.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_10 = (Assignment)cAlternatives_6_1_0.eContents().get(10);
-		private final Keyword cQualifiersTransientKeyword_6_1_0_10_0 = (Keyword)cQualifiersAssignment_6_1_0_10.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_11 = (Assignment)cAlternatives_6_1_0.eContents().get(11);
-		private final Keyword cQualifiersTransientKeyword_6_1_0_11_0 = (Keyword)cQualifiersAssignment_6_1_0_11.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_12 = (Assignment)cAlternatives_6_1_0.eContents().get(12);
-		private final Keyword cQualifiersUniqueKeyword_6_1_0_12_0 = (Keyword)cQualifiersAssignment_6_1_0_12.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_13 = (Assignment)cAlternatives_6_1_0.eContents().get(13);
-		private final Keyword cQualifiersUniqueKeyword_6_1_0_13_0 = (Keyword)cQualifiersAssignment_6_1_0_13.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_14 = (Assignment)cAlternatives_6_1_0.eContents().get(14);
-		private final Keyword cQualifiersUnsettableKeyword_6_1_0_14_0 = (Keyword)cQualifiersAssignment_6_1_0_14.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_15 = (Assignment)cAlternatives_6_1_0.eContents().get(15);
-		private final Keyword cQualifiersUnsettableKeyword_6_1_0_15_0 = (Keyword)cQualifiersAssignment_6_1_0_15.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_16 = (Assignment)cAlternatives_6_1_0.eContents().get(16);
-		private final Keyword cQualifiersVolatileKeyword_6_1_0_16_0 = (Keyword)cQualifiersAssignment_6_1_0_16.eContents().get(0);
-		private final Assignment cQualifiersAssignment_6_1_0_17 = (Assignment)cAlternatives_6_1_0.eContents().get(17);
-		private final Keyword cQualifiersVolatileKeyword_6_1_0_17_0 = (Keyword)cQualifiersAssignment_6_1_0_17.eContents().get(0);
+		private final Assignment cIsDerivedAssignment_6_1_0_0 = (Assignment)cAlternatives_6_1_0.eContents().get(0);
+		private final Keyword cIsDerivedDerivedKeyword_6_1_0_0_0 = (Keyword)cIsDerivedAssignment_6_1_0_0.eContents().get(0);
+		private final Keyword cDerivedKeyword_6_1_0_1 = (Keyword)cAlternatives_6_1_0.eContents().get(1);
 		private final Keyword cCommaKeyword_6_1_1 = (Keyword)cGroup_6_1.eContents().get(1);
-		private final Keyword cRightCurlyBracketKeyword_6_2 = (Keyword)cGroup_6.eContents().get(2);
+		private final Group cGroup_6_2 = (Group)cUnorderedGroup_6.eContents().get(2);
+		private final Alternatives cAlternatives_6_2_0 = (Alternatives)cGroup_6_2.eContents().get(0);
+		private final Assignment cIsOrderedAssignment_6_2_0_0 = (Assignment)cAlternatives_6_2_0.eContents().get(0);
+		private final Keyword cIsOrderedOrderedKeyword_6_2_0_0_0 = (Keyword)cIsOrderedAssignment_6_2_0_0.eContents().get(0);
+		private final Keyword cOrderedKeyword_6_2_0_1 = (Keyword)cAlternatives_6_2_0.eContents().get(1);
+		private final Keyword cCommaKeyword_6_2_1 = (Keyword)cGroup_6_2.eContents().get(1);
+		private final Group cGroup_6_3 = (Group)cUnorderedGroup_6.eContents().get(3);
+		private final Alternatives cAlternatives_6_3_0 = (Alternatives)cGroup_6_3.eContents().get(0);
+		private final Assignment cIsReadonlyAssignment_6_3_0_0 = (Assignment)cAlternatives_6_3_0.eContents().get(0);
+		private final Keyword cIsReadonlyReadonlyKeyword_6_3_0_0_0 = (Keyword)cIsReadonlyAssignment_6_3_0_0.eContents().get(0);
+		private final Keyword cReadonlyKeyword_6_3_0_1 = (Keyword)cAlternatives_6_3_0.eContents().get(1);
+		private final Keyword cCommaKeyword_6_3_1 = (Keyword)cGroup_6_3.eContents().get(1);
+		private final Group cGroup_6_4 = (Group)cUnorderedGroup_6.eContents().get(4);
+		private final Alternatives cAlternatives_6_4_0 = (Alternatives)cGroup_6_4.eContents().get(0);
+		private final Assignment cIsResolveAssignment_6_4_0_0 = (Assignment)cAlternatives_6_4_0.eContents().get(0);
+		private final Keyword cIsResolveResolveKeyword_6_4_0_0_0 = (Keyword)cIsResolveAssignment_6_4_0_0.eContents().get(0);
+		private final Keyword cResolveKeyword_6_4_0_1 = (Keyword)cAlternatives_6_4_0.eContents().get(1);
+		private final Keyword cCommaKeyword_6_4_1 = (Keyword)cGroup_6_4.eContents().get(1);
+		private final Group cGroup_6_5 = (Group)cUnorderedGroup_6.eContents().get(5);
+		private final Alternatives cAlternatives_6_5_0 = (Alternatives)cGroup_6_5.eContents().get(0);
+		private final Assignment cIsTransientAssignment_6_5_0_0 = (Assignment)cAlternatives_6_5_0.eContents().get(0);
+		private final Keyword cIsTransientTransientKeyword_6_5_0_0_0 = (Keyword)cIsTransientAssignment_6_5_0_0.eContents().get(0);
+		private final Keyword cTransientKeyword_6_5_0_1 = (Keyword)cAlternatives_6_5_0.eContents().get(1);
+		private final Keyword cCommaKeyword_6_5_1 = (Keyword)cGroup_6_5.eContents().get(1);
+		private final Group cGroup_6_6 = (Group)cUnorderedGroup_6.eContents().get(6);
+		private final Alternatives cAlternatives_6_6_0 = (Alternatives)cGroup_6_6.eContents().get(0);
+		private final Assignment cIsNotUniqueAssignment_6_6_0_0 = (Assignment)cAlternatives_6_6_0.eContents().get(0);
+		private final Keyword cIsNotUniqueUniqueKeyword_6_6_0_0_0 = (Keyword)cIsNotUniqueAssignment_6_6_0_0.eContents().get(0);
+		private final Keyword cUniqueKeyword_6_6_0_1 = (Keyword)cAlternatives_6_6_0.eContents().get(1);
+		private final Keyword cCommaKeyword_6_6_1 = (Keyword)cGroup_6_6.eContents().get(1);
+		private final Group cGroup_6_7 = (Group)cUnorderedGroup_6.eContents().get(7);
+		private final Alternatives cAlternatives_6_7_0 = (Alternatives)cGroup_6_7.eContents().get(0);
+		private final Assignment cIsUnsettableAssignment_6_7_0_0 = (Assignment)cAlternatives_6_7_0.eContents().get(0);
+		private final Keyword cIsUnsettableUnsettableKeyword_6_7_0_0_0 = (Keyword)cIsUnsettableAssignment_6_7_0_0.eContents().get(0);
+		private final Keyword cUnsettableKeyword_6_7_0_1 = (Keyword)cAlternatives_6_7_0.eContents().get(1);
+		private final Keyword cCommaKeyword_6_7_1 = (Keyword)cGroup_6_7.eContents().get(1);
+		private final Group cGroup_6_8 = (Group)cUnorderedGroup_6.eContents().get(8);
+		private final Group cGroup_6_8_0 = (Group)cGroup_6_8.eContents().get(0);
+		private final Alternatives cAlternatives_6_8_0_0 = (Alternatives)cGroup_6_8_0.eContents().get(0);
+		private final Assignment cIsVolatileAssignment_6_8_0_0_0 = (Assignment)cAlternatives_6_8_0_0.eContents().get(0);
+		private final Keyword cIsVolatileVolatileKeyword_6_8_0_0_0_0 = (Keyword)cIsVolatileAssignment_6_8_0_0_0.eContents().get(0);
+		private final Keyword cVolatileKeyword_6_8_0_0_1 = (Keyword)cAlternatives_6_8_0_0.eContents().get(1);
+		private final Keyword cCommaKeyword_6_8_0_1 = (Keyword)cGroup_6_8_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_6_8_1 = (Keyword)cGroup_6_8.eContents().get(1);
 		private final Alternatives cAlternatives_7 = (Alternatives)cGroup.eContents().get(7);
 		private final Group cGroup_7_0 = (Group)cAlternatives_7.eContents().get(0);
 		private final Keyword cLeftCurlyBracketKeyword_7_0_0 = (Keyword)cGroup_7_0.eContents().get(0);
@@ -2342,65 +2387,45 @@
 		private final Keyword cSemicolonKeyword_7_1 = (Keyword)cAlternatives_7.eContents().get(1);
 		
 		//ReferenceCS returns base::ReferenceCS:
-		//	(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)? "property"
-		//	name=UnrestrictedName ("#" referredOpposite=[pivot::Property|UnrestrictedName])? (":"
-		//	ownedType=TypedMultiplicityRefCS)? ("=" default=SINGLE_QUOTED_STRING)? ("{" ((qualifiers+="composes" |
-		//	qualifiers+="!composes" | qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="ordered" |
-		//	qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" | qualifiers+="resolve" |
-		//	qualifiers+="!resolve" | qualifiers+="transient" | qualifiers+="!transient" | qualifiers+="unique" |
-		//	qualifiers+="!unique" | qualifiers+="unsettable" | qualifiers+="!unsettable" | qualifiers+="volatile" |
-		//	qualifiers+="!volatile") ","?)+ "}")? ("{" (ownedAnnotations+=AnnotationElementCS | "key"
+		//	(isStatic?="static"? & isDefinition?="definition"?) "property" name=UnrestrictedName ("#"
+		//	referredOpposite=[pivot::Property|UnrestrictedName])? (":" ownedType=TypedMultiplicityRefCS)? ("="
+		//	default=SINGLE_QUOTED_STRING)? ("{" ((isComposes?="composes" | "!composes") ","?)? & ((isDerived?="derived" |
+		//	"!derived") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? & ((isReadonly?="readonly" | "!readonly") ","?)? &
+		//	((isResolve?="resolve" | "!resolve") ","?)? & ((isTransient?="transient" | "!transient") ","?)? &
+		//	((isNotUnique?="!unique" | "unique") ","?)? & ((isUnsettable?="unsettable" | "!unsettable") ","?)? &
+		//	((isVolatile?="volatile" | "!volatile") ","?)? "}")? ("{" (ownedAnnotations+=AnnotationElementCS | "key"
 		//	referredKeys+=[pivot::Property|UnrestrictedName] ("," referredKeys+=[pivot::Property|UnrestrictedName])* ";" |
 		//	"derivation" UnrestrictedName? ":" ownedDefaultExpressions+=SpecificationCS? ";" | "initial" UnrestrictedName? ":"
 		//	ownedDefaultExpressions+=SpecificationCS? ";")* "}" | ";");
 		@Override
 		public ParserRule getRule() { return rule; }
 
-		//(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)? "property"
-		//name=UnrestrictedName ("#" referredOpposite=[pivot::Property|UnrestrictedName])? (":"
-		//ownedType=TypedMultiplicityRefCS)? ("=" default=SINGLE_QUOTED_STRING)? ("{" ((qualifiers+="composes" |
-		//qualifiers+="!composes" | qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="ordered" |
-		//qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" | qualifiers+="resolve" |
-		//qualifiers+="!resolve" | qualifiers+="transient" | qualifiers+="!transient" | qualifiers+="unique" |
-		//qualifiers+="!unique" | qualifiers+="unsettable" | qualifiers+="!unsettable" | qualifiers+="volatile" |
-		//qualifiers+="!volatile") ","?)+ "}")? ("{" (ownedAnnotations+=AnnotationElementCS | "key"
+		//(isStatic?="static"? & isDefinition?="definition"?) "property" name=UnrestrictedName ("#"
+		//referredOpposite=[pivot::Property|UnrestrictedName])? (":" ownedType=TypedMultiplicityRefCS)? ("="
+		//default=SINGLE_QUOTED_STRING)? ("{" ((isComposes?="composes" | "!composes") ","?)? & ((isDerived?="derived" |
+		//"!derived") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? & ((isReadonly?="readonly" | "!readonly") ","?)? &
+		//((isResolve?="resolve" | "!resolve") ","?)? & ((isTransient?="transient" | "!transient") ","?)? &
+		//((isNotUnique?="!unique" | "unique") ","?)? & ((isUnsettable?="unsettable" | "!unsettable") ","?)? &
+		//((isVolatile?="volatile" | "!volatile") ","?)? "}")? ("{" (ownedAnnotations+=AnnotationElementCS | "key"
 		//referredKeys+=[pivot::Property|UnrestrictedName] ("," referredKeys+=[pivot::Property|UnrestrictedName])* ";" |
 		//"derivation" UnrestrictedName? ":" ownedDefaultExpressions+=SpecificationCS? ";" | "initial" UnrestrictedName? ":"
 		//ownedDefaultExpressions+=SpecificationCS? ";")* "}" | ";")
 		public Group getGroup() { return cGroup; }
 
-		//(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)?
-		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+		//isStatic?="static"? & isDefinition?="definition"?
+		public UnorderedGroup getUnorderedGroup_0() { return cUnorderedGroup_0; }
 
-		//qualifiers+="static" qualifiers+="definition"?
-		public Group getGroup_0_0() { return cGroup_0_0; }
-
-		//qualifiers+="static"
-		public Assignment getQualifiersAssignment_0_0_0() { return cQualifiersAssignment_0_0_0; }
+		//isStatic?="static"?
+		public Assignment getIsStaticAssignment_0_0() { return cIsStaticAssignment_0_0; }
 
 		//"static"
-		public Keyword getQualifiersStaticKeyword_0_0_0_0() { return cQualifiersStaticKeyword_0_0_0_0; }
+		public Keyword getIsStaticStaticKeyword_0_0_0() { return cIsStaticStaticKeyword_0_0_0; }
 
-		//qualifiers+="definition"?
-		public Assignment getQualifiersAssignment_0_0_1() { return cQualifiersAssignment_0_0_1; }
+		//isDefinition?="definition"?
+		public Assignment getIsDefinitionAssignment_0_1() { return cIsDefinitionAssignment_0_1; }
 
 		//"definition"
-		public Keyword getQualifiersDefinitionKeyword_0_0_1_0() { return cQualifiersDefinitionKeyword_0_0_1_0; }
-
-		//qualifiers+="definition" qualifiers+="static"?
-		public Group getGroup_0_1() { return cGroup_0_1; }
-
-		//qualifiers+="definition"
-		public Assignment getQualifiersAssignment_0_1_0() { return cQualifiersAssignment_0_1_0; }
-
-		//"definition"
-		public Keyword getQualifiersDefinitionKeyword_0_1_0_0() { return cQualifiersDefinitionKeyword_0_1_0_0; }
-
-		//qualifiers+="static"?
-		public Assignment getQualifiersAssignment_0_1_1() { return cQualifiersAssignment_0_1_1; }
-
-		//"static"
-		public Keyword getQualifiersStaticKeyword_0_1_1_0() { return cQualifiersStaticKeyword_0_1_1_0; }
+		public Keyword getIsDefinitionDefinitionKeyword_0_1_0() { return cIsDefinitionDefinitionKeyword_0_1_0; }
 
 		//"property"
 		public Keyword getPropertyKeyword_1() { return cPropertyKeyword_1; }
@@ -2450,143 +2475,185 @@
 		//SINGLE_QUOTED_STRING
 		public RuleCall getDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0() { return cDefaultSINGLE_QUOTED_STRINGTerminalRuleCall_5_1_0; }
 
-		//("{" ((qualifiers+="composes" | qualifiers+="!composes" | qualifiers+="derived" | qualifiers+="!derived" |
-		//qualifiers+="ordered" | qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" |
-		//qualifiers+="resolve" | qualifiers+="!resolve" | qualifiers+="transient" | qualifiers+="!transient" |
-		//qualifiers+="unique" | qualifiers+="!unique" | qualifiers+="unsettable" | qualifiers+="!unsettable" |
-		//qualifiers+="volatile" | qualifiers+="!volatile") ","?)+ "}")?
-		public Group getGroup_6() { return cGroup_6; }
+		//("{" ((isComposes?="composes" | "!composes") ","?)? & ((isDerived?="derived" | "!derived") ","?)? &
+		//((isOrdered?="ordered" | "!ordered") ","?)? & ((isReadonly?="readonly" | "!readonly") ","?)? & ((isResolve?="resolve"
+		//| "!resolve") ","?)? & ((isTransient?="transient" | "!transient") ","?)? & ((isNotUnique?="!unique" | "unique") ","?)?
+		//& ((isUnsettable?="unsettable" | "!unsettable") ","?)? & ((isVolatile?="volatile" | "!volatile") ","?)? "}")?
+		public UnorderedGroup getUnorderedGroup_6() { return cUnorderedGroup_6; }
+
+		//"{" ((isComposes?="composes" | "!composes") ","?)?
+		public Group getGroup_6_0() { return cGroup_6_0; }
 
 		//"{"
-		public Keyword getLeftCurlyBracketKeyword_6_0() { return cLeftCurlyBracketKeyword_6_0; }
+		public Keyword getLeftCurlyBracketKeyword_6_0_0() { return cLeftCurlyBracketKeyword_6_0_0; }
 
-		//((qualifiers+="composes" | qualifiers+="!composes" | qualifiers+="derived" | qualifiers+="!derived" |
-		//qualifiers+="ordered" | qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" |
-		//qualifiers+="resolve" | qualifiers+="!resolve" | qualifiers+="transient" | qualifiers+="!transient" |
-		//qualifiers+="unique" | qualifiers+="!unique" | qualifiers+="unsettable" | qualifiers+="!unsettable" |
-		//qualifiers+="volatile" | qualifiers+="!volatile") ","?)+
-		public Group getGroup_6_1() { return cGroup_6_1; }
+		//((isComposes?="composes" | "!composes") ","?)?
+		public Group getGroup_6_0_1() { return cGroup_6_0_1; }
 
-		//qualifiers+="composes" | qualifiers+="!composes" | qualifiers+="derived" | qualifiers+="!derived" |
-		//qualifiers+="ordered" | qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" |
-		//qualifiers+="resolve" | qualifiers+="!resolve" | qualifiers+="transient" | qualifiers+="!transient" |
-		//qualifiers+="unique" | qualifiers+="!unique" | qualifiers+="unsettable" | qualifiers+="!unsettable" |
-		//qualifiers+="volatile" | qualifiers+="!volatile"
-		public Alternatives getAlternatives_6_1_0() { return cAlternatives_6_1_0; }
+		//isComposes?="composes" | "!composes"
+		public Alternatives getAlternatives_6_0_1_0() { return cAlternatives_6_0_1_0; }
 
-		//qualifiers+="composes"
-		public Assignment getQualifiersAssignment_6_1_0_0() { return cQualifiersAssignment_6_1_0_0; }
+		//isComposes?="composes"
+		public Assignment getIsComposesAssignment_6_0_1_0_0() { return cIsComposesAssignment_6_0_1_0_0; }
 
 		//"composes"
-		public Keyword getQualifiersComposesKeyword_6_1_0_0_0() { return cQualifiersComposesKeyword_6_1_0_0_0; }
-
-		//qualifiers+="!composes"
-		public Assignment getQualifiersAssignment_6_1_0_1() { return cQualifiersAssignment_6_1_0_1; }
+		public Keyword getIsComposesComposesKeyword_6_0_1_0_0_0() { return cIsComposesComposesKeyword_6_0_1_0_0_0; }
 
 		//"!composes"
-		public Keyword getQualifiersComposesKeyword_6_1_0_1_0() { return cQualifiersComposesKeyword_6_1_0_1_0; }
+		public Keyword getComposesKeyword_6_0_1_0_1() { return cComposesKeyword_6_0_1_0_1; }
 
-		//qualifiers+="derived"
-		public Assignment getQualifiersAssignment_6_1_0_2() { return cQualifiersAssignment_6_1_0_2; }
+		//","?
+		public Keyword getCommaKeyword_6_0_1_1() { return cCommaKeyword_6_0_1_1; }
+
+		//((isDerived?="derived" | "!derived") ","?)?
+		public Group getGroup_6_1() { return cGroup_6_1; }
+
+		//isDerived?="derived" | "!derived"
+		public Alternatives getAlternatives_6_1_0() { return cAlternatives_6_1_0; }
+
+		//isDerived?="derived"
+		public Assignment getIsDerivedAssignment_6_1_0_0() { return cIsDerivedAssignment_6_1_0_0; }
 
 		//"derived"
-		public Keyword getQualifiersDerivedKeyword_6_1_0_2_0() { return cQualifiersDerivedKeyword_6_1_0_2_0; }
-
-		//qualifiers+="!derived"
-		public Assignment getQualifiersAssignment_6_1_0_3() { return cQualifiersAssignment_6_1_0_3; }
+		public Keyword getIsDerivedDerivedKeyword_6_1_0_0_0() { return cIsDerivedDerivedKeyword_6_1_0_0_0; }
 
 		//"!derived"
-		public Keyword getQualifiersDerivedKeyword_6_1_0_3_0() { return cQualifiersDerivedKeyword_6_1_0_3_0; }
-
-		//qualifiers+="ordered"
-		public Assignment getQualifiersAssignment_6_1_0_4() { return cQualifiersAssignment_6_1_0_4; }
-
-		//"ordered"
-		public Keyword getQualifiersOrderedKeyword_6_1_0_4_0() { return cQualifiersOrderedKeyword_6_1_0_4_0; }
-
-		//qualifiers+="!ordered"
-		public Assignment getQualifiersAssignment_6_1_0_5() { return cQualifiersAssignment_6_1_0_5; }
-
-		//"!ordered"
-		public Keyword getQualifiersOrderedKeyword_6_1_0_5_0() { return cQualifiersOrderedKeyword_6_1_0_5_0; }
-
-		//qualifiers+="readonly"
-		public Assignment getQualifiersAssignment_6_1_0_6() { return cQualifiersAssignment_6_1_0_6; }
-
-		//"readonly"
-		public Keyword getQualifiersReadonlyKeyword_6_1_0_6_0() { return cQualifiersReadonlyKeyword_6_1_0_6_0; }
-
-		//qualifiers+="!readonly"
-		public Assignment getQualifiersAssignment_6_1_0_7() { return cQualifiersAssignment_6_1_0_7; }
-
-		//"!readonly"
-		public Keyword getQualifiersReadonlyKeyword_6_1_0_7_0() { return cQualifiersReadonlyKeyword_6_1_0_7_0; }
-
-		//qualifiers+="resolve"
-		public Assignment getQualifiersAssignment_6_1_0_8() { return cQualifiersAssignment_6_1_0_8; }
-
-		//"resolve"
-		public Keyword getQualifiersResolveKeyword_6_1_0_8_0() { return cQualifiersResolveKeyword_6_1_0_8_0; }
-
-		//qualifiers+="!resolve"
-		public Assignment getQualifiersAssignment_6_1_0_9() { return cQualifiersAssignment_6_1_0_9; }
-
-		//"!resolve"
-		public Keyword getQualifiersResolveKeyword_6_1_0_9_0() { return cQualifiersResolveKeyword_6_1_0_9_0; }
-
-		//qualifiers+="transient"
-		public Assignment getQualifiersAssignment_6_1_0_10() { return cQualifiersAssignment_6_1_0_10; }
-
-		//"transient"
-		public Keyword getQualifiersTransientKeyword_6_1_0_10_0() { return cQualifiersTransientKeyword_6_1_0_10_0; }
-
-		//qualifiers+="!transient"
-		public Assignment getQualifiersAssignment_6_1_0_11() { return cQualifiersAssignment_6_1_0_11; }
-
-		//"!transient"
-		public Keyword getQualifiersTransientKeyword_6_1_0_11_0() { return cQualifiersTransientKeyword_6_1_0_11_0; }
-
-		//qualifiers+="unique"
-		public Assignment getQualifiersAssignment_6_1_0_12() { return cQualifiersAssignment_6_1_0_12; }
-
-		//"unique"
-		public Keyword getQualifiersUniqueKeyword_6_1_0_12_0() { return cQualifiersUniqueKeyword_6_1_0_12_0; }
-
-		//qualifiers+="!unique"
-		public Assignment getQualifiersAssignment_6_1_0_13() { return cQualifiersAssignment_6_1_0_13; }
-
-		//"!unique"
-		public Keyword getQualifiersUniqueKeyword_6_1_0_13_0() { return cQualifiersUniqueKeyword_6_1_0_13_0; }
-
-		//qualifiers+="unsettable"
-		public Assignment getQualifiersAssignment_6_1_0_14() { return cQualifiersAssignment_6_1_0_14; }
-
-		//"unsettable"
-		public Keyword getQualifiersUnsettableKeyword_6_1_0_14_0() { return cQualifiersUnsettableKeyword_6_1_0_14_0; }
-
-		//qualifiers+="!unsettable"
-		public Assignment getQualifiersAssignment_6_1_0_15() { return cQualifiersAssignment_6_1_0_15; }
-
-		//"!unsettable"
-		public Keyword getQualifiersUnsettableKeyword_6_1_0_15_0() { return cQualifiersUnsettableKeyword_6_1_0_15_0; }
-
-		//qualifiers+="volatile"
-		public Assignment getQualifiersAssignment_6_1_0_16() { return cQualifiersAssignment_6_1_0_16; }
-
-		//"volatile"
-		public Keyword getQualifiersVolatileKeyword_6_1_0_16_0() { return cQualifiersVolatileKeyword_6_1_0_16_0; }
-
-		//qualifiers+="!volatile"
-		public Assignment getQualifiersAssignment_6_1_0_17() { return cQualifiersAssignment_6_1_0_17; }
-
-		//"!volatile"
-		public Keyword getQualifiersVolatileKeyword_6_1_0_17_0() { return cQualifiersVolatileKeyword_6_1_0_17_0; }
+		public Keyword getDerivedKeyword_6_1_0_1() { return cDerivedKeyword_6_1_0_1; }
 
 		//","?
 		public Keyword getCommaKeyword_6_1_1() { return cCommaKeyword_6_1_1; }
 
+		//((isOrdered?="ordered" | "!ordered") ","?)?
+		public Group getGroup_6_2() { return cGroup_6_2; }
+
+		//isOrdered?="ordered" | "!ordered"
+		public Alternatives getAlternatives_6_2_0() { return cAlternatives_6_2_0; }
+
+		//isOrdered?="ordered"
+		public Assignment getIsOrderedAssignment_6_2_0_0() { return cIsOrderedAssignment_6_2_0_0; }
+
+		//"ordered"
+		public Keyword getIsOrderedOrderedKeyword_6_2_0_0_0() { return cIsOrderedOrderedKeyword_6_2_0_0_0; }
+
+		//"!ordered"
+		public Keyword getOrderedKeyword_6_2_0_1() { return cOrderedKeyword_6_2_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_6_2_1() { return cCommaKeyword_6_2_1; }
+
+		//((isReadonly?="readonly" | "!readonly") ","?)?
+		public Group getGroup_6_3() { return cGroup_6_3; }
+
+		//isReadonly?="readonly" | "!readonly"
+		public Alternatives getAlternatives_6_3_0() { return cAlternatives_6_3_0; }
+
+		//isReadonly?="readonly"
+		public Assignment getIsReadonlyAssignment_6_3_0_0() { return cIsReadonlyAssignment_6_3_0_0; }
+
+		//"readonly"
+		public Keyword getIsReadonlyReadonlyKeyword_6_3_0_0_0() { return cIsReadonlyReadonlyKeyword_6_3_0_0_0; }
+
+		//"!readonly"
+		public Keyword getReadonlyKeyword_6_3_0_1() { return cReadonlyKeyword_6_3_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_6_3_1() { return cCommaKeyword_6_3_1; }
+
+		//((isResolve?="resolve" | "!resolve") ","?)?
+		public Group getGroup_6_4() { return cGroup_6_4; }
+
+		//isResolve?="resolve" | "!resolve"
+		public Alternatives getAlternatives_6_4_0() { return cAlternatives_6_4_0; }
+
+		//isResolve?="resolve"
+		public Assignment getIsResolveAssignment_6_4_0_0() { return cIsResolveAssignment_6_4_0_0; }
+
+		//"resolve"
+		public Keyword getIsResolveResolveKeyword_6_4_0_0_0() { return cIsResolveResolveKeyword_6_4_0_0_0; }
+
+		//"!resolve"
+		public Keyword getResolveKeyword_6_4_0_1() { return cResolveKeyword_6_4_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_6_4_1() { return cCommaKeyword_6_4_1; }
+
+		//((isTransient?="transient" | "!transient") ","?)?
+		public Group getGroup_6_5() { return cGroup_6_5; }
+
+		//isTransient?="transient" | "!transient"
+		public Alternatives getAlternatives_6_5_0() { return cAlternatives_6_5_0; }
+
+		//isTransient?="transient"
+		public Assignment getIsTransientAssignment_6_5_0_0() { return cIsTransientAssignment_6_5_0_0; }
+
+		//"transient"
+		public Keyword getIsTransientTransientKeyword_6_5_0_0_0() { return cIsTransientTransientKeyword_6_5_0_0_0; }
+
+		//"!transient"
+		public Keyword getTransientKeyword_6_5_0_1() { return cTransientKeyword_6_5_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_6_5_1() { return cCommaKeyword_6_5_1; }
+
+		//((isNotUnique?="!unique" | "unique") ","?)?
+		public Group getGroup_6_6() { return cGroup_6_6; }
+
+		//isNotUnique?="!unique" | "unique"
+		public Alternatives getAlternatives_6_6_0() { return cAlternatives_6_6_0; }
+
+		//isNotUnique?="!unique"
+		public Assignment getIsNotUniqueAssignment_6_6_0_0() { return cIsNotUniqueAssignment_6_6_0_0; }
+
+		//"!unique"
+		public Keyword getIsNotUniqueUniqueKeyword_6_6_0_0_0() { return cIsNotUniqueUniqueKeyword_6_6_0_0_0; }
+
+		//"unique"
+		public Keyword getUniqueKeyword_6_6_0_1() { return cUniqueKeyword_6_6_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_6_6_1() { return cCommaKeyword_6_6_1; }
+
+		//((isUnsettable?="unsettable" | "!unsettable") ","?)?
+		public Group getGroup_6_7() { return cGroup_6_7; }
+
+		//isUnsettable?="unsettable" | "!unsettable"
+		public Alternatives getAlternatives_6_7_0() { return cAlternatives_6_7_0; }
+
+		//isUnsettable?="unsettable"
+		public Assignment getIsUnsettableAssignment_6_7_0_0() { return cIsUnsettableAssignment_6_7_0_0; }
+
+		//"unsettable"
+		public Keyword getIsUnsettableUnsettableKeyword_6_7_0_0_0() { return cIsUnsettableUnsettableKeyword_6_7_0_0_0; }
+
+		//"!unsettable"
+		public Keyword getUnsettableKeyword_6_7_0_1() { return cUnsettableKeyword_6_7_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_6_7_1() { return cCommaKeyword_6_7_1; }
+
+		//((isVolatile?="volatile" | "!volatile") ","?)? "}"
+		public Group getGroup_6_8() { return cGroup_6_8; }
+
+		//((isVolatile?="volatile" | "!volatile") ","?)?
+		public Group getGroup_6_8_0() { return cGroup_6_8_0; }
+
+		//isVolatile?="volatile" | "!volatile"
+		public Alternatives getAlternatives_6_8_0_0() { return cAlternatives_6_8_0_0; }
+
+		//isVolatile?="volatile"
+		public Assignment getIsVolatileAssignment_6_8_0_0_0() { return cIsVolatileAssignment_6_8_0_0_0; }
+
+		//"volatile"
+		public Keyword getIsVolatileVolatileKeyword_6_8_0_0_0_0() { return cIsVolatileVolatileKeyword_6_8_0_0_0_0; }
+
+		//"!volatile"
+		public Keyword getVolatileKeyword_6_8_0_0_1() { return cVolatileKeyword_6_8_0_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_6_8_0_1() { return cCommaKeyword_6_8_0_1; }
+
 		//"}"
-		public Keyword getRightCurlyBracketKeyword_6_2() { return cRightCurlyBracketKeyword_6_2; }
+		public Keyword getRightCurlyBracketKeyword_6_8_1() { return cRightCurlyBracketKeyword_6_8_1; }
 
 		//"{" (ownedAnnotations+=AnnotationElementCS | "key" referredKeys+=[pivot::Property|UnrestrictedName] (","
 		//referredKeys+=[pivot::Property|UnrestrictedName])* ";" | "derivation" UnrestrictedName? ":"
@@ -3499,12 +3566,11 @@
 	}
 
 	//AttributeCS returns base::AttributeCS:
-	//	(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)? "attribute"
-	//	name=UnrestrictedName (":" ownedType=TypedMultiplicityRefCS)? ("=" default=SINGLE_QUOTED_STRING)? ("{"
-	//	((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="id" | qualifiers+="!id" | qualifiers+="ordered" |
-	//	qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" | qualifiers+="transient" |
-	//	qualifiers+="!transient" | qualifiers+="unique" | qualifiers+="!unique" | qualifiers+="unsettable" |
-	//	qualifiers+="!unsettable" | qualifiers+="volatile" | qualifiers+="!volatile") ","?)+ "}")? ("{"
+	//	(isStatic?="static"? & isDefinition?="definition"?) "attribute" name=UnrestrictedName (":"
+	//	ownedType=TypedMultiplicityRefCS)? ("=" default=SINGLE_QUOTED_STRING)? ("{" ((isDerived?="derived" | "!derived")
+	//	","?)? & ((isId?="id" | "!id") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? & ((isReadonly?="readonly" |
+	//	"!readonly") ","?)? & ((isTransient?="transient" | "!transient") ","?)? & ((isNotUnique?="!unique" | "unique") ","?)?
+	//	& ((isUnsettable?="unsettable" | "!unsettable") ","?)? & ((isVolatile?="volatile" | "!volatile") ","?)? "}")? ("{"
 	//	(ownedAnnotations+=AnnotationElementCS | "derivation" UnrestrictedName? ":" ownedDefaultExpressions+=SpecificationCS?
 	//	";" | "initial" UnrestrictedName? ":" ownedDefaultExpressions+=SpecificationCS? ";")* "}" | ";");
 	public AttributeCSElements getAttributeCSAccess() {
@@ -3622,13 +3688,13 @@
 	}
 
 	//OperationCS returns base::OperationCS:
-	//	(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)? "operation"
-	//	ownedSignature=TemplateSignatureCS? name=UnrestrictedName "(" (ownedParameters+=ParameterCS (","
-	//	ownedParameters+=ParameterCS)*)? ")" (":" ownedType=TypedMultiplicityRefCS)? ("throws" ownedExceptions+=TypedRefCS
-	//	("," ownedExceptions+=TypedRefCS)*)? ("{" ((qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="ordered" |
-	//	qualifiers+="!ordered" | qualifiers+="unique" | qualifiers+="!unique") ","?)+ "}")? ("{"
-	//	(ownedAnnotations+=AnnotationElementCS | ownedPreconditions+=PreconditionConstraintCS | "body" UnrestrictedName? ":"
-	//	ownedBodyExpressions+=SpecificationCS? ";" | ownedPostconditions+=PostconditionConstraintCS)* "}" | ";");
+	//	(isStatic?="static"? & isDefinition?="definition"?) "operation" ownedSignature=TemplateSignatureCS?
+	//	name=UnrestrictedName "(" (ownedParameters+=ParameterCS ("," ownedParameters+=ParameterCS)*)? ")" (":"
+	//	ownedType=TypedMultiplicityRefCS)? ("throws" ownedExceptions+=TypedRefCS ("," ownedExceptions+=TypedRefCS)*)? ("{"
+	//	((isDerived?="derived" | "!derived") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? & ((isNotUnique?="!unique"
+	//	| "unique") ","?)? "}")? ("{" (ownedAnnotations+=AnnotationElementCS | ownedPreconditions+=PreconditionConstraintCS |
+	//	"body" UnrestrictedName? ":" ownedBodyExpressions+=SpecificationCS? ";" |
+	//	ownedPostconditions+=PostconditionConstraintCS)* "}" | ";");
 	public OperationCSElements getOperationCSAccess() {
 		return pOperationCS;
 	}
@@ -3649,8 +3715,8 @@
 	}
 
 	//ParameterCS returns base::ParameterCS:
-	//	name=UnrestrictedName (":" ownedType=TypedMultiplicityRefCS)? ("{" ((qualifiers+="ordered" | qualifiers+="!ordered" |
-	//	qualifiers+="unique" | qualifiers+="!unique") ","?)+ "}")? ("{" ownedAnnotations+=AnnotationElementCS* "}")?;
+	//	name=UnrestrictedName (":" ownedType=TypedMultiplicityRefCS)? ("{" ((isOrdered?="ordered" | "!ordered") ","?)? &
+	//	((isNotUnique?="!unique" | "unique") ","?)? "}")? ("{" ownedAnnotations+=AnnotationElementCS* "}")?;
 	public ParameterCSElements getParameterCSAccess() {
 		return pParameterCS;
 	}
@@ -3660,14 +3726,13 @@
 	}
 
 	//ReferenceCS returns base::ReferenceCS:
-	//	(qualifiers+="static" qualifiers+="definition"? | qualifiers+="definition" qualifiers+="static"?)? "property"
-	//	name=UnrestrictedName ("#" referredOpposite=[pivot::Property|UnrestrictedName])? (":"
-	//	ownedType=TypedMultiplicityRefCS)? ("=" default=SINGLE_QUOTED_STRING)? ("{" ((qualifiers+="composes" |
-	//	qualifiers+="!composes" | qualifiers+="derived" | qualifiers+="!derived" | qualifiers+="ordered" |
-	//	qualifiers+="!ordered" | qualifiers+="readonly" | qualifiers+="!readonly" | qualifiers+="resolve" |
-	//	qualifiers+="!resolve" | qualifiers+="transient" | qualifiers+="!transient" | qualifiers+="unique" |
-	//	qualifiers+="!unique" | qualifiers+="unsettable" | qualifiers+="!unsettable" | qualifiers+="volatile" |
-	//	qualifiers+="!volatile") ","?)+ "}")? ("{" (ownedAnnotations+=AnnotationElementCS | "key"
+	//	(isStatic?="static"? & isDefinition?="definition"?) "property" name=UnrestrictedName ("#"
+	//	referredOpposite=[pivot::Property|UnrestrictedName])? (":" ownedType=TypedMultiplicityRefCS)? ("="
+	//	default=SINGLE_QUOTED_STRING)? ("{" ((isComposes?="composes" | "!composes") ","?)? & ((isDerived?="derived" |
+	//	"!derived") ","?)? & ((isOrdered?="ordered" | "!ordered") ","?)? & ((isReadonly?="readonly" | "!readonly") ","?)? &
+	//	((isResolve?="resolve" | "!resolve") ","?)? & ((isTransient?="transient" | "!transient") ","?)? &
+	//	((isNotUnique?="!unique" | "unique") ","?)? & ((isUnsettable?="unsettable" | "!unsettable") ","?)? &
+	//	((isVolatile?="volatile" | "!volatile") ","?)? "}")? ("{" (ownedAnnotations+=AnnotationElementCS | "key"
 	//	referredKeys+=[pivot::Property|UnrestrictedName] ("," referredKeys+=[pivot::Property|UnrestrictedName])* ";" |
 	//	"derivation" UnrestrictedName? ":" ownedDefaultExpressions+=SpecificationCS? ";" | "initial" UnrestrictedName? ":"
 	//	ownedDefaultExpressions+=SpecificationCS? ";")* "}" | ";");
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/OCLinEcore.xtext b/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/OCLinEcore.xtext
index 690fa2b..bb0eeef 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/OCLinEcore.xtext
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/OCLinEcore.xtext
@@ -106,19 +106,18 @@
 ;
 
 AttributeCS returns base::AttributeCS:
-	((qualifiers+='static' (qualifiers+='definition')?) | (qualifiers+='definition' (qualifiers+='static')?))?
+	(isStatic?='static'? & isDefinition?='definition'?)
 	'attribute' name=UnrestrictedName
 	(':' ownedType=TypedMultiplicityRefCS)?
 	('=' default=SINGLE_QUOTED_STRING)?
-	('{'((qualifiers+='derived' | qualifiers+='!derived' |
-		  qualifiers+='id' | qualifiers+='!id' |
-		  qualifiers+='ordered' | qualifiers+='!ordered' |
-		  qualifiers+='readonly' | qualifiers+='!readonly' |
-		  qualifiers+='transient' | qualifiers+='!transient' |
-		  qualifiers+='unique' | qualifiers+='!unique' |
-		  qualifiers+='unsettable' | qualifiers+='!unsettable' |
-		  qualifiers+='volatile' | qualifiers+='!volatile'
-	    ) ','? )+
+	('{'((isDerived?='derived' | '!derived') ','?)? &
+		((isId?='id' | '!id') ','?)? &
+		((isOrdered?='ordered' | '!ordered') ','?)? &
+		((isReadonly?='readonly' | '!readonly') ','?)? &
+		((isTransient?='transient' | '!transient') ','?)? &
+		((isNotUnique?='!unique' | 'unique') ','?)? &
+		((isUnsettable?='unsettable' | '!unsettable') ','?)? &
+		((isVolatile?='volatile' | '!volatile') ','?)?
 	'}')?
 	(	('{' (ownedAnnotations+=AnnotationElementCS
 	      | ('derivation' UnrestrictedName? ':' ownedDefaultExpressions+=SpecificationCS? ';') 
@@ -188,15 +187,14 @@
 ;
 
 OperationCS returns base::OperationCS:
-	((qualifiers+='static' (qualifiers+='definition')?) | (qualifiers+='definition' (qualifiers+='static')?))?
+	(isStatic?='static'? & isDefinition?='definition'?)
 	'operation' (ownedSignature=TemplateSignatureCS)? name=UnrestrictedName
 	'(' (ownedParameters+=ParameterCS (',' ownedParameters+=ParameterCS)*)? ')'
 	(':' ownedType=TypedMultiplicityRefCS)?
 	('throws' ownedExceptions+=TypedRefCS (',' ownedExceptions+=TypedRefCS)*)?
-	('{'((qualifiers+='derived' | qualifiers+='!derived' |
-		  qualifiers+='ordered' | qualifiers+='!ordered' |
-		  qualifiers+='unique' | qualifiers+='!unique'
-		) ','? )+
+	('{'((isDerived?='derived' | '!derived') ','?)? &
+		((isOrdered?='ordered' | '!ordered') ','?)? &
+		((isNotUnique?='!unique' | 'unique') ','?)?
 	'}')?
 	(	('{' (ownedAnnotations+=AnnotationElementCS
 	        | ownedPreconditions+=PreconditionConstraintCS
@@ -219,29 +217,27 @@
 ParameterCS returns base::ParameterCS:
 	name=UnrestrictedName
 	(':' ownedType=TypedMultiplicityRefCS)?
-	('{'(( qualifiers+='ordered' | qualifiers+='!ordered' |
-		   qualifiers+='unique' | qualifiers+='!unique'
-		  ) ','?)+
+	('{'((isOrdered?='ordered' | '!ordered') ','?)? &
+		((isNotUnique?='!unique' | 'unique') ','?)?
 	 '}')?
 	('{' ownedAnnotations+=AnnotationElementCS* '}')?
 ;
 
 ReferenceCS returns base::ReferenceCS:
-	((qualifiers+='static' (qualifiers+='definition')?) | (qualifiers+='definition' (qualifiers+='static')?))?
+	(isStatic?='static'? & isDefinition?='definition'?)
 	'property' name=UnrestrictedName
 	('#' referredOpposite=[pivot::Property|UnrestrictedName])?
 	(':' ownedType=TypedMultiplicityRefCS)?
 	('=' default=SINGLE_QUOTED_STRING)?
-	('{'((qualifiers+='composes' | qualifiers+='!composes' |
-		  qualifiers+='derived' | qualifiers+='!derived' |
-		  qualifiers+='ordered' | qualifiers+='!ordered' |
-		  qualifiers+='readonly' | qualifiers+='!readonly' |
-		  qualifiers+='resolve' | qualifiers+='!resolve' |
-		  qualifiers+='transient' | qualifiers+='!transient' |
-		  qualifiers+='unique' | qualifiers+='!unique' |
-		  qualifiers+='unsettable' | qualifiers+='!unsettable' |
-		  qualifiers+='volatile' | qualifiers+='!volatile'
-		) ','? )+
+	('{'((isComposes?='composes' | '!composes') ','?)? &
+		((isDerived?='derived' | '!derived') ','?)? &
+		((isOrdered?='ordered' | '!ordered') ','?)? &
+		((isReadonly?='readonly' | '!readonly') ','?)? &
+		((isResolve?='resolve' | '!resolve') ','?)? &
+		((isTransient?='transient' | '!transient') ','?)? &
+		((isNotUnique?='!unique' | 'unique') ','?)? &
+		((isUnsettable?='unsettable' | '!unsettable') ','?)? &
+		((isVolatile?='volatile' | '!volatile') ','?)?
 	'}')?
 	(	('{' (ownedAnnotations+=AnnotationElementCS
 			| ('key' referredKeys+=[pivot::Property|UnrestrictedName] (',' referredKeys+=[pivot::Property|UnrestrictedName])* ';')
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/formatting/OCLinEcoreFormatter.java b/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/formatting/OCLinEcoreFormatter.java
index 927167d..e7b356d 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/formatting/OCLinEcoreFormatter.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/formatting/OCLinEcoreFormatter.java
@@ -96,8 +96,15 @@
 	    }		
 	    {	// AttributeCS
 			AttributeCSElements a = f.getAttributeCSAccess();
-			c.setNoSpace().between(a.getLeftCurlyBracketKeyword_5_0(), a.getRightCurlyBracketKeyword_5_2());
+			c.setNoSpace().between(a.getLeftCurlyBracketKeyword_5_0_0(), a.getRightCurlyBracketKeyword_5_7_1());
+			c.setNoSpace().around(a.getCommaKeyword_5_0_1_1());
 			c.setNoSpace().around(a.getCommaKeyword_5_1_1());
+			c.setNoSpace().around(a.getCommaKeyword_5_2_1());
+			c.setNoSpace().around(a.getCommaKeyword_5_3_1());
+			c.setNoSpace().around(a.getCommaKeyword_5_4_1());
+			c.setNoSpace().around(a.getCommaKeyword_5_5_1());
+			c.setNoSpace().around(a.getCommaKeyword_5_6_1());
+			c.setNoSpace().around(a.getCommaKeyword_5_7_0_1());
 			setNoSpaceLineWrap(c, a.getSemicolonKeyword_6_1());
 			setBraces(c, a.getLeftCurlyBracketKeyword_6_0_0(), a.getRightCurlyBracketKeyword_6_0_2());
 			//
@@ -159,8 +166,10 @@
 			c.setNoSpace().around(a.getLeftParenthesisKeyword_4());	
 			c.setNoSpace().before(a.getCommaKeyword_5_1_0());
 			c.setNoSpace().before(a.getRightParenthesisKeyword_6());	
-			c.setNoSpace().between(a.getLeftCurlyBracketKeyword_9_0(), a.getRightCurlyBracketKeyword_9_2());
+			c.setNoSpace().between(a.getLeftCurlyBracketKeyword_9_0_0(), a.getRightCurlyBracketKeyword_9_2_1());
+			c.setNoSpace().around(a.getCommaKeyword_9_0_1_1());
 			c.setNoSpace().around(a.getCommaKeyword_9_1_1());
+			c.setNoSpace().around(a.getCommaKeyword_9_2_0_1());
 			setBraces(c, a.getLeftCurlyBracketKeyword_10_0_0(), a.getRightCurlyBracketKeyword_10_0_2());
 			setNoSpaceLineWrap(c, a.getSemicolonKeyword_10_1());
 		    c.setIndentation(a.getLeftParenthesisKeyword_4(), a.getRightParenthesisKeyword_6());
@@ -178,8 +187,9 @@
 	    }
 	    {
 			ParameterCSElements a = f.getParameterCSAccess();
-			c.setNoSpace().between(a.getLeftCurlyBracketKeyword_2_0(), a.getRightCurlyBracketKeyword_2_2());
-			c.setNoSpace().around(a.getCommaKeyword_2_1_1());
+			c.setNoSpace().between(a.getLeftCurlyBracketKeyword_2_0_0(), a.getRightCurlyBracketKeyword_2_1_1());
+			c.setNoSpace().around(a.getCommaKeyword_2_0_1_1());
+			c.setNoSpace().around(a.getCommaKeyword_2_1_0_1());
 			setBraces(c, a.getLeftCurlyBracketKeyword_3_0(), a.getRightCurlyBracketKeyword_3_2());
 	    }
 	    {
@@ -203,8 +213,16 @@
 	    {
 			ReferenceCSElements a = f.getReferenceCSAccess();
 			c.setNoSpace().around(a.getNumberSignKeyword_3_0());
-			c.setNoSpace().between(a.getLeftCurlyBracketKeyword_6_0(), a.getRightCurlyBracketKeyword_6_2());
+			c.setNoSpace().between(a.getLeftCurlyBracketKeyword_6_0_0(), a.getRightCurlyBracketKeyword_6_8_1());
+			c.setNoSpace().around(a.getCommaKeyword_6_0_1_1());
 			c.setNoSpace().around(a.getCommaKeyword_6_1_1());
+			c.setNoSpace().around(a.getCommaKeyword_6_2_1());
+			c.setNoSpace().around(a.getCommaKeyword_6_3_1());
+			c.setNoSpace().around(a.getCommaKeyword_6_4_1());
+			c.setNoSpace().around(a.getCommaKeyword_6_5_1());
+			c.setNoSpace().around(a.getCommaKeyword_6_6_1());
+			c.setNoSpace().around(a.getCommaKeyword_6_7_1());
+			c.setNoSpace().around(a.getCommaKeyword_6_8_0_1());
 			setBraces(c, a.getLeftCurlyBracketKeyword_7_0_0(), a.getRightCurlyBracketKeyword_7_0_2());
 			c.setNoSpace().before(a.getCommaKeyword_7_0_1_1_2_0());
 			//
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/LibOperationCS.java b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/LibOperationCS.java
index 407b2ca..94c9e59 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/LibOperationCS.java
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/LibOperationCS.java
@@ -24,7 +24,6 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.LibOperationCS#isIsInvalidating <em>Is Invalidating</em>}</li>
- *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.LibOperationCS#isIsStatic <em>Is Static</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.LibOperationCS#isIsValidating <em>Is Validating</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.LibOperationCS#getPrecedence <em>Precedence</em>}</li>
  * </ul>
@@ -90,33 +89,6 @@
 	void setIsInvalidating(boolean value);
 
 	/**
-	 * Returns the value of the '<em><b>Is Static</b></em>' attribute.
-	 * The default value is <code>"false"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Is Static</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Is Static</em>' attribute.
-	 * @see #setIsStatic(boolean)
-	 * @see org.eclipse.ocl.xtext.oclstdlibcs.OCLstdlibCSPackage#getLibOperationCS_IsStatic()
-	 * @model default="false" dataType="org.eclipse.ocl.pivot.Boolean"
-	 * @generated
-	 */
-	boolean isIsStatic();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.ocl.xtext.oclstdlibcs.LibOperationCS#isIsStatic <em>Is Static</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Is Static</em>' attribute.
-	 * @see #isIsStatic()
-	 * @generated
-	 */
-	void setIsStatic(boolean value);
-
-	/**
 	 * Returns the value of the '<em><b>Is Validating</b></em>' attribute.
 	 * The default value is <code>"false"</code>.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/LibPropertyCS.java b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/LibPropertyCS.java
index c179ea9..20921c6 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/LibPropertyCS.java
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/LibPropertyCS.java
@@ -18,12 +18,6 @@
  * A representation of the model object '<em><b>Lib Property CS</b></em>'.
  * <!-- end-user-doc -->
  *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.LibPropertyCS#isIsStatic <em>Is Static</em>}</li>
- * </ul>
  *
  * @see org.eclipse.ocl.xtext.oclstdlibcs.OCLstdlibCSPackage#getLibPropertyCS()
  * @model
@@ -32,31 +26,4 @@
 public interface LibPropertyCS
 		extends AttributeCS, JavaImplementationCS {
 
-	/**
-	 * Returns the value of the '<em><b>Is Static</b></em>' attribute.
-	 * The default value is <code>"false"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Static</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Is Static</em>' attribute.
-	 * @see #setIsStatic(boolean)
-	 * @see org.eclipse.ocl.xtext.oclstdlibcs.OCLstdlibCSPackage#getLibPropertyCS_IsStatic()
-	 * @model default="false" dataType="org.eclipse.ocl.pivot.Boolean"
-	 * @generated
-	 */
-	boolean isIsStatic();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.ocl.xtext.oclstdlibcs.LibPropertyCS#isIsStatic <em>Is Static</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Is Static</em>' attribute.
-	 * @see #isIsStatic()
-	 * @generated
-	 */
-	void setIsStatic(boolean value);
-
 } // LibPropertyCS
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/OCLstdlibCSPackage.java b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/OCLstdlibCSPackage.java
index 97cf7ca..5170327 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/OCLstdlibCSPackage.java
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/OCLstdlibCSPackage.java
@@ -463,6 +463,15 @@
 	int LIB_COERCION_CS__NAME = BaseCSPackage.OPERATION_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_COERCION_CS__IS_NOT_UNIQUE = BaseCSPackage.OPERATION_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -472,6 +481,15 @@
 	int LIB_COERCION_CS__IS_OPTIONAL = BaseCSPackage.OPERATION_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_COERCION_CS__IS_ORDERED = BaseCSPackage.OPERATION_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -481,13 +499,31 @@
 	int LIB_COERCION_CS__OWNED_TYPE = BaseCSPackage.OPERATION_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
+	 * The feature id for the '<em><b>Is Definition</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int LIB_COERCION_CS__QUALIFIERS = BaseCSPackage.OPERATION_CS__QUALIFIERS;
+	int LIB_COERCION_CS__IS_DEFINITION = BaseCSPackage.OPERATION_CS__IS_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_COERCION_CS__IS_DERIVED = BaseCSPackage.OPERATION_CS__IS_DERIVED;
+
+	/**
+	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_COERCION_CS__IS_STATIC = BaseCSPackage.OPERATION_CS__IS_STATIC;
 
 	/**
 	 * The feature id for the '<em><b>Owned Signature</b></em>' containment reference.
@@ -715,6 +751,15 @@
 	int LIB_ITERATION_CS__NAME = BaseCSPackage.OPERATION_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_ITERATION_CS__IS_NOT_UNIQUE = BaseCSPackage.OPERATION_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -724,6 +769,15 @@
 	int LIB_ITERATION_CS__IS_OPTIONAL = BaseCSPackage.OPERATION_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_ITERATION_CS__IS_ORDERED = BaseCSPackage.OPERATION_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -733,13 +787,31 @@
 	int LIB_ITERATION_CS__OWNED_TYPE = BaseCSPackage.OPERATION_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
+	 * The feature id for the '<em><b>Is Definition</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int LIB_ITERATION_CS__QUALIFIERS = BaseCSPackage.OPERATION_CS__QUALIFIERS;
+	int LIB_ITERATION_CS__IS_DEFINITION = BaseCSPackage.OPERATION_CS__IS_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_ITERATION_CS__IS_DERIVED = BaseCSPackage.OPERATION_CS__IS_DERIVED;
+
+	/**
+	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_ITERATION_CS__IS_STATIC = BaseCSPackage.OPERATION_CS__IS_STATIC;
 
 	/**
 	 * The feature id for the '<em><b>Owned Signature</b></em>' containment reference.
@@ -913,6 +985,15 @@
 	int LIB_OPERATION_CS__NAME = BaseCSPackage.OPERATION_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_OPERATION_CS__IS_NOT_UNIQUE = BaseCSPackage.OPERATION_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -922,6 +1003,15 @@
 	int LIB_OPERATION_CS__IS_OPTIONAL = BaseCSPackage.OPERATION_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_OPERATION_CS__IS_ORDERED = BaseCSPackage.OPERATION_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -931,13 +1021,31 @@
 	int LIB_OPERATION_CS__OWNED_TYPE = BaseCSPackage.OPERATION_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
+	 * The feature id for the '<em><b>Is Definition</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int LIB_OPERATION_CS__QUALIFIERS = BaseCSPackage.OPERATION_CS__QUALIFIERS;
+	int LIB_OPERATION_CS__IS_DEFINITION = BaseCSPackage.OPERATION_CS__IS_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_OPERATION_CS__IS_DERIVED = BaseCSPackage.OPERATION_CS__IS_DERIVED;
+
+	/**
+	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_OPERATION_CS__IS_STATIC = BaseCSPackage.OPERATION_CS__IS_STATIC;
 
 	/**
 	 * The feature id for the '<em><b>Owned Signature</b></em>' containment reference.
@@ -1021,22 +1129,13 @@
 	int LIB_OPERATION_CS__IS_INVALIDATING = BaseCSPackage.OPERATION_CS_FEATURE_COUNT + 1;
 
 	/**
-	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LIB_OPERATION_CS__IS_STATIC = BaseCSPackage.OPERATION_CS_FEATURE_COUNT + 2;
-
-	/**
 	 * The feature id for the '<em><b>Is Validating</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int LIB_OPERATION_CS__IS_VALIDATING = BaseCSPackage.OPERATION_CS_FEATURE_COUNT + 3;
+	int LIB_OPERATION_CS__IS_VALIDATING = BaseCSPackage.OPERATION_CS_FEATURE_COUNT + 2;
 
 	/**
 	 * The feature id for the '<em><b>Precedence</b></em>' reference.
@@ -1045,7 +1144,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LIB_OPERATION_CS__PRECEDENCE = BaseCSPackage.OPERATION_CS_FEATURE_COUNT + 4;
+	int LIB_OPERATION_CS__PRECEDENCE = BaseCSPackage.OPERATION_CS_FEATURE_COUNT + 3;
 
 	/**
 	 * The number of structural features of the '<em>Lib Operation CS</em>' class.
@@ -1054,7 +1153,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LIB_OPERATION_CS_FEATURE_COUNT = BaseCSPackage.OPERATION_CS_FEATURE_COUNT + 5;
+	int LIB_OPERATION_CS_FEATURE_COUNT = BaseCSPackage.OPERATION_CS_FEATURE_COUNT + 4;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibPackageCSImpl <em>Lib Package CS</em>}' class.
@@ -1229,6 +1328,15 @@
 	int LIB_PROPERTY_CS__NAME = BaseCSPackage.ATTRIBUTE_CS__NAME;
 
 	/**
+	 * The feature id for the '<em><b>Is Not Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_PROPERTY_CS__IS_NOT_UNIQUE = BaseCSPackage.ATTRIBUTE_CS__IS_NOT_UNIQUE;
+
+	/**
 	 * The feature id for the '<em><b>Is Optional</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1238,6 +1346,15 @@
 	int LIB_PROPERTY_CS__IS_OPTIONAL = BaseCSPackage.ATTRIBUTE_CS__IS_OPTIONAL;
 
 	/**
+	 * The feature id for the '<em><b>Is Ordered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_PROPERTY_CS__IS_ORDERED = BaseCSPackage.ATTRIBUTE_CS__IS_ORDERED;
+
+	/**
 	 * The feature id for the '<em><b>Owned Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1247,13 +1364,31 @@
 	int LIB_PROPERTY_CS__OWNED_TYPE = BaseCSPackage.ATTRIBUTE_CS__OWNED_TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Qualifiers</b></em>' attribute list.
+	 * The feature id for the '<em><b>Is Definition</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int LIB_PROPERTY_CS__QUALIFIERS = BaseCSPackage.ATTRIBUTE_CS__QUALIFIERS;
+	int LIB_PROPERTY_CS__IS_DEFINITION = BaseCSPackage.ATTRIBUTE_CS__IS_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Is Derived</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_PROPERTY_CS__IS_DERIVED = BaseCSPackage.ATTRIBUTE_CS__IS_DERIVED;
+
+	/**
+	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_PROPERTY_CS__IS_STATIC = BaseCSPackage.ATTRIBUTE_CS__IS_STATIC;
 
 	/**
 	 * The feature id for the '<em><b>Default</b></em>' attribute.
@@ -1265,6 +1400,42 @@
 	int LIB_PROPERTY_CS__DEFAULT = BaseCSPackage.ATTRIBUTE_CS__DEFAULT;
 
 	/**
+	 * The feature id for the '<em><b>Is Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_PROPERTY_CS__IS_READONLY = BaseCSPackage.ATTRIBUTE_CS__IS_READONLY;
+
+	/**
+	 * The feature id for the '<em><b>Is Transient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_PROPERTY_CS__IS_TRANSIENT = BaseCSPackage.ATTRIBUTE_CS__IS_TRANSIENT;
+
+	/**
+	 * The feature id for the '<em><b>Is Unsettable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_PROPERTY_CS__IS_UNSETTABLE = BaseCSPackage.ATTRIBUTE_CS__IS_UNSETTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Is Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_PROPERTY_CS__IS_VOLATILE = BaseCSPackage.ATTRIBUTE_CS__IS_VOLATILE;
+
+	/**
 	 * The feature id for the '<em><b>Owned Default Expressions</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1283,6 +1454,15 @@
 	int LIB_PROPERTY_CS__OWNING_CLASS = BaseCSPackage.ATTRIBUTE_CS__OWNING_CLASS;
 
 	/**
+	 * The feature id for the '<em><b>Is Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LIB_PROPERTY_CS__IS_ID = BaseCSPackage.ATTRIBUTE_CS__IS_ID;
+
+	/**
 	 * The feature id for the '<em><b>Implementation</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1292,22 +1472,13 @@
 	int LIB_PROPERTY_CS__IMPLEMENTATION = BaseCSPackage.ATTRIBUTE_CS_FEATURE_COUNT + 0;
 
 	/**
-	 * The feature id for the '<em><b>Is Static</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LIB_PROPERTY_CS__IS_STATIC = BaseCSPackage.ATTRIBUTE_CS_FEATURE_COUNT + 1;
-
-	/**
 	 * The number of structural features of the '<em>Lib Property CS</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int LIB_PROPERTY_CS_FEATURE_COUNT = BaseCSPackage.ATTRIBUTE_CS_FEATURE_COUNT + 2;
+	int LIB_PROPERTY_CS_FEATURE_COUNT = BaseCSPackage.ATTRIBUTE_CS_FEATURE_COUNT + 1;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibRootPackageCSImpl <em>Lib Root Package CS</em>}' class.
@@ -1666,17 +1837,6 @@
 	EAttribute getLibOperationCS_IsInvalidating();
 
 	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.oclstdlibcs.LibOperationCS#isIsStatic <em>Is Static</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Is Static</em>'.
-	 * @see org.eclipse.ocl.xtext.oclstdlibcs.LibOperationCS#isIsStatic()
-	 * @see #getLibOperationCS()
-	 * @generated
-	 */
-	EAttribute getLibOperationCS_IsStatic();
-
-	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.oclstdlibcs.LibOperationCS#isIsValidating <em>Is Validating</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1719,17 +1879,6 @@
 	EClass getLibPropertyCS();
 
 	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.xtext.oclstdlibcs.LibPropertyCS#isIsStatic <em>Is Static</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Is Static</em>'.
-	 * @see org.eclipse.ocl.xtext.oclstdlibcs.LibPropertyCS#isIsStatic()
-	 * @see #getLibPropertyCS()
-	 * @generated
-	 */
-	EAttribute getLibPropertyCS_IsStatic();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.ocl.xtext.oclstdlibcs.LibRootPackageCS <em>Lib Root Package CS</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1942,14 +2091,6 @@
 		EAttribute LIB_OPERATION_CS__IS_INVALIDATING = eINSTANCE.getLibOperationCS_IsInvalidating();
 
 		/**
-		 * The meta object literal for the '<em><b>Is Static</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute LIB_OPERATION_CS__IS_STATIC = eINSTANCE.getLibOperationCS_IsStatic();
-
-		/**
 		 * The meta object literal for the '<em><b>Is Validating</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -1986,14 +2127,6 @@
 		EClass LIB_PROPERTY_CS = eINSTANCE.getLibPropertyCS();
 
 		/**
-		 * The meta object literal for the '<em><b>Is Static</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute LIB_PROPERTY_CS__IS_STATIC = eINSTANCE.getLibPropertyCS_IsStatic();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibRootPackageCSImpl <em>Lib Root Package CS</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/LibOperationCSImpl.java b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/LibOperationCSImpl.java
index 6615646..ac4446f 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/LibOperationCSImpl.java
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/LibOperationCSImpl.java
@@ -37,7 +37,6 @@
  * <ul>
  *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibOperationCSImpl#getImplementation <em>Implementation</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibOperationCSImpl#isIsInvalidating <em>Is Invalidating</em>}</li>
- *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibOperationCSImpl#isIsStatic <em>Is Static</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibOperationCSImpl#isIsValidating <em>Is Validating</em>}</li>
  *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibOperationCSImpl#getPrecedence <em>Precedence</em>}</li>
  * </ul>
@@ -79,26 +78,6 @@
 	protected boolean isInvalidating = IS_INVALIDATING_EDEFAULT;
 
 	/**
-	 * The default value of the '{@link #isIsStatic() <em>Is Static</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isIsStatic()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean IS_STATIC_EDEFAULT = false;
-
-	/**
-	 * The cached value of the '{@link #isIsStatic() <em>Is Static</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isIsStatic()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean isStatic = IS_STATIC_EDEFAULT;
-
-	/**
 	 * The default value of the '{@link #isIsValidating() <em>Is Validating</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -264,31 +243,6 @@
 	 * @generated
 	 */
 	@Override
-	public boolean isIsStatic()
-	{
-		return isStatic;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setIsStatic(boolean newIsStatic)
-	{
-		boolean oldIsStatic = isStatic;
-		isStatic = newIsStatic;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OCLstdlibCSPackage.LIB_OPERATION_CS__IS_STATIC, oldIsStatic, isStatic));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public boolean isIsValidating()
 	{
 		return isValidating;
@@ -322,8 +276,6 @@
 				return basicGetImplementation();
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_INVALIDATING:
 				return isIsInvalidating();
-			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_STATIC:
-				return isIsStatic();
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_VALIDATING:
 				return isIsValidating();
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__PRECEDENCE:
@@ -348,9 +300,6 @@
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_INVALIDATING:
 				setIsInvalidating((Boolean)newValue);
 				return;
-			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_STATIC:
-				setIsStatic((Boolean)newValue);
-				return;
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_VALIDATING:
 				setIsValidating((Boolean)newValue);
 				return;
@@ -376,9 +325,6 @@
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_INVALIDATING:
 				setIsInvalidating(IS_INVALIDATING_EDEFAULT);
 				return;
-			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_STATIC:
-				setIsStatic(IS_STATIC_EDEFAULT);
-				return;
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_VALIDATING:
 				setIsValidating(IS_VALIDATING_EDEFAULT);
 				return;
@@ -402,8 +348,6 @@
 				return implementation != null;
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_INVALIDATING:
 				return isInvalidating != IS_INVALIDATING_EDEFAULT;
-			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_STATIC:
-				return isStatic != IS_STATIC_EDEFAULT;
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__IS_VALIDATING:
 				return isValidating != IS_VALIDATING_EDEFAULT;
 			case OCLstdlibCSPackage.LIB_OPERATION_CS__PRECEDENCE:
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/LibPropertyCSImpl.java b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/LibPropertyCSImpl.java
index 012fa8a..719208e 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/LibPropertyCSImpl.java
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/LibPropertyCSImpl.java
@@ -35,7 +35,6 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibPropertyCSImpl#getImplementation <em>Implementation</em>}</li>
- *   <li>{@link org.eclipse.ocl.xtext.oclstdlibcs.impl.LibPropertyCSImpl#isIsStatic <em>Is Static</em>}</li>
  * </ul>
  *
  * @generated
@@ -55,26 +54,6 @@
 	protected JavaClassCS implementation;
 
 	/**
-	 * The default value of the '{@link #isIsStatic() <em>Is Static</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isIsStatic()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean IS_STATIC_EDEFAULT = false;
-
-	/**
-	 * The cached value of the '{@link #isIsStatic() <em>Is Static</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isIsStatic()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean isStatic = IS_STATIC_EDEFAULT;
-
-	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -143,37 +122,12 @@
 	 * @generated
 	 */
 	@Override
-	public boolean isIsStatic() {
-		return isStatic;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setIsStatic(boolean newIsStatic) {
-		boolean oldIsStatic = isStatic;
-		isStatic = newIsStatic;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OCLstdlibCSPackage.LIB_PROPERTY_CS__IS_STATIC, oldIsStatic, isStatic));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID)
 		{
 			case OCLstdlibCSPackage.LIB_PROPERTY_CS__IMPLEMENTATION:
 				if (resolve) return getImplementation();
 				return basicGetImplementation();
-			case OCLstdlibCSPackage.LIB_PROPERTY_CS__IS_STATIC:
-				return isIsStatic();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -190,9 +144,6 @@
 			case OCLstdlibCSPackage.LIB_PROPERTY_CS__IMPLEMENTATION:
 				setImplementation((JavaClassCS)newValue);
 				return;
-			case OCLstdlibCSPackage.LIB_PROPERTY_CS__IS_STATIC:
-				setIsStatic((Boolean)newValue);
-				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -209,9 +160,6 @@
 			case OCLstdlibCSPackage.LIB_PROPERTY_CS__IMPLEMENTATION:
 				setImplementation((JavaClassCS)null);
 				return;
-			case OCLstdlibCSPackage.LIB_PROPERTY_CS__IS_STATIC:
-				setIsStatic(IS_STATIC_EDEFAULT);
-				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -227,8 +175,6 @@
 		{
 			case OCLstdlibCSPackage.LIB_PROPERTY_CS__IMPLEMENTATION:
 				return implementation != null;
-			case OCLstdlibCSPackage.LIB_PROPERTY_CS__IS_STATIC:
-				return isStatic != IS_STATIC_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -278,15 +224,4 @@
 	public @Nullable <R> R accept(@NonNull BaseCSVisitor<R> visitor) {
 		return (R) ((OCLstdlibCSVisitor<?>)visitor).visitLibPropertyCS(this);
 	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString()
-	{
-		return super.toString();
-	}
 } //LibPropertyCSImpl
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/OCLstdlibCSPackageImpl.java b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/OCLstdlibCSPackageImpl.java
index e2b50c4..9afcae7 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/OCLstdlibCSPackageImpl.java
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/emf-gen/org/eclipse/ocl/xtext/oclstdlibcs/impl/OCLstdlibCSPackageImpl.java
@@ -316,7 +316,7 @@
 	 */
 	@Override
 	public EReference getLibOperationCS_Precedence() {
-		return (EReference)libOperationCSEClass.getEStructuralFeatures().get(3);
+		return (EReference)libOperationCSEClass.getEStructuralFeatures().get(2);
 	}
 
 	/**
@@ -336,20 +336,9 @@
 	 * @generated
 	 */
 	@Override
-	public EAttribute getLibOperationCS_IsStatic()
-	{
-		return (EAttribute)libOperationCSEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public EAttribute getLibOperationCS_IsValidating()
 	{
-		return (EAttribute)libOperationCSEClass.getEStructuralFeatures().get(2);
+		return (EAttribute)libOperationCSEClass.getEStructuralFeatures().get(1);
 	}
 
 	/**
@@ -390,17 +379,6 @@
 	 * @generated
 	 */
 	@Override
-	public EAttribute getLibPropertyCS_IsStatic()
-	{
-		return (EAttribute)libPropertyCSEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public EClass getLibRootPackageCS()
 	{
 		return libRootPackageCSEClass;
@@ -519,7 +497,6 @@
 
 		libOperationCSEClass = createEClass(LIB_OPERATION_CS);
 		createEAttribute(libOperationCSEClass, LIB_OPERATION_CS__IS_INVALIDATING);
-		createEAttribute(libOperationCSEClass, LIB_OPERATION_CS__IS_STATIC);
 		createEAttribute(libOperationCSEClass, LIB_OPERATION_CS__IS_VALIDATING);
 		createEReference(libOperationCSEClass, LIB_OPERATION_CS__PRECEDENCE);
 
@@ -527,7 +504,6 @@
 		createEReference(libPackageCSEClass, LIB_PACKAGE_CS__OWNED_PRECEDENCES);
 
 		libPropertyCSEClass = createEClass(LIB_PROPERTY_CS);
-		createEAttribute(libPropertyCSEClass, LIB_PROPERTY_CS__IS_STATIC);
 
 		libRootPackageCSEClass = createEClass(LIB_ROOT_PACKAGE_CS);
 
@@ -609,7 +585,6 @@
 
 		initEClass(libOperationCSEClass, LibOperationCS.class, "LibOperationCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getLibOperationCS_IsInvalidating(), thePivotPackage.getBoolean(), "isInvalidating", "false", 0, 1, LibOperationCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getLibOperationCS_IsStatic(), thePivotPackage.getBoolean(), "isStatic", "false", 0, 1, LibOperationCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getLibOperationCS_IsValidating(), thePivotPackage.getBoolean(), "isValidating", "false", 0, 1, LibOperationCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getLibOperationCS_Precedence(), thePivotPackage.getPrecedence(), null, "precedence", null, 0, 1, LibOperationCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
@@ -617,7 +592,6 @@
 		initEReference(getLibPackageCS_OwnedPrecedences(), this.getPrecedenceCS(), null, "ownedPrecedences", null, 0, -1, LibPackageCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(libPropertyCSEClass, LibPropertyCS.class, "LibPropertyCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getLibPropertyCS_IsStatic(), thePivotPackage.getBoolean(), "isStatic", "false", 0, 1, LibPropertyCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(libRootPackageCSEClass, LibRootPackageCS.class, "LibRootPackageCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/model/OCLstdlibCS.ecore b/plugins/org.eclipse.ocl.xtext.oclstdlib/model/OCLstdlibCS.ecore
index c9b5d82..a9dbcb2 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/model/OCLstdlibCS.ecore
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/model/OCLstdlibCS.ecore
@@ -27,8 +27,6 @@
   <eClassifiers xsi:type="ecore:EClass" name="LibOperationCS" eSuperTypes="../../org.eclipse.ocl.xtext.base/model/BaseCS.ecore#//OperationCS #//JavaImplementationCS">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="isInvalidating" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"
         defaultValueLiteral="false"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isStatic" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"
-        defaultValueLiteral="false"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="isValidating" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"
         defaultValueLiteral="false"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="precedence" eType="ecore:EClass ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Precedence"/>
@@ -37,10 +35,7 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="ownedPrecedences" upperBound="-1"
         eType="#//PrecedenceCS" containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="LibPropertyCS" eSuperTypes="../../org.eclipse.ocl.xtext.base/model/BaseCS.ecore#//AttributeCS #//JavaImplementationCS">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isStatic" eType="ecore:EDataType ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Boolean"
-        defaultValueLiteral="false"/>
-  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LibPropertyCS" eSuperTypes="../../org.eclipse.ocl.xtext.base/model/BaseCS.ecore#//AttributeCS #//JavaImplementationCS"/>
   <eClassifiers xsi:type="ecore:EClass" name="LibRootPackageCS" eSuperTypes="../../org.eclipse.ocl.xtext.base/model/BaseCS.ecore#//RootPackageCS"/>
   <eClassifiers xsi:type="ecore:EClass" name="MetaclassNameCS" eSuperTypes="../../org.eclipse.ocl.xtext.base/model/BaseCS.ecore#//ElementCS ../../org.eclipse.ocl.pivot.internal/model/Pivot.ecore#//Nameable">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
